Вопрос к разработчикам. Буфер индикатора НЕ таймсерия.

 

ArrayIsSeries(buffer)==FALSE

Так и задумано ?.. или баг.

 
а где опрос производится?
 
start
 
JavaDev >>:
start

Истесьно не таймсерия вот к пиримеру клос будет тру :ArrayIsSeries(Сlose)==TRUE

 
Urain >>:

Истесьно не таймсерия вот к пиримеру клос будет тру :ArrayIsSeries(Сlose)==TRUE

Ну если для Вас "Истесьно" что c функциями iMAOnArray,iEnvelopesOnArray и т.д. приходится работать через ... т.к. на вход необходимы таймсерии.

 

А такой вариант не подходит через ArraySetAsSeries?

Пример:

double macd_buffer[300];
double signal_buffer[300];
int    i,limit=ArraySize(macd_buffer);
ArraySetAsSeries(macd_buffer,true);
 
for(i=0; i<limit; i++)
   macd_buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
   
for(i=0; i<limit; i++)
   signal_buffer[i]=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i);
 
Rosh >>:

А такой вариант не подходит через ArraySetAsSeries?

В Вашем примере на каждый бар пересчитывается весь массив на 1 значение , а есть необходимость пересчитывать например предыдущие 10 баров от текущего(i) положения.

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

Если сделать буфера таймсериями - проблема уйдёт.

 
Если вопрос стоит об экономичности расчетов (например, ускорение работы эксперта в тестере при оптимизации), то нужно писать собственную библиотеку функций. Как например в MQL5, описано в статье Как написать индикатор в MQL5
 
JavaDev писал(а) >>

Ну если для Вас "Истесьно" что c функциями iMAOnArray,iEnvelopesOnArray и т.д. приходится работать через ... т.к. на вход необходимы таймсерии.

функциям iMAOnArray, iEnvelopesOnArray и т.д. совершенно по барабану таймсерия на входе или нет. Так как эти функции проводят обсчёт слева-направо (от более старых данных к более новым). Признак серийности нужен только в MQL4-программах для правильной организации доступа к отдельному элементу массива по индексу.

А все данные в клиентском терминале хранятся единообразно - в начале области памяти старые данные, в конце области памяти новые данные.

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