Новая версия платформы MetaTrader 5 build 5120: улучшения и исправления - страница 39

 

В последней версии МТ 5142 ( после обновления МТ )  не работает штатный советник...

Прошу в новой версии исправить этот глюк...

 
Aleksei Skrypnev #:

Прикольная ошибка.

Если в названии скомпилированного файла советника одно название то результат торговый один,

если название другое то и результат другой-второй

При этом косячит и показывает результат второй в тех случаях если в названии файла стоят знаки + - = _

Кто что об этом знает? Раньше таких косяков не было- поэтому я и пишу про результат один.


беру один советник ексешник меняю его название и в тестере выходят разные результаты. колв-о сделок одинаковое.

весь день -менял редакторы кодировки искходные коды  компы терминалы брокеров а вся фишка в названии файла

а может и от брокеров зависит у кого то есть у кого то нет. Раньше такого не было.

 
Vladislav Boyko #:

Это несерьезно. Почините сертификат, пожалуйста.

Сертификат в порядке, спасибо (как минимум, хром перестал ругаться)

 
Aleksei Skrypnev #:

а может и от брокеров зависит у кого то есть у кого то нет. Раньше такого не было.

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

 
Vladislav Boyko #:
я просто нашел закономерсность, что у "плохих" файлов обычно кодировка, отличная от UTF-8

Я придумал новый способ найти сломанные файлы (которые Git считает бинарными) - следующая команда выведет их список:

git ls-files --format='%(eolinfo:index) %(path)' | column -t | grep '\-text'

Но команда выше выполняет поиск только среди файлов, которые добавлены в index. А стейджить файлы в основной репозиторий чтобы поискать сломанные не сильно хочется. Первое, что приходит в голову - скопировать корень проекта, инициализировать новый git repo, добавить файлы в index и запустить ту команду. Но вручную это делать долго, поэтому я написал навайбкодил (прости, Господи) скрипт для этого:

https://forge.mql5.io/boyvlad/mql-check-binary-surprises

Как пользоваться:

  1. Скопировать папку с файлами проекта
  2. Удалить из скопированной папки git-репозиторий (скрытая папка .git)
  3. Закинуть туда файл "check-surprises.sh"
  4. Запустить файл "check-surprises.sh" введя следующую команду в git bash for windows:
    ./check-surprises.sh
mql-check-binary-surprises
mql-check-binary-surprises
  • boyvlad
  • forge.mql5.io
mql-check-binary-surprises
 
Vladislav Boyko #:

поэтому я написал навайбкодил (прости, Господи) скрипт для этого:

https://forge.mql5.io/boyvlad/mql-check-binary-surprises

Запустил на только что установленном MT5 (b5142) - 22 сломанных файла из коробки:

$ ./check-surprises.sh
Initialized empty Git repository in C:/Users/home_pc/AppData/Roaming/MetaQuotes/Terminal/D0E8209F77C8CF37AD8BF550E51FF075/MQL5/.git/
warning: in the working copy of 'Include/Math/Alglib/integration.mqh', LF will be replaced by CRLF the next time Git touches it
Number of files in the index: 396
Broken files:
-text  Experts/Examples/ChartInChart/ChartInChart.mq5
-text  Experts/Examples/Correlation                              Matrix                        3D/Correlation         Matrix     3D.mq5
-text  Experts/Examples/Math                                     3D                            Morpher/Math           3D         Morpher.mq5
-text  Experts/Examples/Math                                     3D/Functions.mqh
-text  Experts/Examples/Math                                     3D/Math                       3D.mq5
-text  Include/Canvas/Canvas3D.mqh
-text  Include/Canvas/DX/DXData.mqh
-text  Include/Canvas/DX/DXHandle.mqh
-text  Include/Canvas/DX/DXInput.mqh
-text  Include/Canvas/DX/DXObject.mqh
-text  Include/Canvas/DX/DXObjectBase.mqh
-text  Include/Canvas/DX/DXShader.mqh
-text  Include/Canvas/DX/DXTexture.mqh
-text  Include/Expert/Expert.mqh
-text  Include/Generic/ArrayList.mqh
-text  Include/Generic/Queue.mqh
-text  Include/Generic/RedBlackTree.mqh
-text  Include/Graphics/Graphic.mqh
-text  Include/Math/Stat/Math.mqh
-text  Indicators/Examples/WPR.mq5
-text  Indicators/Examples/ZigZag.mq5
-text  Scripts/Examples/ObjectSphere/SphereSample.mq5

Видеопруф:

 
Vladislav Boyko #:
22 сломанных файла из коробки:

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

Файл взят из моего основного терминала (b5144), ибо я уже снес ту виртуалку (новый терминал, на котором я получал список сломанных файлов в предыдущем посте).

 
Forester #:
Тоже сделал так. По EURUSD cумма Bid с 2015 по 2025 совпала у несжатых и у восстановленных из  float этим способом.

Сделал класс на основе RAM диска. С легким подключением к советникам 3-мя строками.
Вариант сжатия и Digits храню в файле. Думаю еще какие-то параметры инструмента надо будет добавить - определится по необходимости на практике.

Радует потребление памяти агентами: по 4Мб. Вместо 2-5 Гб или больше.
Надеюсь в MQL тестере тоже сделают использование 1-2 блоков памяти на всех агентов, а не по 1 на агент. Памяти станет всем хватать.

Оптимальное по скорости число файлов (блоков памяти): 2 (на сервере с 2 процами и на обычном рабочем ПК). Число тиков считываемых за 1 обращение к файлу взял 100 - так и для сжатых и не сжатых быстро будет.

На EURUSD с 2015 по 2025 размер несжатых файлов получился по 18Гб. Сжатые для Форекса - по 5,3Гб.

Заменил RAM диск на SSD.
RAM диск
2025.07.03 16:33:26.912    Message    Total time: 10186 мс
2025.07.03 16:33:40.264    Message    Total time: 10235
2025.07.03 16:37:29.287    Message    Total time: 10263
SSD диск
2025.07.03 16:38:51.408    Message    Total time: 8803
2025.07.03 16:39:04.956    Message    Total time: 8638
2025.07.03 16:39:20.112    Message    Total time: 9508
2025.07.03 16:39:57.983    Message    Total time: 9494

Неожиданно оказалось быстрее на 10%.
Считывал по 100 тиков из 2х файлов. Так что с RAM диском можно не париться.
Сейчас еще пооптимизирую на лучшее число файлов и число тиков.
 
Igor Zakharev #:

Бывают странные ситуации с хэндлами индикаторов. Не инициализируются именно по error 4802, как будто его нет в каталоге Indicators.

P. S. Индикатор клиентский, исходного кода не имею.

Пример на видео


Так если это триальный индикатор из маркета, то он и должен запускаться только в тестере, но не в онлайне.

 

Оптимизация на число файлов от 1 до 10: на сжатых тиках для Форекс

С 10 файлами среднее (на глаз) 790мс, при 1 файле около 830, т.е. на 5% в среднем быстрее. 2 файла около 810 - т.е. на 2% хуже 10. Себе оставлю 2.

Оптимизация на число тиков считываемых за 1 обращение к файлу


От 100 до 1000 примерно на 1 уровне.

Аналогичные картинки оптимизации для не сжатых тиков:

Число файлов - 4 кажется самым быстрым, хотя и 1 хорошо для экономии места на диске.

Оптимизация на число тиков считываемых за 1 обращение к файлу, при 4-х файлах:

От 50 до 30 примерно одинаково быстро, - можно по умолчанию поставить 100-300, из лучшего диапазона для сжатых и несжатых тиков.

То же самое при 1-м файле

Вначале теста время скачет, потом становится примерно одинаковым для всех 4х агентов - видимо SSD как то закешировал данные и начал их выдавать максимально быстро.
При этом общее время теста упало с 85 до 54 секунд.
Оставляю 1 файл как самый быстрый вариант.

Предложение для MQ.
Жаль что на картинках не показывает среднее значение для каждого параметра оптимизации. Можно например при наведении мышкой или где-то в логах вывести.