Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 71

 
Renat Fatkhullin:

Разница в холодном подъеме в том, что МТ5 проводит полную проверку истории и гарантированно сверяется с торговым сервером, чтобы докачать недостающие или отсутствующие данные.

Причем проверяются исходные M1 данные, из которых потом строятся другие периоды. Это гарантирует, что в МТ5 максимально точные данные. В МТ4 проверки самые минимальные и данные берутся прямо из файла.

В горячем режиме синхронизированных данных у МТ4 данные выдаются быстрее на 6 мс в запросе 45 чартов(одна итерация из 5 симвлов на 9 периодов), так как у него очень простая система хранения чартов, не приспособленная для работы с большими объемами. В МТ5 мы серьезно изменили механизмы хранения и доступа к данным, что приносит дополнительные расходы.

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

Может есть смысл добавить что то типа 

  • Синхронизация в процессе
  • Символ синхронизирован
  • История не доступна у брокера
  • История повреждена

Посмотрите как отработал Ваш скрипт, у меня история вся закачана, так как я сейчас пишу программу работающую с историей. Сервер MetaQuotes Demo

2018.12.10 09:34:49.851 CopyRatesTest   Invalid: FEES, M1: 500, M5: 500, M15: 500, M30: 500, H1: 500, H4: 500, D1: 500, W1: 206, MN1: 50
2018.12.10 09:34:50.259 CopyRatesTest   Invalid: FESH, M1: 500, M5: 500, M15: 500, M30: 500, H1: 500, H4: 500, D1: 388, W1: 82, MN1: 20
2018.12.10 09:37:17.885 CopyRatesTest   Invalid: FORTP, M1: -1, M5: -1, M15: -1, M30: -1, H1: -1, H4: -1, D1: -1, W1: -1, MN1: -1             // 
2018.12.10 09:37:18.187 CopyRatesTest   Invalid: GAZA, M1: 500, M5: 500, M15: 500, M30: 500, H1: 500, H4: 500, D1: 350, W1: 82, MN1: 20
2018.12.10 09:37:18.439 CopyRatesTest   Invalid: GAZAP, M1: 500, M5: 500, M15: 500, M30: 500, H1: 500, H4: 387, D1: 215, W1: 76, MN1: 20
2018.12.10 09:37:18.526 CopyRatesTest   Invalid: GAZC, M1: 1, M5: 1, M15: 1, M30: 1, H1: 1, H4: 1, D1: 1, W1: 1, MN1: 1
2018.12.10 09:37:20.098 CopyRatesTest   Invalid: GAZP, M1: 500, M5: 500, M15: 500, M30: 500, H1: 500, H4: 500, D1: 500, W1: 309, MN1: 72
2018.12.10 09:37:20.312 CopyRatesTest   Invalid: GAZS, M1: 1, M5: 1, M15: 1, M30: 1, H1: 1, H4: 1, D1: 1, W1: 1, MN1: 1



 
Alain Verleyen:
Build 1959. Подпапки расположены в обратном алфавитном порядке. Пожалуйста, проверьте.


Подтверждаю

 
Renat Fatkhullin:

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


Сегодня выпустили бету 1959, доступна по Help -> Check updates

@Renat Fatkhullin

О применении шаблонов в тестере с визуализацией:

В стратегии используются два индикатора MovingAverages с разными параметрами. Для удобства был написан пользовательский индикатор с типом DRAW_FILLING по значениям этих iMA, но в советнике этот индикатор не используется. Советник использует два индикатора iMA. Затем был создан шаблон Debug.tpl с графика на котором установлен этот пользовательский индикатор. В момент запуска отладки на исторических данных этот шаблон игнорируется.

Затем был создан шаблон с именем Tester.tpl и вновь запущена отладка на исторических данных. Шаблон Tester.tpl был удачно применён, НО... поверх этого шаблона были подключены два индикатора iMA используемые в советнике.

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

Но всё-же основной посыл этого сообщения в том, что при запуске отладки на исторических данных применяется шаблон не Debug.tpl, а Tester.tpl.

 
Когда профилирование на истории почините?
 
Renat Fatkhullin:
В новой версии в связи с добавлением SocketXXX функций мы вообще игнорируем имя протокола. http и https становятся незначащими.

Билд 1940 возвращает ошибку 1001 на WebRequest. Как искать ошибку и как с ней бороться?

 

Работая над проектом, связанным с большим количеством объектов графиков, я заметил эту проблему: при удалении большого количества объектов вручную MT5 зависает.

Я использовал Ctrl + A, чтобы выбрать все, затем нажмите кнопку Удалить. Наконец, понадобилось 3 минуты, чтобы удалить все объекты .

По коду проблем нет:

         int objects= ObjectsDeleteAll ( 0 ,CHART_OBJ_PATTERN);
         printf ( "DEBUG: %s %i objects deleted with pattern %s" , __FUNCTION__ ,objects,CHART_OBJ_PATTERN);

2018.12.10 11:02: 49.212 XYZ DEBUG: индикатор удален с графика.
2018.12.10 11:02: 49.941 Отладка по XYZ: объекты OnDeinit 402902 удалены с шаблоном TS_131726726208823083

Заняло всего 0,7 секунды.

 
Renat Fatkhullin :

Постараемся.

Это искуственное ограничение по всей видимости.

Хорошо работает в Build 1959.


Спасибо

 
Renat Fatkhullin:

У вас несколько погрешностей:

  1. Нельзя тестировать CopyXXX функции из индикаторов, так как в индикаторах отдается только то, что есть без контроля полноты данных
  2. Не проверяются результаты операций
  3. Месячные данные на многих инструментах в МТ4 в урезанном виде, так что не всегда можно получить запрошенные 500 MN баров

Я переписал пример в виде скрипта, уменьшил MN до 250 баров, добавил проверки и вывод информации об окружении.

Вот результаты на последних бетах MT4 1150 (доступно на MetaQuotes-Demo) и MT5 1959: данные в микросекундах


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

 MT4
MT5
Холодный запуск
5 symbols, 100000 max bars:
    EURUSD
    USDCHF
    USDCAD
    GBPUSD
    USDJPY
Iteration 1: took 36085 msc for 5 symbols
Iteration 2: took 155 msc for 5 symbols
...
Iteration 100: took 138 msc for 5 symbols
Total: 51442 msc

5 symbols, 100000 max bars:
    EURUSD
    USDCHF
    USDCAD
    GBPUSD
    USDJPY
Iteration 1: took 552687 msc for 5 symbols
Iteration 2: took 307995 msc for 5 symbols
...
Iteration 100: took 125 msc for 5 symbols
Total: 874137 msc  (было 1434053 msc)

Горячий запуск
Iteration 1: took 235 msc for 5 symbols
Iteration 2: took 138 msc for 5 symbols
...
Iteration 100: took 136 msc for 5 symbols
Total: 15524 msc

Iteration 1: took 273 msc for 5 symbols
Iteration 2: took 128 msc for 5 symbols
...
Iteration 100: took 123 msc for 5 symbols
Total: 13772 msc (было 21456 msc)

По горячему в CopyRates MT5 обогнал MT4 на 2 мс. оптимизация удалась.

Я забыл сразу объяснить важную особенность хранения данных баров в МТ5. В МТ5 бары хранятся в виде отдельных массивов Open, High, Low, Close, Volume. Это означает, что для создания MqlRates бара в функции CopyRates нам нужно собирать структуру ценового бара из множества массивов.

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


Почему у нас разделены массивы данных в МТ5? Потому что так эффективнее работать и особенно для отдельных функций CopyClose, CopyHigh, High[], Low[] и тд. Очень много мест, где используются конкретные показатели без необходимости обращений ко всему бару.

Давайте сравним скорость доступа CopyHigh в обоих системах. Сразу будем проверять горячие кеши:

 МТ4
МТ5
Горячий запуск CopyHigh
10 230 msc
2 862 msc

Вот тут явно видно преимущество Метатрейдер 5: в 3.5 раза быстрее выдает данные отдельных таймсерий.

Совет: не копируйте бары в пятерке, если нужно иметь только один показатель. Не переводите один в один код из четверки.

Файлы:
 
Renat Fatkhullin :
...
Действительно мило
 

Небольшая ошибка в цветах индикатора. Об этом сообщается на английском форуме. Я подтверждаю это, проверено в Build 1959, цвета теряются при смене аккаунта. Этого не происходит в Build 1940.

Форум по торговле, автоматизированным торговым системам и тестированию торговых стратегий

поддержка mt5, выпуски новостей об ошибках mt5 (1940+)

Земо , 2018.12.10 19:22

ошибка цвета все еще существует ...

mt5 Протестированная сборка 1959

- открыть новый пустой график

примечание: я использовал BB из "примеров", потому что я могу изменить цвета верхних / нижних / средних полос

Ошибка с использованием "примеров \ BB"
1) в индикаторах перейдите в «примеры» и добавьте «BB» на график
2) теперь меняем цвета "ББ" на разные цвета
3) Если я снова подключусь к своей учетной записи, «BB» перейдет к цветам по умолчанию ...


Ошибка с использованием "examples \ Custom Moving Average"
1) в индикаторах перейдите в «примеры» и добавьте «пользовательскую скользящую среднюю» на график
2) Теперь измените цвета «Пользовательского скользящего среднего» на разные цвета.
3) Если я повторно подключусь к своей учетной записи, «Пользовательское скользящее среднее» перейдет в ЦВЕТА ПО УМОЛЧАНИЮ ...