Не совсем работает скрипт, расчетать среднюю волатильность по инструменту

 

Ребят, только осваиваю mql, написал скрипт который должен выводить среднюю волатильность по инструменту, но почему-то не работает.

Код настолько простой, но все равно решил закомментить:

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

//+------------------------------------------------------------------+

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

   ArrayResize(Mass,quantityBars);          //ресайз под кол-во баров
   //Не совсем практично получается так массив устанавливать
   //но изначально присвоить массиву размер iBars мне не удалось  
 
   return;
}
//+------------------------------------------------------------------+
void OnStart()
{
    for(int i=0;i<quantityBars;i++)            //Получаем волатильность каждого бара
     {
         Mass[i] = High[i] - Low[i];
     }
   
   for(int j=0;j<Mass[quantityBars];j++)      //Получаем общую сумму
     {
         averageVolatily += Mass[j]; 
     }
     
   Comment(quantityBars,"\n",(averageVolatily/quantityBars));   //Выводим среднее
   

   return;
}

Выдает значение 0. В чем причина? И дайте пожалуйста какие-нибудь советы новичку, как делать правильно и как делать не надо..

Спс!

 
winner2008:

Ребят, только осваиваю mql, написал скрипт который должен выводить среднюю волатильность по инструменту, но почему-то не работает.

Код настолько простой, но все равно решил закомментить:

Выдает значение 0. В чем причина? И дайте пожалуйста какие-нибудь советы новичку, как делать правильно и как делать не надо..

Спс!


Что-то у Вас со вторым циклом не то. Попробуйте расшифровать что написали в коде. Особое внимание уделите заголовку цикла. Типам переменных и их значениям
 
Vinin:

Что-то у Вас со вторым циклом не то. Попробуйте расшифровать что написали в коде. Особое внимание уделите заголовку цикла. Типам переменных и их значениям


ну попробую озвучить мысль вслух: увеличиваем счетчик, пока он меньше количества баров и волатильность каждого бара накапливаем в переменную, согласно номеру счетчика каждого элемента массива..

Все равно не врубаюсь..

 

Да, дурак, согласен! Скажите, а есть ли в mql что нибудь наподобие length из С#? Моё условие можно было бы написать там так: for(int j=0; j<Mass[Lenght]; j++), или можно написать так в мт:

for(int j=0; j<Mass[ArraySize(Mass)]; j++) ???

Еще скажите пожалуйста, как правильно мне надо было задавать цикл с 0 бара или с первого? В моем же коде получается, что я анализирую еще не сформировавшийся нулевой бар?

Можно ли как то установить размер массива сразу правильный, без лишнего кода?

 
Может оформить индикатор?
 

Да мне не нужен постоянный пересчет, можете пожалуйста на мои вопросы выше ответить?

 
winner2008:

Да мне не нужен постоянный пересчет, можете пожалуйста на мои вопросы выше ответить?

Можно, если ты расскажешь что это будет в итоге? Индикатор? Тогда ты его совсем не правильно начал писать. Советник? Зачем писать в советник то, что лучше посчитать в индикаторе и iCustom() получить значение на любом баре...


ps; Индикатор постоянно не пересчитывает. Считается только текущий бар.

 

AlexeyVik:

ps; Индикатор постоянно не пересчитывает. Считается только текущий бар.

Спасибо, я этого не знал.. В самом первом сообщении я писал, что это скрипт, а список интересующих меня вопросов я укзал 3-мя сообщениями выше.

Спс!

 

https://www.mql5.com/ru/forum/136801

там был индикатор barmed, по нему вполне можно допилить свой вариант, благо реализация простая.

 
winner2008:


ну попробую озвучить мысль вслух: увеличиваем счетчик, пока он меньше количества баров и волатильность каждого бара накапливаем в переменную, согласно номеру счетчика каждого элемента массива..

Все равно не врубаюсь..


Экспериментируй. Это индикатор

Файлы: