Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
MT4Orders QuickReport - библиотека для MetaTrader 5
- Просмотров:
- 1081
- Рейтинг:
- Опубликован:
- 2024.01.05 10:07
- Обновлен:
- 2024.02.04 18:45
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Быстрая 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 лет:
На оба графика помещены одни и те же сделки.
Верхний график построен с равномерном шагом между сделками (как сейчас показывает тестер 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 версию)
Этот отчет показал Firefox. Chrome зависает, ему нужны файлы поменьше.
Больше 5.4 млн строк можно выгрузить в файл, но броузер Firefox больше уже не может обработать.
При загрузке этого отчета броузер задействовал около 6Гб памяти (обрабатывал около 1 минуты), потом освободил, после чего отчет отобразился на странице: (Report задействует 5-6 Гб от 80-100 тыс строк)
Детальный график с увеличением.
При клике по любому графику откроется интерактивный чарт с этим графиком, с возможностью увеличения для детального просмотра.
Есть 2 варианта:
- По умолчанию используется бесплатный Google.charts
- Можно подключить Highcharts, который как коммерческий продукт быстрее и удобнее, но он может использоваться бесплатно только программистами во время разработки; при выпуске проекта/продукта, должна быть приобретена лицензия и продлеваться ежегодно. Подробнее тут https://shop.highcharts.com/
Можно выбрать Logarithmic - логарифмический масштаб (может пригодиться, если у вас экспоненциальный рост баланса). Для Highcharts можно выбрать дополнительно Ordinal - равномерный шаг (как в отчетах тестера MetaQuotes). После изменения этих пунктов, нужно снова кликнуть на нужный график для применения выбранной опции.
Пример с Google.chart : (изменение масштаба колесиком мыши)
Пример с Highcharts : (изменение масштаба выделением нужного участка мышью)
Дополнительные опции:
- Можно указать дату начала форвард теста, после ее применения будут рассчитаны статистики полного участка, участка до указанной даты (BackTest) и участка после нее (ForwardTest). На графиках будет показана вертикальная линия на этой дате.
- Old column order - порядок столбцов будет переставлен, как в библиотеке Report
П.С. Чем больше комментариев к сделкам, тем меньшее число строк может быть отображено. Отчет на 5,4 млн строк был без комментариев, кроме "end of test". Так что лучше их не ставить, если отчет будет больше 4 млн сделок.
П.П.С. Работает как в MT5, так и в MT4. Спасибо fxsaber за доработку для MT4.
Варианты улучшения:
- Можно попробовать выгрузить отчет в бинарный файл и считывать его в броузере, возможно он сможет работать и с большим 5,4 млн числом строк. Но тогда придется вручную выбирать бинарный файл из за ограничений безопасности. Т.е. не сможем сразу после теста автоматически открыть отчет.
В графическом представлении теханализ представляет трендовую линию справа от свечей на пробой (зеленым). После пробоя предполагается движение по красной линии.
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7В заключительной седьмой части книги рассматриваются расширенные возможности MQL5 API, которые пригодятся при разработке программ для MetaTrader 5. Некоторые из них — пользовательские финансовые инструменты и встроенный экономический календарь, а другие — универсальные технологии, такие как сетевые функции, базы данных и криптография.
Индикатор написан по просьбе по просьбе на форуме.
Input_StructСтруктура входных параметров