Библиотеки: Report - страница 12

 
leonerd #:

Скажите, пожалуйста, а отсутствующие значения в колонке Slippage означают нулевое проскальзывание (и для энтри, и для выхода)?

Для маркет-ордеров проскальзывание возможно определить только через анализ тиковой истории. Это пока не реализовано. Отложки и SL/TP дают сразу информацию о скольжении, маркет - нет.

 
fxsaber #:
Использую пока b4070.

Они пишут, что на 4075 надо обновиться. У меня 4076 и так же не компилируется. Ошибки вида "mismatched #ifdef/#endif pair"


 
leonerd #:

Они пишут, что на 4075 надо обновиться. У меня 4076 и так же не компилируется. Ошибки вида "mismatched #ifdef/#endif pair"

 
Пришлось делать тесты с большим числом сделок. Если их > 50,000 то сначала тестер потреблял гигабайты памяти, пока создавал файл отчета, а потом браузер тоже. И просматривать такой файл крайне сложно - постоянные перерисовки и зависания. И примерно с 80 тыс строк память кончалась совсем.
Чтобы избежать всего этого добавил такой код, который по умолчанию выводит в файл первые и последние 1000 строк. Обычно глазами построчно не было нужды проверять больше. Если очень надо, то можно поменять инпутом вывод на все строки.
enum showType {Show_1000_First_and_Last_Deals, Show_All_Deals };
sinput showType Report_Print_First_Last_1000 = 0; // Печать всех строк или частично, для скорости

....
// в цикле перебора строк поменял строку (~2130)
          StrSum += "<tr " + ((bool)(Count & 1) ? "" : "bgcolor=#E0E0E0 ") +
                 ((OrderType() >= OP_BALANCE) ? "style=\"color:blue\" ": "") + "align=right>" + REPORT::OrderToString(Count, Filter) + "</tr>\n";

//на строки

if( Report_Print_First_Last_1000 == Show_All_Deals) {
          StrSum += "<tr " + ((bool)(Count & 1) ? "" : "bgcolor=#E0E0E0 ") +
                 ((OrderType() >= OP_BALANCE) ? "style=\"color:blue\" ": "") + "align=right>" + REPORT::OrderToString(Count, Filter) + "</tr>\n";
}else{//Show_1000_First_and_Last_Deals
   if(i<1000 || i > Total-1001){
          StrSum += "<tr " + ((bool)(Count & 1) ? "" : "bgcolor=#E0E0E0 ") +
                 ((OrderType() >= OP_BALANCE) ? "style=\"color:blue\" ": "") + "align=right>" + REPORT::OrderToString(Count, Filter) + "</tr>\n";
   }else{REPORT::OrderToString(Count, Filter);}//без печати, для подсчета баланса
}
Возможно пригодится и другим пользователям.
 
Forester #:
Пришлось делать тесты с большим числом сделок. Если их > 50,000 то сначала тестер потреблял гигабайты памяти, пока создавал файл отчета, а потом браузер тоже. И просматривать такой файл крайне сложно - постоянные перерисовки и зависания. И примерно с 80 тыс строк память кончалась совсем.
Чтобы избежать всего этого добавил такой код, который по умолчанию выводит в файл первые и последние 1000 строк. Обычно глазами построчно не было нужды проверять больше. Если очень надо, то можно поменять инпутом вывод на все строки.
Возможно пригодится и другим пользователям.

Сделать бы спойлер для браузера. Для больших отчетов это помогает.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2023.10.18 15:00

Рейтинг самых быстрых браузеров при открытии больших html-таблиц - стейтментов. Сводный результат для таблицы на 35К строк.

Browser LengthTime (sec)
MyPal 24
Basilisk 35
PaleMoon 50
K-Meleon 52
Thorium 55

Мой однозначный выбор - MyPal.


 
Forester #:
Пришлось делать тесты с большим числом сделок. Если их > 50,000 то сначала тестер потреблял гигабайты памяти, пока создавал файл отчета, а потом браузер тоже. И просматривать такой файл крайне сложно - постоянные перерисовки и зависания. И примерно с 80 тыс строк память кончалась совсем.
Чтобы избежать всего этого добавил такой код, который по умолчанию выводит в файл первые и последние 1000 строк. Обычно глазами построчно не было нужды проверять больше. Если очень надо, то можно поменять инпутом вывод на все строки.
Возможно пригодится и другим пользователям.

Посмотреть бы на такой html-файл (с тормозами из-за 50000 записей) - наверняка можно оптимизировать.

Что касается тестера, тоже наверно можно mql5 попрофилировать и выяснить, нет ли "узких мест" по памяти.

 
Stanislav Korotky #:

Посмотреть бы на такой html-файл (с тормозами из-за 50000 записей) - наверняка можно оптимизировать.

Что касается тестера, тоже наверно можно mql5 попрофилировать и выяснить, нет ли "узких мест" по памяти.

https://www.mql5.com/ru/blogs/post/755500

OnTickMulti - с добавленными пересчетом прибыли в валюту депозита, свопами, комисссией в % за лот.
OnTickMulti - с добавленными пересчетом прибыли в валюту депозита, свопами, комисссией в % за лот.
  • 2023.12.25
  • www.mql5.com
Текущий вариант OnTickMulti https://www.mql5.com/ru/code/47647 считает прибыль в валюте каждого символа или можно получить в пипсах. Но на общий баланс они влияют в другой пропорции, согласно текущему
 
Решил немного оптимизировать себе код Report-a. Надеюсь тормозов станет меньше.

Основное:

Вместо того, чтобы каждой строке ставить  align=right и каждой второй bgcolor=#E0E0E0 сделал стиль, который это делает без каких либо атрибутов в HTML коде

.at {text-align:right;}
.at tr:nth-child(odd) {background: #e0e0e0 !important;}

Разделил таблицу на 3: вначале 2 строки с доп. информацией, основную таблицу со сделками, последнюю таблицу с статистикой теста. Если эти таблица вместе склеены, то там есть несколько объединений столбцов типа colspan=6, colspan=14 и т.п. Броузеру это тяжелее отрисовывать. Сделал 3 простые таблицы без объединений.

Дополнительное: (не должно сильно ускорить)
Иногда встречается подсветка цветом  style="color:#00A000", заменил на более короткие class="sl" - разницы нет, просто код итогового файла короче будет. СЛ/ТП выделение цветом сделал еще и жирными для заметности.

И добавил стили для 3-х первых и последних строк.

Еще в столбцах Summary и Average добавил пернос строки для значений в скобках. Они бывают иногда длинными. После этого таблица стала компактнее.

Таблице с сделками задал class="at". Полный CSS код для неё:

.at {border-spacing:1; border:0;text-align:right;}
.at tr:nth-child(odd) {background: #e0e0e0;}
.at td {padding: 2px;}
.at tr:nth-child(1), .at tr:nth-last-child(1) {color:magenta;background:#eee;}
.at tr:nth-child(2), .at tr:nth-last-child(2) {color:red;background:transparent;}
.at tr:nth-child(3) td, .at tr:nth-last-child(3) td {background:#c0c0c0;text-align:center;}

.at .sl {color:red;    font-weight:bold;}
.at .tp {color:#00A000;font-weight:bold;}
.at .r {color:red;}
.at .g {color:#00A000;}
.at .b {color:blue;}
.at .m {color:magenta;}


Было

Стало

 
Визуально расцветка не изменилась, но код стал короче и уменьшилась вероятность перерисовок для огромных отчетов с >50тыс сделок.
Сравнил файлы с 35 тыс сделок размер сократился на 6,5% (11,7 мб новый вариант, 12,5 мб старый вариант).

Ну главное не  размер, а скорость отрисовки, надеюсь она стала выше за счет использования стилей и таблиц без объединения ячеек.

Так же добавил предложенный выше выбор печати всех строк или первых и последних 1000 строк.

enum showType {Show_1000_First_and_Last_Deals, Show_All_Deals };
sinput showType Report_Print_First_Last_1000 = 0; // Печать всех строк или частично, для скорости

Итоговый файл приложил. Может и еще кому пригодится.

Файлы:
Report.mqh  293 kb
 
Forester #:
Решил немного оптимизировать себе код Report-a.

Я абсолютный ноль в HTML, поэтому рад любым предложениям по улучшению.

Конечно, некоторые визуальные решения являются вкусовыми. А вот по размеру и скорости рендера - объективные показатели.

 
fxsaber #:

Я абсолютный ноль в HTML, поэтому рад любым предложениям по улучшению.

Конечно, некоторые визуальные решения являются вкусовыми. А вот по размеру и скорости рендера - объективные показатели.

Pagination Table

https://codepen.io/yasser-mas/pen/pyWPJd

Причина обращения: