Вы зачем животину мучаете? Зачем на каждом обращении в функцию GetExtremumZigZagBar создаёте ОДИН хендл индикатора?
Существует жесткое правило: хендл создаётся ОДИН раз в OnInit. И это ещё не всё, но для начала хотя бы это устраните.
А как быть в случае, если в процессе работы надо получать данные с разных таймфреймов. Получается, что в OnInit() надо создать хендл этого индикатора для всех возможных таймфреймов. И при необходимости использовать нужный хендл. Получается слишком громоздкий код.
А как быть в случае, если в процессе работы надо получать данные с разных таймфреймов. Получается, что в OnInit() надо создать хендл этого индикатора для всех возможных таймфреймов. И при необходимости использовать нужный хендл. Получается слишком громоздкий код.
Ничего громоздкого - на глобальном программном уровне объявляете массив (в нём будут хранится хендлы), а процесс создания хендлов делаете через функцию. В итоге в цикле проходите таймфреймы и поочерёдно создаёте все хендлы.
Пример из кода JS Signal Baes: массив нужных таймфреймов - array_timeframes, массив хендлов индикаторов Moving Average - handles_iMA_Fast, в OnInit вызывается функция создания хендлов - CreateHandlesMAs:
//---ENUM_TIMEFRAMES array_timeframes[6]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4};
***
int handles_iMA_Fast[]; // array for storing the handles of the iMA indicators
***
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
***
if(!CreateHandlesMAs(handles_iMA_Fast,Inp_MA_Fast_period,Inp_MA_ma_method))
return(INIT_FAILED);
***
//+------------------------------------------------------------------+//| Create Handles of iMA indicators |//+------------------------------------------------------------------+bool CreateHandlesMAs(int &array_handles[],constint ma_period,constENUM_MA_METHOD ma_method)
{
int size=ArraySize(array_timeframes);
ArrayFree(array_handles);
ArrayResize(array_handles,size);
for(int i=0;i<size;i++)
{
//--- create handle of the indicator iMAint handle_iMA=iMA(m_symbol.Name(),array_timeframes[i],ma_period,0,ma_method,PRICE_CLOSE);
//--- if the handle is not created if(handle_iMA==INVALID_HANDLE)
{
//--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
m_symbol.Name(),
EnumToString(array_timeframes[i]),
GetLastError());
//--- the indicator is stopped early return(false);
}
array_handles[i]=handle_iMA;
}
//---return(true);
}
Уважаемые трейдеры, представляю Вашему вниманию и делюсь - функция от И. Кима , переделанная мною с MQL4 для MQL5: Поиск экстремумов ZigZag.
Может кому-нибудь пригодиться. Сам долго искал для MQL5, но так и не нашел и решил сделать все сам. По крайней мере, аналогов в MQL5 еще не встречал. )
Вы зачем животину мучаете? Зачем на каждом обращении в функцию GetExtremumZigZagBar создаёте ОДИН хендл индикатора?
Существует жесткое правило: хендл создаётся ОДИН раз в OnInit. И это ещё не всё, но для начала хотя бы это устраните.
А как быть в случае, если в процессе работы надо получать данные с разных таймфреймов. Получается, что в OnInit() надо создать хендл этого индикатора для всех возможных таймфреймов. И при необходимости использовать нужный хендл. Получается слишком громоздкий код.
А как быть в случае, если в процессе работы надо получать данные с разных таймфреймов. Получается, что в OnInit() надо создать хендл этого индикатора для всех возможных таймфреймов. И при необходимости использовать нужный хендл. Получается слишком громоздкий код.
Ничего громоздкого - на глобальном программном уровне объявляете массив (в нём будут хранится хендлы), а процесс создания хендлов делаете через функцию. В итоге в цикле проходите таймфреймы и поочерёдно создаёте все хендлы.
Пример из кода JS Signal Baes: массив нужных таймфреймов - array_timeframes, массив хендлов индикаторов Moving Average - handles_iMA_Fast, в OnInit вызывается функция создания хендлов - CreateHandlesMAs:
А не проще индикаторы, не обязательно зигзаг, в класс обернуть.
Сейчас как раз в процессе создания.
Уважаемые трейдеры, представляю Вашему вниманию и делюсь - функция от И. Кима , переделанная мною с MQL4 для MQL5: Поиск экстремумов ZigZag.
Может кому-нибудь пригодиться. Сам долго искал для MQL5, но так и не нашел и решил сделать все сам. По крайней мере, аналогов в MQL5 еще не встречал. )
То, что я искал) Спасибо!