Обьясните как работает

 

Господа , как это все работает . Вроде не тупой по специальности элекиронщик , с программированием знаком . Но логику Mql понять не могу .

Простейший код . Вывести среднее приращение цены в процентах.

//+------------------------------------------------------------------+
//| $DlinaSvechi. mq4 |
//| Alex |
//| al53yandex. ru |
//+------------------------------------------------------------------+
#property copyright "Alex"
#property link "al53yandex.ru"

#property indicator_separate_window
//#property indicator_chart_window
//#property indicator_minimum 0
//#property indicator_maximum 0.005
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Green
//---- input parameters
extern int Sredn=10;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double Mass[1000];
double Mass1[1000];
double Mass2[1000];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,ExtMapBuffer3);
ArraySetAsSeries(Mass,true);
ArraySetAsSeries(Mass1,true);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
double DlSv=0,aaa,bbb,ccc,ddd;
if(counted_bars > 0) counted_bars--;
int limit = Bars - counted_bars;
for(int j=0;j<=limit;j++)
{
Mass[j]=(Close[j]-Close[j+1])/Close[j+1]*100;
}
for (int i=0;i<=limit;i++)
{
ExtMapBuffer2[i]=iMAOnArray(Mass, 0, Sredn, 0,MODE_SMA, i);
}


//----

//----
return(0);
}

Не работает .если вот эту строку Mass[j]=(Close[j]-Close[j+1])/Close[j+1]*100; поменять на Mass[j]=(Close[j]-Close[j+1]) то работает ; Но мне нужно относительное

И еще плз какие еще баги есть .

 
В журнал эксперта заглянуть не пробовали? Там должна была вывестись ошибка деления на 0 (zero divide). В этом всё и дело. Поэтому нужна либо проверка условия Close[j+1]>0, либо j<Bars-1 (хотя тут рациональнее просто задать правильные границы цикла, чтобы до Bars-1 и не доходило)
 

Огромное человеческое, впредь буду внимательнее.

 

Что означает фраза в описании.

double iMAOnArray( double array[], int total, int period, int ma_shift, int ma_method, int shift)
Расчет скользящего среднего на данных, хранящихся в массиве. В отличие от iMA(...) функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее. Расчет производится слева направо. Для организации доступа к элементам массива, как к таймсерии (то есть справа налево), необходимо использовать функцию ArraySetAsSeries.

Параметры:

array[] Массив с данными.
total Количество элементов для вычисления. 0 означает все элементы массива.
period Период усреднения для вычисления скользящего среднего.
ma_shift Сдвиг индикатора относительно ценового графика.
ma_method Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
shift Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

total кол-во элементов для вычисления если можно на пальцах .

тоже самое и с iStdDevOnArray

У меня тоько одно предположение , что при 0 функция прогоняет весь массив , хотя нужно посчитать среднее на i - того элемента.

 
Если речь идет о total, то это означает, что расчет мувинга ведется от 0 элемента массива array до total-1 (общее количество расчитываемых элементов равно total). При total=0 расчет ведется на всем размере массива array.