Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий - страница 13

 
Aleksey Vyazmikin:

Я понимаю, что "Пачками", почему нельзя обеспечить обратную связь и перераспределять эти пачки? Или вот если генетика пришла к запрещенным настройкам советника очень быстро, то может можно продлить оптимизацию на число таких деинициализаций?

Потому что откат решения о выделении пачки заданий дорог и может приводить к дублям расчетов и повышенной оплате, когда вдруг мастер терминал отбирает  задачи, переданные в клауд.
 
Renat Fatkhullin:

Но вы всегда можете получить время последнего апдейта стакана через MqlTick::time_mcs

Вот тут объясните подробнее, пожалуйста. Это важно и этого нет в документации!

Та информация, на которую Вы указываете (MqlTick::time_mcs) - это время прихода тика. Получается, что если запрашивать тики с флагом COPY_TICKS_INFO - время этих тиков будет соответствовать времени обновления стакана?

Однако, если в функции OnBookEvent() вызывать функцию SymbolInfoTick() - мы в таком случае НЕ ВСЕГДА БУДЕМ получать время прихода текущего снапшота стакана. Соответственно и синхронизацию с тиками провести не сможем. 

Поясните пожалуйста, почему нельзя вставить время, на которое Вы ссылаетесь (MqlTick::time_mcs) непосредственно в аргумент функции OnBookEvent(), чтобы она выглядела таким образом:

void OnBookEvent (const stringsymbol, const long& time_msc);

Потому, что просто знать время последнего обновления стакана - не особо важно, нужно также знать текущие значения полей стакана!!! Т.е. нужно знать время снапшота, который мы обрабатываем в текущий момент, на текущем вызове OnBookEvent().

 
Alexey Kozitsyn:

Вот тут объясните подробнее, пожалуйста. Это важно и этого нет в документации!

В любом тике этой структуры есть время. Взяв последний тик символа, вы узнаете время последнего обновления стакана.


void OnBookEvent (const stringsymbol, const long& time_msc);

Потому, что просто знать время последнего обновления стакана - не особо важно, нужно также знать текущие значения полей стакана!!! Т.е. нужно знать время снапшота, который мы обрабатываем в текущий момент, на текущем вызове OnBookEvent().

Потому что нельзя просто так брать и менять прототипы системных функций.

 
Renat Fatkhullin:
Потому что откат решения о выделении пачки заданий дорог и может приводить к дублям расчетов и повышенной оплате, когда вдруг мастер терминал отбирает  задачи, переданные в клауд.

С клаудом платным - пусть останется как есть, но вот с локальными агентами... У меня один проход занимает 2,5 минуты, и когда одно ядро выполняет 40 проходов, а остальные, в том числе в своей сети, его ждут я вижу нерациональность. Можно же выяснить, сколько занимает один проход и если он там больше 5 секунд, то делать перераспределение.

 
Renat Fatkhullin:

В любом тике этой структуры есть время. Взяв последний тик символа, вы узнаете время последнего обновления стакана.


Потому что нельзя просто так брать и менять прототипы системных функций.

Хорошо, последний вопрос. Т.е. сейчас нет возможности точно узнать время снапшота, который передан на обработку функции OnBookEvent()?

 
Renat Fatkhullin:

Потому что нельзя просто так брать и менять прототипы системных функций.

А если добавить другой? Т.е. пусть будет старый вызов, и пусть будет новый, по аналогии с OnCalculate()...

 
Aleksey Vyazmikin:

С клаудом платным - пусть останется как есть, но вот с локальными агентами... У меня один проход занимает 2,5 минуты, и когда одно ядро выполняет 40 проходов, а остальные, в том числе в своей сети, его ждут я вижу нерациональность. Можно же выяснить, сколько занимает один проход и если он там больше 5 секунд, то делать перераспределение.

А зачем вы во во время генетических тестов добавляете агентов?

Стартуйте сразу с нормальным набором агентов.

 
Alexey Kozitsyn:

А если добавить другой? Т.е. пусть будет старый вызов, и пусть будет новый, по аналогии с OnCalculate()...

Вам же показали простой метод получения необходимой вам информации.

 
Renat Fatkhullin:

А зачем вы во во время генетических тестов добавляете агентов?

Стартуйте сразу с нормальным набором агентов.

Выше я написал, что добавил так-как появились свободные ресурсы, значит до этого они были заняты другими задачами.

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

if(BarsZZ_Start_Now_Max<=BarsZZ_Start_Now_Min){Print("BarsZZ_Start_Now_Min - INIT_PARAMETERS_INCORRECT");return(INIT_PARAMETERS_INCORRECT);}
if(BarsZZ_Stop_Now_Max<=BarsZZ_Stop_Now_Min){Print("BarsZZ_Stop_Now_Min - INIT_PARAMETERS_INCORRECT");return(INIT_PARAMETERS_INCORRECT);}
 
Renat Fatkhullin:

Вам же показали простой метод получения необходимой вам информации.

Вы меня, вероятно, не поняли. Мне нужно время с привязкой к ДАННЫМ стакана. Вот я вызываю функцию OnBookEvent() и хочу знать, в какое время были сформированы данные, которые я сейчас получу из этой функции. Не просто когда последний раз обновился стакан (мне это не важно), а когда получен снапшот, с которым я работаю! И как раз этого я сейчас узнать не могу!

Или же Вы утверждаете, что если я вызову функцию SymbolInfoTick() из функции OnBookEvent() - то я 100% получу время снапшота, который сейчас будет обрабатываться в данном вызове этой OnBookEvent()?

Я правда хочу разобраться в этом вопросе! Лучше Вас это никто не объяснит.