Волатильность инструментов

 

Пытаюсь проанализировать волатильность инструментов. Сваял скрипт, отображающий количество баров в истории инструмента и среднюю волатильность этого бара. Ну что-то наверное неправильно, потому что показатели слишком низкие получаются, хотя вроде ошибок нет.

Вот, например, средняя волатильность бара по каждому тф EurUsd: 

-------------------------------------------- 

- 1.0 пп                 1h - 9.4 пп

- 2.6 пп                 4h - 27.6 пп

15м - 4.2 пп               1d - 121.7 пп

30м - 6.1 пп

-------------------------------------------- 

Кажется слишком низкие показатели. Может кто нибудь код глянет. вдруг ошибка закралась?

Кто-нибудь занимался анализом волатильности инструментов по многочисленным показателям, с точки наилучшего выбора инструмента для торговли и временного интервала? Было бы интересно обсудить. 

 

int    quantityBars  = 0;            //количество баров
double Mass[100];                    //временный размер массива
double volatilitySum = 0;            //сумма волатильности
//+------------------------------------------------------------------+

void OnInit()
{
   quantityBars = iBars(Symbol(),0);

   ArrayResize(Mass,quantityBars);          //ресайз под кол-во баров
   //Не совсем практично получается так массив устанавливать
   //но изначально присвоить массиву размер iBars мне не удалось  
 
   return;
}
//+------------------------------------------------------------------+
void OnStart()
{
    for(int i=0;i<ArraySize(Mass);i++)     //Получаем волатильность каждого бара
     {
         Mass[i] = High[i] - Low[i];
     }
   
   for(int j=0;j<ArraySize(Mass);j++)      //Получаем общую сумму
     {
         volatilitySum += Mass[j]; 
     }
   
   //Выводим среднее  
   if(StringFind(_Symbol,"JPY")>-1)    
      Comment("Bars' quantity: ",quantityBars,"\n","Average volatility: ", NormalizeDouble((volatilitySum/quantityBars)*100,1));  //Для JPY пар 
   else
      Comment("Bars' quantity: ",quantityBars,"\n","Average volatility: ", NormalizeDouble((volatilitySum/quantityBars)*10000,1)); //Для остальных

   return;
}
 

Торговые издержки применительно к каждому ТФ по EurUsd - будем брать в расчет практически уже стандартный везде спред в 1.0 пп - с коэффициентом роста издержек, относительно старшего ТФ:

 - 100%     - 2.59             1h - 10.6%   - 2.94

 - 38.5%    - 1.61             4h - 3.6%     - 4.5

15м - 23.8%  - 1.45             1d - 0.8%

30м - 16.4%  - 1.54

 

Я как раз тоже с волатильностью сейчас разбираюсь, частично это связано с показателем Херста. Наткнулся на косяк.

Формула расчета:

 

Первое и второе значение в формуле это СКО, третье - время.

В таблицах корень из времени 3 столбец, 4 столбец соответствует 1 значению формулы, 5 столбец соответствует 2 значению формулы.

4 и 5 столбцы это пункты 5-тизнака. Расчеты сделаны по ценам закрытия для евро.

Вашим показаниям больше соответствует 4 столбец, но у вас среднее по разнице H-L, а у меня СКО по приращениям клозов.

Результаты по 8000 отсчетов:

   

Результаты по 24000 отсчетов:

  

Интересно, что показатель Херста будет отличаться для разных ТФ.

Но косяк в том, что показания меняются в зависимости от числа отсчетов. Для 24000 пик на 2 часах, а для 8000 - на 6 часах. То есть разница и там и там в 3 раза.

Код:

   int bars=24000;
   double sko=0.;
   for(int i=rates_total-bars;i<rates_total;i++)
     {double a=close[i]-open[i];
      a/=_Point;
      sko+=a*a;
     }
   sko/=bars;
   Alert(EnumToString(_Period)," ",sqrt(sko));
 


 Игоря Кима

Файлы:
 

хотелось бы понять что вы считаете ?

здесь

Mass[i] = High[i] - Low[i];

подсчет изменений цены, а не пункты, о которых идет ваша речь..

 а здесь

volatilitySum/quantityBars)*100

получаете среднее, почему-то умноженное на 100..

опять же обратимся к первой строке моего поста..

если нужны пункты, то и считайте пункты

 round(volatilitySum/quantityBars)/Point)

 
Rorschach:

Я как раз тоже с волатильностью сейчас разбираюсь, частично это связано с показателем Херста. Наткнулся на косяк.

Ну наверное я не Ваш уровень. Никогда не слышал об экспоненте Херста до этого, ознакомился - мало чего понял честно сказать. Скажите, а как он применим относительно торговли? Опять же, Вы считали ско, а я обычную среднюю волатильность свечи. 

Посчитал среднее тело свечи - по всем тф получается примерно 50% (+/- 2%). Можно ли сказать, что трендовость инструмента составляет 50% от движения?

 
keekkenen:

если нужны пункты, то и считайте пункты


Посчитал Вашим методом - все тоже самое. Только я считал "целые" пункты. то бишь спред для меня - это 1пп, а не 10.
 
winner2008:

Посчитал Вашим методом - все тоже самое. Только я считал "целые" пункты. то бишь спред для меня - это 1пп, а не 10.

у меня на EURUSD получилось 120п c копейками (пятизначных) на истории в 5000 баров на часах, у тебя 94 и что с того, в чем по твоему неправильность значения в 94 (или 9.4) по твоему ?
 
winner2008:

Ну наверное я не Ваш уровень. Никогда не слышал об экспоненте Херста до этого, ознакомился - мало чего понял честно сказать. Скажите, а как он применим относительно торговли? Опять же, Вы считали ско, а я обычную среднюю волатильность свечи. 

Посчитал среднее тело свечи - по всем тф получается примерно 50% (+/- 2%). Можно ли сказать, что трендовость инструмента составляет 50% от движения?

С Херстом все просто. Предполагается, что для случайных движений в формуле выше степень должна быть 0,5 (квадратный корень).

Если преобладает тренд, то степень>0,5.

Если флет, то <0,5. 

При этом коэффициент перед корнем должен быть одинаковым для разных ТФ.

По результатам из таблицы можно сказать, что старшие ТФ более трендовые. 

Причина обращения: