Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Либо что-то не так делаю, либо это не работает:
Если флаг FirstRUN нужен только для проверки подкачки истории, то его можно убрать вовсе. Проверять график на предмет подкачки стоит на каждом тике. Вдруг был дисконнект?
Если флаг FirstRUN нужен только для проверки подкачки истории, то его можно убрать вовсе. Проверять график на предмет подкачки стоит на каждом тике. Вдруг был дисконнект?
FirstRUN можно убрать, но для отладки пока оставил.
Проблема осталась. Как проверяю:
В окне терминала стоит индикатор. Из окна с парами просто кидаю пару на график, соответственно индикатор перегружается. Так вот в ряде случаев получаю следующее:
2019.03.21 13:02:45.930 ptr_Area EURJPY.I,H1: Initialization is complete. Time index bar (10038) = 2017.01.23 09:00 / 2018.09.04 10:00
2019.03.21 13:02:45.930 ptr_Area EURJPY.I,H1: History initialization...
2019.03.21 13:02:45.930 ptr_Area EURJPY.I,H1: initialized
т.к. ошибки нет, а история не подгружена до конца. Индикатор отрабатывает неверно.
bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
bool res = false;
ResetLastError();
datetime dt1 = iTime(Symbol(), eTF, Bars-1);
datetime dt2 = iTime(Symbol(), eTF, 1);
if (GetLastError() == ERR_NO_ERROR)
{
Print("Initialization is complete. Time index bar (", Bars, ") = ", TimeToStr(dt1), " / ", TimeToStr(dt2));
res = true;
}
else
Print("Initialization error: ", GetLastError()) ;
return(res);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
if (FirstRUN)
{
Print("History initialization...");
if (!IsTFDataReady(ENUM_TIMEFRAMES(Period())))
{
return(0);
}
}
FirstRUN = false;
}
FirstRUN можно убрать, но для отладки пока оставил.
Проблема осталась.
После этого используете значения prev_calculated и rates_total. Если их разность более, чем 1, значит, произошла подгрузка данных. В этом случае полностью перерисовываете индикатор.
получается IsTFDataReady не помогает избавиться от проблемы, может быть в прежних билдах она могла генерировала исключительную ситуацию, сейчас нет. Вот набросал тестовый вариант
на минутке удалось сгенерировать ошибку 4051. Но проблема в том что, сравнение rates_total и prev_calculated - не дает признака окончания загрузки истории:
ВРЕМЯ: 2019.03.21 15:48:20.389
Но проблема в том что, сравнение rates_total и prev_calculated - не дает признака окончания загрузки истории:
Они дают признак подкачки истории. Это главное. Как только история докачалась, нужно заново пересчитать показатели индикатора.
Они дают признак подкачки истории. Это главное. Как только история докачалась, нужно заново пересчитать показатели индикатора.
да так и буду делать. спасибо
Обращение к таймсерии приводит к запросу истории с сервера, если последний запрос был "давно" (что подразумевается под давно точно сказать не могу). При этом генерируется ошибка 4066. Следующие обращения к таймсерии будут генерировать уже другие ошибки (не помню уже, какие) до тех пор, пока вся доступная история не будет закачана. Как только загрузка окончена, обращение к таймсерии не будет вызывать ошибку, обращения к серверу прекратятся.
Возможно я что-то не так делаю, но у меня только первое обращение к таймсерии дает 4066, а все последующие начиная со второго дают 0.
Поэтому для окончания загрузки просто жду несколько секунд.
Возможно я что-то не так делаю, но у меня только первое обращение к таймсерии дает 4066, а все последующие начиная со второго дают 0.
Поэтому для окончания загрузки просто жду несколько секунд.
Тот метод ожидания, который я привел, больше подходит для обновления ТФ, отличных от текущего. На текущем ТФ обновление данных происходит под контролем терминала.
После этого используете значения prev_calculated и rates_total. Если их разность более, чем 1, значит, произошла подгрузка данных. В этом случае полностью перерисовываете индикатор.
произошла подгрузка данных это prev_calculated = 0.
prev_calculated - rates_total = 1, появился новый бар.
prev_calculated - rates_total > 1 , после последнего расчета индикатора имеется такое количество не посчитанных (новых)баров. Такая ситуация возникает в тестере на максимальной скорости при ценах открытия и контрольных точках. Наверно возможно и в реале.