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

 
traveller00:

2. Добавить интервал по времени внутри дня. Я у себя использую, может кому пригодится. И мне не придётся каждый раз мержить свои изменения при обновлении.

В Вашем варианте идет только по цене открытия. Понятно, что это некое следствие BestInterval-подхода. Но в общем случае, наверное, не совсем правильно.

Хотя, с учетом того, что библиотекой пользуется 2.5 человека, доводить до "правильности" нет смысла. Внесу этот вид фильтра


Ну и когда на интервал приходится полночь, задавать EndInterval не очень удобно в таком виде.

 
fxsaber:

В Вашем варианте идет только по цене открытия. Понятно, что это некое следствие BestInterval-подхода. Но в общем случае, наверное, не совсем правильно.

Хотя, с учетом того, что библиотекой пользуется 2.5 человека, доводить до "правильности" нет смысла. Внесу этот вид фильтра

А на самом деле для BestInterval и использую. Т.е. не держу несколько virtual-сред: одна полноценная, а одна с интервалом. А держу одну и сразу фильтрую в выводе, для этого и нужно было.


Наверно, правильнее будет задавать вот так

OrderTimeOnly <= this.EndInterval

Полуночи там всё равно не бывает, 23.59.59 максимум.

 
traveller00:

А на самом деле для BestInterval и использую. Т.е. не держу несколько virtual-сред: одна полноценная, а одна с интервалом. А держу одну и сразу фильтрую в выводе, для этого и нужно было.

Отказался от такого варианта, т.к. синхронизатор получается тогда менее обобщенный.


Лучше всяких Report-фильтров - это создание своего Virtual с нужными сделками из общего окружения (Real/Virtual). А его уже скармливать в Report без каких-либо фильтров.

      const int HistoryTotal = OrdersHistoryTotal();
      
      for (int i = 0; i < HistoryTotal; i++)      
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && this.BestInterval.IsTime(OrderOpenTime()))
        {
          const ORDER_BASE Order = VIRTUAL::GetOrder();
          
          _V(Handle, VIRTUAL::AddOrder(Order));
        }


ЗЫ Торговую логику гоню только в одном круглосуточном окружении VirtualFull. VirtualBestInterval всегда является производным от VirtualFull, а не от торговой логики.

 

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

И суммарное скольжение в пипсах на каждую сторону - открытие и закрытие. Отсутствие паритета - повод задуматься.

 

Штатный HTML-отчет в MT5 генерирует 115 секунд и занимает 221 Мб.

Report HTML-отчет в MT5 генерируется 5 секунд и занимает 38 Мб.


Информационное наполнение отчетов еще сильнее отличается.

 

На базе этой и других ранее выложенных библиотек состряпал отчет Тестера для любых советников.

TesterReport - альтернативный отчет тестера стратегий Metatrader 5
TesterReport - альтернативный отчет тестера стратегий Metatrader 5
  • www.mql5.com
Торговые отчеты MetaTrader 5 довольно тяжелы для восприятия. По этой причине с определенного момента разработчики добавили в Терминал более понятный режим просмотра закрытых позиций. Однако, это не
 

I want to thank fxsaber for this and so many other useful contributions to the community!

I often use this library to generate custom reports for specific symbols and date ranges.

One thing I haven't been able to do is use the report filters with the ToChart() method. The filters work with the ToFile() function for generating HTML reports but not ToChart().

For example:

#include <MT4Orders.mqh>
#include <Report.mqh>

void OnStart()
{
   REPORT_FILTER Filter;
   Filter.StartTime = (TimeLocal()-2880);
   Filter.EndTime = TimeLocal();
   Filter.Magic = 0;
   REPORT::Calculate(Filter, true);   
   REPORT::ToChart(); //The equity chart is generated without filters
}

I tried to modify the ToChart() function to accept filters but it's beyond my coding skills I'm afraid!

I'd greatly appreciate the author's feedback or anyone else using this library, thanks.

 
mqtrader #:

The filters work with the ToFile() function for generating HTML reports but not ToChart().

REPORT::ToChart(REPORT_BALANCE, 0, 0, CURVE_NONE, NULL, false);
 

fxsaber #:

REPORT::ToChart(REPORT_BALANCE, 0, 0, CURVE_NONE, NULL, false);
This generates an empty balance chart for me. Perhaps I'm doing something wrong. I still can't get ToChart() to generate a chart with filters applied. Is there anything else which needs to be declared before calling ToChart() so that REPORT_FILTER is applied to the calculation?
 
mqtrader #:
This generates an empty balance chart for me. Perhaps I'm doing something wrong.
Print(Filter.ToString());
Причина обращения: