Особенности языка mql5, тонкости и приёмы работы - страница 28

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Renat Fatkhullin, 2017.03.31 09:10

Используйте ArraySize для динамических объектов и применяйте sizeof только к статическим объектам. Sizeof считается на этапе компиляции и всегда является константой.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED)) и SymbolIsSynchronized(_Symbol)

Slawa, 2017.04.04 08:05

В экспертах и скриптах при вызове Copy-функций делается несколько попыток - проверяется первая дата на сервере, проверяется первая дата в клиентском терминале, сравнивается с запрошенной датой, проверяется синхронизированность символа, посылается запрос на докачку, небольшое ожидание и по кругу с проверки синхронизированности. Если символ так и не синхронизирован, то отдаётся то, что есть и удовлетворяет условиям запроса. При этом синхронизированность запрошенной таймсерии не проверяется, так как она достраивается на лету в процессе подкачки данных.

В индикаторах делается только один запрос - никакого цикла! Потом сразу же отдаётся всё, что сумели взять.

 

В MT5-тестере в режиме "реальные тики" основой истории являются не реальные тики, а M1-бары. Это значит, что если реальные тики не соответствуют барам, то они игнорятся, а вместо них идет генерация искусственных тиков, которые обязаны будут соответствовать барам.

При этом, если CopyTicks запросить более, чем на 128К крайних штук, то в тестере они возьмутся не из кэша (реальные тики + сгенерированные), а из базы - реальные. И получите несовпадение в тестере же истории тиков и того, что тестер наподставлял.

 
fxsaber:

В MT5-тестере в режиме "реальные тики" основой истории являются не реальные тики, а M1-бары. Это значит, что если реальные тики не соответствуют барам, то они игнорятся, а вместо них идет генерация искусственных тиков, которые обязаны будут соответствовать барам.

При этом, если CopyTicks запросить более, чем на 128К крайних штук, то в тестере они возьмутся не из кэша (реальные тики + сгенерированные), а из базы - реальные. И получите несовпадение в тестере же истории тиков и того, что тестер наподставлял.

Какой ужас! Это действительно так? - в СД писали?

Чему теперь вообще верить, как жить... (почти без грустной иронии)

 
Andrey Dik:

Какой ужас! Это действительно так? - в СД писали?

Таков сильно сокращенный пересказ ответов разработчиков не моей заявки в СД.
 
fxsaber:
 

При этом, если CopyTicks запросить более, чем на 128К крайних штук,

С какого края ? 128К последних, что ли ?

Или первых ?

 
George Merts:

С какого края ? 128К последних, что ли ?

Или первых ?


Наиболее свежих.
 
Andrey Dik:

Какой ужас! Это действительно так? - в СД писали?

Чему теперь вообще верить, как жить... (почти без грустной иронии)

https://www.mql5.com/ru/docs/runtime/testing#real_ticks
 

При тестировании минутные данные считаются более достоверными.

Минутные бары более достоверны? Разве не тиковые данные последняя инстанция? Зачем вообще нужны реальные тиковые данные, если они не берутся в расчет?

Я раньше по наивности делал так: тестировал на минутках, потом тестировал на тиках, потом на реальных тиках как окончательная прецизионная проверка. Теперь понимаю, что в третьей проверке нет смысла особого.

 
Andrey Dik:

При тестировании минутные данные считаются более достоверными.

Минутные бары более достоверны? Разве не тиковые данные последняя инстанция? Зачем вообще нужны реальные тиковые данные, если они не берутся в расчет?

Я раньше по наивности делал так: тестировал на минутках, потом тестировал на тиках, потом на реальных тиках как окончательная прецизионная проверка. Теперь понимаю, что в третьей проверке нет смысла особого.


Не нужно вырывать предложение из контекста. Фраза звучит так:

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

Тестер проверяет соответствие тиковых данных параметрам минутного бара: тик не должен выходить за пределы цен High/Low бара, открывающий и закрывающий минуту тик должен совпадать с ценами Open/Close бара. Также сравнивается объем. При выявлении несовпадения отбрасываются все тики, соответствующие этому минутному бару. Вместо них будут использованы сгенерированные тики (как в режиме "Все тики").

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

Если в истории символа нет минутного бара, но тиковые данные за эту минуту есть, они могут быть использованы в тестере. Например, бары биржевых символов формируются по ценам Last. Если с сервера приходят только тики с ценами Bid/Ask без цены Last, бар не будет сформирован. Тестер будет использовать эти тиковые данные, поскольку они не противоречат минутным.

Тиковые данные могут не совпадать с минутными барами по различным причинам. Например, из-за обрывов связи или иных сбоев при передаче данных от источника в клиентский терминал. При тестировании минутные данные считаются более достоверными.

Как видите, если не пытаться манипулировать, то окажется, что Вы неверно истолковали справку.
Причина обращения: