Как подгрузить историю по указанному символу в MT4?

 

Есть индикатор, который проверяет сделки на истории. Истории может быть несколько лет.

При вызове int MinBar = iBarShift(MySymbol,PERIOD_CURRENT,TimeOpen); индикатор возвращает только то количество баров, которое сейчас доступно, либо -1 если установить exact=true. Этого недостаточно.

В MQL5 есть возможность подгрузки через SeriesInfoInteger(symbolNames,PERIOD_CURRENT,SERIES_SYNCHRONIZED);

Тут я пробовал через определенное время вызывать

datetime time_array[];
ArrayResize(time_array,need_bars);
res=CopyTime(_symbol,PERIOD_CURRENT,0,need_bars,time_array);
и
MqlRates rates[];
ArrayResize(rates,need_bars);
res=CopyRates(_symbol,PERIOD_CURRENT,0,need_bars,rates);

Все равно количество баров не увеличивается. Если со временем на старших ТФ они как то сами обновляются, то на М30 и ниже индикатор просто не может работать из-за отсутствия котировок.

Знаю, что есть вариант пролистывать через dll, но его нельзя использовать в продуктах на Маркете.

Есть ли какая то хитрость или аналог SERIES_SYNCHRONIZED на МТ4? 

 

Без ручной подгрузки Мт4 даст столько истории, сколько есть у брокера. В большинстве случаев это довольно-таки малая величина. Например, на М1 - это пара-тройка месяцев. На М30 может быть и до года, но не намного больше. На старших ТФ, конечно же, история будет достаточно глубокая, т. к. там малым количеством баров охватывается большая глубина.

Поэтому вообще никак.

Если же речь идет только о том, чтобы получить от брокера всю доступную историю по символы и ТФ, то это делается эмуляцией нажатия клавиши Home. Но, опять же, только через WinAPI.

Хотя еще попробуйте дергать нужный символ и ТФ до тех пор, пока не вернет состояние "нет ошибки". Но это не очень надежный способ:

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   ResetLastError();
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}
 
Не надо подгружать. Уведомить пользователя, что первая сделка не входит в график, пусть сам подгружает.
Причина обращения: