Глюк в тестере! - страница 3

 
Игорь Евдокимов #:

Нашел. Глюк в тестере есть и устойчиво воспроизводится. Но не в параметрах custom символов, как ожидалось, а где-то в генераторе тиков.

Надеюсь, никто не будет оспаривать утверждение: "Ни при каких условиях тестер не должен искажать исходные котировки".


По факту имеем следующее: для каких-то произвольных свечей с tick_volume = 1 тестер генерит глючный тик, в котором open, high, low равны close.

Получается свеча, "схлопнутая" в ноль. Таких свечей немного, в тестах на разных символах выходило от 200 до 400 шт из ~3,9 млн, но они гробят на корню все результаты тестирования.

В котировках "родных" символов свечей с tick_volume = 1 тоже немало, например для EURUSD - 229 тыс. из 9,6 млн баров, но при этом тестер ведет себя правильно,

все свечи в тестовом эксперте совпадают с исходными.


Больше полугода уже этой ошибке. Описывалось здесь: https://www.mql5.com/ru/forum/474452/page23#comment_55270633

Разработчикам пофик.

Новая версия платформы MetaTrader 5 build 4620: исправления ошибок в MQL5 и новые методы OpenBLAS - Надеюсь, что это поправят в MQL5.
Новая версия платформы MetaTrader 5 build 4620: исправления ошибок в MQL5 и новые методы OpenBLAS - Надеюсь, что это поправят в MQL5.
  • 2024.11.29
  • Stanislav Korotky
  • www.mql5.com
Если предположить тривиальное решение получим новый баг - если в тексте есть нелатинские буквы. Окончательное решение с багами, которые я еще не нашел Спасибо за поднятый вопрос. Этот файл непереносим в общемировом масштабе - текст будет виден нормально только у тех
 
Игорь Евдокимов #:

Нашел. Глюк в тестере есть и устойчиво воспроизводится. Но не в параметрах custom символов, как ожидалось, а где-то в генераторе тиков.

Надеюсь, никто не будет оспаривать утверждение: "Ни при каких условиях тестер не должен искажать исходные котировки".

Генератор тиков работает с теми контейнерами, которые ему прислали. И ещё никто не жаловался, что данные какие-то не такие. Брокеры тоже не жаловались

Тестер не искажает исходные котировки.

По поводу tick_volume. Прочитайте статью Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5. Там про это явно написано:

Минутный бар тиковым объёмом 1 не подвергается никакой генерации - записывается тик со значением Close.

Бар с 2 тиками тоже не генерируется - сначала записывается его тик со значением Open, затем записывается тик со значением Close.

Бар с 3 тиками генерируется по схеме, для трёхтиковых баров существует всего 4 шаблона развития бара

Если у бара больше 3 тиков, то сначала генерируются опорные точки. Количество опорных точек не может быть больше тикового объёма. Цена открытия Open не входит в подсчет количества опорных точек, так как с нее начинается движение. Максимальное число опорных точек - 11.

Статья написана 15 лет назад и доступна для поиска

Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5
Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5
  • 2010.05.21
  • www.mql5.com
MetaTrader 5 позволяет во встроенном тестере стратегий моделировать автоматическую торговлю с помощью экспертов на языке MQL5. Такое моделирование называется тестированием экспертов, и может проводиться с использованием многопоточной оптимизации и одновременно по множеству инструментов. Для проведения тщательного тестирования требуется генерировать тики на основе имеющейся минутной истории. В статье дается подробное описание алгоритма, по которому генерируются тики для исторического тестирования в клиентском терминале MetaTrader 5.
 
Игорь Евдокимов #:

По факту имеем следующее: для каких-то произвольных свечей с tick_volume = 1 тестер генерит глючный тик, в котором open, high, low равны close.

Получается свеча, "схлопнутая" в ноль. Таких свечей немного, в тестах на разных символах выходило от 200 до 400 шт из ~3,9 млн, но они гробят на корню все результаты тестирования.

Что-то похожее было, если тиков < 4.
Кажется решилось тем, что в кастомный символ сначала сохраняю тики, а потом бары. Если наоборот, то там может встроенный баро-генератор переписать записанный бар. Если вы реальные тики не сохраняете, то это не то, что вам нужно.

Еще пробовал править число тиков на 4 если их <4.

Года 2 назад с этим занимался, деталей уже не помню. Попробуйте оба варианта, возможно поможет.

 
Slava #:

Тестер не искажает исходные котировки.

Ну зачем на черное говорить, что оно белое? Тестер котировки искажает. Эксперт получает не те свечи, которые были в исходных котировках.

Slava #:

Минутный бар тиковым объёмом 1 не подвергается никакой генерации - записывается тик со значением Close.

Вот это и есть глюк. Если установлен режим "Только цены открытия", то эксперт должен получать цены открытия, а не "тик со значением Close".

 
Игорь Евдокимов #:

Ну зачем на черное говорить, что оно белое? Тестер котировки искажает. Эксперт получает не те свечи, которые были в исходных котировках.

Вот это и есть глюк. Если установлен режим "Только цены открытия", то эксперт должен получать цены открытия, а не "тик со значением Close".

Если в минутной свече тиковый объём равен 1, значит, на этой свече был только один тик.

Самый первый тик такой свечи - цена открытия.

При этом какова должна быть цена закрытия? Правильно - та же, что и цена открытия (ведь тик-то всего один).

Вывод: на минутной свече тиковым объёмом, равным 1, цена Open равна цене Close.

Какая разница какую цену записать в бар?

 
Artyom Trishkin #:

Если в минутной свече тиковый объём равен 1, значит, на этой свече был только один тик.

Самый первый тик такой свечи - цена открытия.

При этом какова должна быть цена закрытия? Правильно - та же, что и цена открытия (ведь тик-то всего один).

Вывод: на минутной свече тиковым объёмом, равным 1, цена Open равна цене Close.

Какая разница какую цену записать в бар?

Я все это прекрасно понимаю. Разница в том, что Вы описываете, как должно быть, а я - как есть в реальной жизни. Попробуйте объяснить все это брокеру, который присылает котировки, в которых есть полноценные свечи с open, close, high и low, (и их значения не равны), а тиковый объем = 1. Брокеру пофиг, он не занимается тестированием. Он выдал котировки, а дальше делайте с ними, что хотите. Вопрос только в позиции MQ. Либо они борются с проявлениями реальной ситуации, что вполне возможно и не требует глобальных изменений в терминале, либо возлагают все это на пользователей.

 
Игорь Евдокимов #:
Но попробуй объяснить это брокеру, который присылает котировки

Брокеру или всё же форекс-дилеру?

Думаю, что MQ, как лицо выдавшее лицензию, должны вмешиваться в ситуацию, и давать такой организации рекомендации по устранению недостатков о которых Вы говорите.

 
Aleksey Vyazmikin #:

Брокеру или всё же форекс-дилеру?

Думаю, что MQ, как лицо выдавшее лицензию, должны вмешиваться в ситуацию, и давать такой организации рекомендации по устранению недостатков о которых Вы говорите.

Именно брокеру. МТ5 давно развивается, как открытая платформа, с неслабым функционалом создания custom символов от сторонних брокеров, которые к MQ никакого отношения не имеют. И если уж MQ взяли на себя такой функционал, то защититься от всяческих странностей и нелогичностей в поведении этих брокеров - должно быть в их же интересах.

 
Игорь Евдокимов #:

Именно брокеру. МТ5 давно развивается, как открытая платформа, с неслабым функционалом создания custom символов от сторонних брокеров, которые к MQ никакого отношения не имеют. И если уж MQ взяли на себя такой функционал, то защититься от всяческих странностей и нелогичностей в поведении этих брокеров - должно быть в их же интересах.

Если я правильно понял, то речь о том, что экспортируете котировки, которые получаете от брокера, и тестируйте кастомные символы с этими котировками.

Я только не пойму, если брокер предоставляет Вам сомнительные котировки, то почему MQ должна что-то исправлять? Логично же, что должна быть предварительная обработка данных на стороне пользователя, что бы данные отвечали требованиям MQ.

Если это брокер, то объём должен свидетельствовать о совершенной сделке, и если сделка одна, то я не понимаю, каким образом может рисоваться свеча с более чем одним значением.

 
Aleksey Vyazmikin #:

Если я правильно понял, то речь о том, что экспортируете котировки, которые получаете от брокера, и тестируйте кастомные символы с этими котировками.

Я только не пойму, если брокер предоставляет Вам сомнительные котировки, то почему MQ должна что-то исправлять? Логично же, что должна быть предварительная обработка данных на стороне пользователя, что бы данные отвечали требованиям MQ.

Если это брокер, то объём должен свидетельствовать о совершенной сделке, и если сделка одна, то я не понимаю, каким образом может рисоваться свеча с более чем одним значением.

Причины описанных несоответствий в котировках могут быть разные, их разбор - не цель этой темы. Для примера приведу одну: у криптовалютных брокеров tick_volume это decimal (>16 разрядов после запятой), у MQ - long (целочисленное). При приведении типов могут быть разные эффекты. Да и сама трактовка, что такое "тиковый объем" может отличаться. И это не говорит о "сомнительности" котировок. Факт в том, что тестер MT5 искажает исходные котировки, хотя может этого не делать, просто генерить тик с полной свечей, а не только close. Ну а в текущей ситуации - "спасение утопающих ...", так что да, приходится редактировать котировки самому.