Обсуждение статьи "Способы вызова индикаторов в MQL5" - страница 2

 

Он не позволяет мне скомпилировать файл.

Я не знаю, есть ли какие-нибудь идеи, что происходит.

Спасибо,

Жорди

 
Спасибо за огромную работу!
 

Спасибо!

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

Если это неправильно, пожалуйста, поправьте меня, и я внесу поправки.

Что мне кажется странным, так это то, что значения не совпадают с простым скользящим средним на графике.

################### В скрипте

int period = 21; //Скользящая средняя на 21 бар
int sampleSize = 100; //Это количество баров данных, которые вы хотите получить
int handle = iCustom(Symbol(),0, "Examples\\\Custom Moving Average",
period,// Период
0, // Смещение
MODE_SMA, // Метод расчета
PRICE_CLOSE // Расчет по ценам закрытия
);


void OnTick()
{

// Это массив, в который будут скопированы скользящие средние.
// Каждый элемент здесь - это значение скользящей средней
// Первый элемент в этом массиве (элемент на позиции 0) - самый последний
// Последний элемент - это последний элемент в массиве ArraySize() - 1
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues, true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) < 0){Print("Ошибка CopyBufferMA1 =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];


################################# В советнике (ВНИМАНИЕ: OnInit и OnTick)

int OnInit(){

int period = 21; // Скользящая средняя на 21 баре

int sampleSize = 100; //Это количество баров данных, которые вы хотите получить
int handle = iCustom(Symbol(),0, "Examples\\\Custom Moving Average",
period, //Период
0, // Смещение
MODE_SMA, // Метод расчета
PRICE_CLOSE // Расчет по ценам закрытия
);

}

OnTick()
{

// Это массив, в который будут скопированы скользящие средние.
// Каждый элемент здесь - это значение скользящей средней
// Первый элемент в этом массиве (элемент на позиции 0) - самый последний
// Последний элемент - это последний элемент в массиве ArraySize() - 1
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues, true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) < 0){Print("Ошибка CopyBufferMA1 =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];

}

 
Отличная статья
 
мда...проще свой индикатор придумать и в код робота вшить чемэти хендлы кодить каждый раз... жесть