Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

MT4Orders QuickReport - библиотека для MetaTrader 5

Просмотров:
1159
Рейтинг:
(6)
Опубликован:
2024.01.05 10:07
Обновлен:
2025.01.20 15:27
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Быстрая JavaScript версия библиотеки Report для торговых команд в стиле MT4 реализованных через MT4Orders или Virtual.

Работает до 10 раз быстрее чем Report, размер НТМL файлов меньше, может выгрузить и отобразить до 5.4 млн. строк отчета (скриншот ниже).

Функционал: (совпадает с Report)

  • Показывает сделки совершенные MT4, MT5, их тестерами или виртуальным тестером Virtual
  • Показывает графики
  • Сразу после формирования откроет HTML файл с отчетом в броузере (требуется разрешение на использование DLL и команда #define REPORT_BROWSER.)

Отличия от Report:

  • В коде на стороне MT5 все данные для отчета сразу выводятся в файл в виде массива, без сборки строк с HTML кодом. За счет этого большой прирост скорости и уменьшение размеров файла.

  • Расчет статистики, и построение графиков и генерация HTML кода со строками сделок делается на стороне броузера в JavaScript коде. Сделан пагинатор, который показывает нужную страницу.

  • Графики отображают сделки во временном масштабе, а не в равномерном по номеру сделки. Так мы можем увидеть, что эксперт сделал 1000 сделок на 1-й неделе, а еще 52 недели бездействовал.
    Вот наглядный пример с 3386 сделками за 5 лет:
    Number_vs_Time
    На оба графика помещены одни и те же сделки.
    Верхний график построен с равномерном шагом между сделками (как сейчас показывает тестер MetaQuotes). И выглядит перспективно.
    Нижний график построен по временной шкале и показывает что эксперт торговал лишь несколько недель за 5 лет. 1 пиксель по горизонтали = 1 неделе.
    По нижнему графику сразу понятно, что будут 2 года бездействия вначале, потом эксперт несколько недель поторгует и снова 2,5 года бездействия. Такая торговля уже не так интересна, как создалось впечатление от первого графика.

  • График баланса с вариантами без проскальзываний, без комиссии, без комиссии и проскальзываний, заменен на график прибыли (P/L) с теми же вариантами (без балансовых операций)

  • Добавлен отдельный график баланса, который покажет и балансовые операции deposits/withdrawals. Так можно видеть отдельно работу торговых операций на графике P/L и их суммы с балансовыми операциями

  • Если кликнуть по любому графику, то откроется интерактивный график Google.charts. В нем можно увеличить масштаб и посмотреть сделки подробнее. 4 графика P/L со 100 000 сделками открываются ~10 секунд.

  • График TurnOver заменен на график с P/L для покупок, продаж и их суммы. Так можно понять бычья стратегия у вас получилась или медвежья. Возможно решите отключить одно из направлений торговли, если оно невыгодно.



  • Немного переставил столбцы отчета, но есть чекбокс, который переставит их как в Report-e. Если вам так привычнее.

  • При работе в Virtual можно сделать несколько вызовов QuickReport и сформировать отчеты для каждого виртуального (если их несколько) и/или реального тестера MT5

Примеры использования:

  • простой с MT4Orders
    #include <MT4Orders.mqh>
    #define REPORT_BROWSER            // Open report in browswer automatically. Require DLL.
    //#include <Report.mqh>
    #include <MT4Orders_QuickReport.mqh>//
    
    void OnInit(){}
    
    void OnTick(){ strategy (); }
    
    void OnDeinit(const int  reason ){
       QuickReport("report", true);
    }
    
    int TimeHour     ( datetime time ){return((int)((time / 3600) % 24));}//current hour in day. 3600 sec in hour
    
    void strategy (){
      string Symb = _Symbol;
      MqlTick Tick;
      if (SymbolInfoTick(Symb, Tick)){    
        if(TimeHour(TimeCurrent())<23 && TimeHour(TimeCurrent())>0 ){return;} 
        OrderSend(Symb, OP_BUY,  10, Tick.ask, 0, Tick.bid, Tick.bid,  NULL, 1000);
        OrderSend(Symb, OP_SELL, 10, Tick.bid, 0, Tick.ask, Tick.ask,  NULL, 1000);
       }
    }
    
  • большой тестовый код

  • простой с Virtual
    #include <MT4Orders.mqh>
    
    #include <fxsaber\Virtual\Virtual.mqh>
    #define REPORT_BROWSER            // Open report in browswer automatically. Require DLL.
    //#include <Report.mqh>
    #include <MT4Orders_QuickReport.mqh>
    
    double OnTester() { //or OnDeinit()
       for (int v = 0 ; v <= VIRTUAL::Total(); v++){if (VIRTUAL::SelectByIndex(v)){QuickReport("report_"+(string)v, true, v);}} //show report for each tester
       return(AccountInfoDouble(ACCOUNT_BALANCE)); 
    }
  • описание параметров вызова
    void QuickReport(string file_name, bool is_open_file_in_browser=true, int virtual_number=0, bool hide_account_and_name=false, bool common_path=false, bool fileANSI=true){...}
    file_name - имя файла для записи
    is_open_file_in_browser - автоматически открыть файл в броузере при завершении расчета (требуется разрешение DLL). Файлы не будут автоматичски открываться при оптимизации, так как их может быть несколько тысяч.
    virtual_number - (для работы с Virtual) номер виртуального тестера (-1 - будет определено автоматически, 0 - тестер MT5, >0 - виртуальные тестеры)
    hide_account_and_name - скрыть номер счета и имя
    common_path - сохранение в общую папку терминалов. Чтобы файлы не перезаписывались другим агентом при оптимизации, к именам файлов добавлен номер агента (3000, 3001,...). При сохранении в папке тестера (false), они сохраняются в папке агента проводившего расчеты.
    fileANSI - сохранение в ANSI кодировке или в UNICODE. Размер файлов UNICODE в 2 раза больше и они дольше обрабатываются, если вы выгружаете много данных, например 1 Гб, то экономнее использовать ANSI. UNICODE добавлен для совместимости с сторонними сервисами, если это вам нужно.


Пример отчета для 5.4 млн. сделок:

( Virtual  с отчетом больше 100 000 строк на моем компьютере съедает всю память и зависает, по этой причине и сделал JavaScript версию)

QuickReport Sample

Этот отчет показал Firefox. Chrome зависает, ему нужны файлы поменьше.

Больше 5.4 млн строк можно выгрузить в файл, но броузер Firefox больше уже не может обработать.

При загрузке этого отчета броузер задействовал около 6Гб памяти (обрабатывал около 1 минуты), потом освободил, после чего отчет отобразился на странице: (Report задействует 5-6 Гб от 80-100 тыс строк)

Memory usage


Детальный график с увеличением.

При клике по любому графику откроется интерактивный чарт с этим графиком, с возможностью увеличения для детального просмотра.
Есть 2 варианта:

  1. По умолчанию используется бесплатный Google.charts
  2. Можно подключить Highcharts, который как коммерческий продукт быстрее и удобнее, но он может использоваться бесплатно только программистами во время разработки; при выпуске проекта/продукта, должна быть приобретена лицензия и продлеваться ежегодно. Подробнее тут https://shop.highcharts.com/

Можно выбрать Logarithmic - логарифмический масштаб (может пригодиться, если у вас экспоненциальный рост баланса). Для  Highcharts можно выбрать дополнительно Ordinal - равномерный шаг (как в отчетах тестера MetaQuotes). После изменения этих пунктов, нужно снова кликнуть на нужный график для применения выбранной опции.

Пример с Google.chart : (изменение масштаба колесиком мыши)


Пример с Highcharts : (изменение масштаба выделением нужного участка мышью)


Исполнившиеся отложенные ордера МТ5

Для ордеров, которые появились в результате срабатывания отложенных ордеров темно-синим цветом в поле Type указан тип отложенного ордера (Buy limit, Sell limit, Buy stop или Sell stop), время от установки до срабатывания ордера в секундах и тип активизировавшегося ордера/позиции. Эта информация показывается только для MT5 терминала или тестера, виртуальные тестеры или MT4 не предоставляют эту информацию.



Графики прибыли и убытки по часам и дням недели.

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


Если кликнуть на любой из этих графиков, то откроются таблицы с точными суммами по часам и дням. Так же есть чекбоксы, которыми можно отключить часы и дни от входов - графики и таблицы будут перестроены и вы сможете оценить результат без проведения дополнительных тестов. Получился аналог BestInterval от Fxsaber, но более грубый (с шагом в 1 час) и без автоматизации. Для уменьшения шага добавлен интервал M10.

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

Так что основой вашей стратегии это вряд ли может стать.


Фильтрация ордеров.

Для отображения ордеров по разным параметрам добавлено множество фильтров.


Buy, Sell, Buy limit, Sell limit, Buy stop, Sell stop, Balance - можно убирать из отчета любой их типов ордеров.
Symbols - покажет весь список использованых инструментов, можно выбрать только нужные.
Magic - можно показать ордера только с указаным Magic
Min Lot, Max Lot - можно выбрать ордера с нужными лотами
Negative Slippage - можно показать ордера с отрицательным проскальзыванием по отдельности для открытия ордеров или для закрытия
Swap - покажет ордера со свопами > 0
Min LengthTime - ордера с длительностью более указанного времени (указывается по числу дней, часов, минут и секунд)
Max LengthTime - ордера с длительностью менее указанного времени
Open Time - время открытия ордера от и до указанных дат
Close Time - время закрытия ордера от и до указанных дат
TP, SL - ордера завершившиеся срабатыванием TP или SL
Profits, Losses - ордера в прибыли или убытке (комиссии и свопы не учтены, они могут сделать итоговую прибыль отрицательной)
Rejects - не исполненные ордеры

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


Дополнительные опции:



  1. Можно указать дату начала форвард теста, после ее применения будут рассчитаны статистики полного участка, участка до указанной даты (BackTest) и участка после нее (ForwardTest). На графиках будет показана вертикальная линия на этой дате.
  2. Old column order - порядок столбцов будет переставлен, как в библиотеке Report

П.С. Чем больше комментариев к сделкам, тем меньшее число строк может быть отображено. Отчет на 5,4 млн строк был без комментариев, кроме "end of test". Так что лучше их не ставить, если отчет будет больше 4 млн сделок.

П.П.С. Работает как в MT5, так и в MT4. Спасибо fxsaber за доработку для MT4.

Варианты улучшения:

  • Можно попробовать выгрузить отчет в бинарный файл и считывать его в броузере, возможно он сможет работать и с большим 5,4 млн числом строк. Но тогда придется вручную выбирать бинарный файл из за ограничений безопасности. Т.е. не сможем сразу после теста автоматически открыть отчет.

iMy iMy

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

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7 Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7

В заключительной седьмой части книги рассматриваются расширенные возможности MQL5 API, которые пригодятся при разработке программ для MetaTrader 5. Некоторые из них — пользовательские финансовые инструменты и встроенный экономический календарь, а другие — универсальные технологии, такие как сетевые функции, базы данных и криптография.

MA Price display MA Price display

Индикатор написан по просьбе по просьбе на форуме.

Input_Struct Input_Struct

Структура входных параметров