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

 

Двигаемся дальше.

Я вынес в отдельный скрипт кусок, который пишет свечи с графика в файл. В тест добавил конечный индекс сравниваемых массивов.

Запустил тест на EURUSD.

2025.07.02 12:14:19.336 Core 1 2025.06.30 23:59:59   Исходный файл: EURUSD_M1.mql, 9596442 cвеч

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Свеч на графике тестера 9594346

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Начальный индекс 0

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Конечный индекс 9594344

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Начало проверки 1971.01.04 00:00

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Конец проверки 2025.06.30 23:58

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Ошибок даты 0

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Ошибок open 0

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Ошибок close 0

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Ошибок high 0

2025.07.02 12:14:20.184 Core 1 2025.06.30 23:59:59   Ошибок low 0


На тестовом символе картина та же, что и раньше:

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Исходный файл: TEST_SYMB_M1.mql, 495410 cвеч

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Свеч на графике тестера 495410

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Начальный индекс 0

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Конечный индекс 495408

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Начало проверки 2018.02.09 10:00

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Конец проверки 2025.06.28 19:47

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Первая ошибка open 2020.03.12 10:47 проверено свечей 971

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Первая ошибка high 2020.03.12 10:47 проверено свечей 971

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Первая ошибка low 2020.03.12 10:49 проверено свечей 973

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Первая ошибка close 2024.01.01 00:06 проверено свечей 309411

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Ошибок даты 0

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Ошибок open 251745

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Ошибок close 181968

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Ошибок high 219337

2025.07.02 12:37:46.432 Core 1 2025.06.28 19:52:59   Ошибок low 217660


Таким образом подтверждается:

1. Slava, Ваше утверждение "На наших данных нет никаких ошибок"

2. Корректность работы самого теста.

3. То, что глюк в тестере есть, и проявляется он именно при работе с Custom символами.


Файлы:
Test_Rates.zip  6034 kb
 

Билд 5147. Глюк не исправлен.

Все это видно прямо в тестере:


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

На нижнем - из визуализатора тестера. Разница налицо.

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

Билд 5147. Глюк не исправлен.

Все это видно прямо в тестере:


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

На нижнем - из визуализатора тестера. Разница налицо.

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

Ищите ошибки у себя. Целая тема есть https://www.mql5.com/ru/forum/304554

Пользовательские символы. Ошибки, баги, вопросы, предложения. - Попробуйте удалить всю баровую и тиковую историю.
Пользовательские символы. Ошибки, баги, вопросы, предложения. - Попробуйте удалить всю баровую и тиковую историю.
  • 2019.02.23
  • Artyom Trishkin
  • www.mql5.com
Нужно удалить последнюю неделю котировок кастомного символа. Требуется удалить последние сутки истории кастомного символа и выставить в Обзор рынка последний тик после удаления. либо чтобы TicksDelete TicksReplace заменял тик в Обзоре рынка на последний в истории
 

И ещё.

Не надо вручную копировать файлы в каталог агента тестирования.

Для этого специально существует #property tester_file "<file_name>"

 
Slava #:

И ещё.

Не надо вручную копировать файлы в каталог агента тестирования.

Для этого специально существует #property tester_file "<file_name>"

Не пользовался раньше. Спасибо.

Правда с ходу не заработало.

В эксперте: 

#property tester_file "TEST_SYMB_M1.mql"                                             // Файл на момент компиляции существует и лежит в MQL5\Files

int handle = FileOpen("TEST_SYMB_M1.mql", FILE_BIN|FILE_READ);         //  Не находит файла. При ручном копировании все работает.

 
Slava #:

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

Ищите ошибки у себя. Целая тема есть https://www.mql5.com/ru/forum/304554

Может что-то у меня и неправильно, буду искать. Но что делать с тем фактом, что тестер не видит параметров, которые установлены правильно?

Это из окна "Символы":


А это тот же символ из тестера.


 
Slava #:

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

Slava, подскажите pls, какой еще параметр, кроме точности (_Digits) способен влиять на паковку/распаковку данных так, чтобы это приводило к их искажению?

Мне больше ничего в голову не приходит...

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


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

На нижнем - из визуализатора тестера. Разница налицо.

Slava #:

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

Это никак не объясняет того факта, что графики в тестере и визуализаторе разные. Если тестер получает данные, строит по ним график, формирует (из этих же данных) тики  и отправляет их эксперту, то данные получены правильные, поскольку график в тестере правильный. А глюк где-то при формировании тиков, и неверные данные получают эксперт и визуализатор. Если же тестер получает свои данные только для визуализатора, а график строит из данных исходного символа, то это вообще не имеет смысла.

Slava, внесите ясность, pls!

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

Это никак не объясняет того факта, что графики в тестере и визуализаторе разные. Если тестер получает данные, строит по ним график, формирует (из этих же данных) тики  и отправляет их эксперту, то данные получены правильные, поскольку график в тестере правильный. А глюк где-то при формировании тиков, и неверные данные получают эксперт и визуализатор. Если же тестер получает свои данные только для визуализатора, а график строит из данных исходного символа, то это вообще не имеет смысла.

Slava, внесите ясность, pls!

Я уже сказал, что при передаче на тестер исторические данные пакуются в соответствии с настройками символа.

Первый бар в контейнере пишется как есть. Остальные данные - это изменение состояния текщего бара в тиках. Здесь в полный рост вступает tick size. А ещё, что это за символ, forex, cfd, stocks что там ещё.

Я вам дал ссылку на обсуждение пользовательских символов - все ваши проблемы уже были обсуждены и решены. Ищите самостоятельно

 
Slava #:

Ищите самостоятельно

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

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


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

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

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

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


Для котировок стороннего брокера описанный глюк присутствует. Лечится редактированием минимального тикового объема. При tick_volume = 4 уже не проявляется.

Логически вроде понятно, 4 - это как раз OHLC тики. Но если тестеру не хватает объема, чтобы выдать все тики, он должен выдать всю свечу (а не ее часть) в одном тике или сколько там получилось сгенерить. И в режиме "Только цены открытия" я должен получать цены открытия, а не что-то другое. Да и редактировать объем в каждой свече в сторонних котировках - так себе идея.

Воспроизведение:

1. Распаковать архив в папку терминала

2. Открыть "Символы" -> Custom -> "Создать символ"

3. Ввести название, например EURUSD_1, внизу "Скопировать из" выбрать EURUSD -> "OK"

4. На любом открытом графике запустить скрипт "Copy_Rates". При настройках по-умолчанию он скопирует котировки из файла (котировки стороннего брокера) в EURUSD_1

   и сохранит их же в файл EURUSD_1_M1.mql.

5. Скопировать файл EURUSD_1_M1.mql в Files агента тестирования, запустить "Rates_Test"

6. Удалить базы тестера, повторить п. 4,5 с другими значениями "Минимальный объем"




Файлы:
Test_Rates.zip  7274 kb