Вот как это реализовано для используемого индикатора ADX:
// – - заполняем часть массива ADXBuffer значениями из индикаторного буфера под индексом 0
if (CopyBuffer (ind_handle,0,0,amount, adx_values) <0)
{
// – - если копирование не удалось, сообщим код ошибки
PrintFormat («Не удалось скопировать данные из индикатора iADX, код ошибки %d», GetLastError ());
// – - завершим с нулевым результатом – это означает, что индикатор будет считаться нерассчитанным
return (false);
}
// – - заполняем часть массива DI_plusBuffer значениями из индикаторного буфера под индексом 1
if (CopyBuffer (ind_handle,1,0,amount, DIplus_values) <0)
{
// – - если копирование не удалось, сообщим код ошибки
PrintFormat («Не удалось скопировать данные из индикатора iADX, код ошибки %d», GetLastError ());
// – - завершим с нулевым результатом – это означает, что индикатор будет считаться нерассчитанным
return (false);
}
// – - заполняем часть массива DI_plusBuffer значениями из индикаторного буфера под индексом 2
if (CopyBuffer (ind_handle,2,0,amount, DIminus_values) <0)
{
// – - если копирование не удалось, сообщим код ошибки
PrintFormat («Не удалось скопировать данные из индикатора iADX, код ошибки %d», GetLastError ());
// – - завершим с нулевым результатом – это означает, что индикатор будет считаться нерассчитанным
return (false);
}
Здесь ind_handle – это хэндл индикатора ADX, второй параметр – индекс буфера используемого индикатора, из которого производится копирование, третий параметр – стартовая позиция, откуда начинается копирование. Здесь мы помним, что копирование идет от конца к началу, и поэтому нулевая стартовая позиция – это самые свежие данные. Четвертый параметр – это наш размер данных, которые необходимо рассчитать в вызове функции OnCalculate (), и последний параметр – это обычно динамический массив, привязанный к буферу индикатора, куда производится копирование.
Тут есть вопрос, как связать второй параметр функции CopyBuffer с индексом буфера используемого индикатора.
Это определяется вызовом функции SetIndexBuffer в используемом индикаторе. Например, для индикатора ADX:
SetIndexBuffer (0,ExtADXBuffer);
SetIndexBuffer (1,ExtPDIBuffer);
SetIndexBuffer (2,ExtNDIBuffer);
Отсюда нулевой индекс связан с буфером самого индикатора ADX, 1 индекс связан с буфером индикатора направленности +DI, 2 индекс связан с буфером индикатора направленности —DI.