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

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

Просмотров:
1081
Рейтинг:
(6)
Опубликован:
2024.01.05 10:07
Обновлен:
2024.02.04 18:45
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 вынесен из скобок столбца Lots в отдельный столбец. Его наличие мешало быстрому восприятию размера лота, т.к. смещало значение лота на несколько символов.

  • Немного переставил столбцы отчета, но есть чекбокс, который переставит их как в 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){...}
    file_name - имя файла для записи
    is_open_file_in_browser - открыть файл в броузере
    virtual_number - (для работы с Virtual) номер виртуального тестера (0 - тестер MT5, >0 - виртуальные тестеры)
    hide_account_and_name - скрыть номер счета и имя


Пример отчета для 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 : (изменение масштаба выделением нужного участка мышью)


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



  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

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