Bibliotecas: Report - página 10

 
fxsaber:

Em sua variante, ele vai apenas para o preço de abertura. É claro que isso é uma consequência da abordagem BestInterval. Mas, no caso geral, isso provavelmente não está correto.

Porém, considerando que a biblioteca é usada por 2,5 pessoas, não faz sentido torná-la "correta". Vou apresentar esse tipo de filtro

Na verdade, eu o utilizo para o BestInterval. Ou seja, não mantenho várias mídias virtuais: uma completa e outra com um intervalo. Mantenho uma e a filtro na saída de uma só vez, é o que eu precisava fazer.


Provavelmente, seria mais correto defini-lo assim

OrderTimeOnly <= this.EndInterval

De qualquer forma, não há meia-noite lá, 23.59.59 no máximo.

 
traveller00:

Na verdade, eu o utilizo para o BestInterval. Ou seja, não mantenho vários meios virtuais: um completo e outro com um intervalo. Eu mantenho uma e a filtro na saída de uma só vez, é isso que eu precisava fazer.

Desisti dessa opção porque o sincronizador é menos generalizado.


Melhor do que qualquer filtro de relatório é criar seu próprio Virtual com as transações necessárias do ambiente geral (Real/Virtual). E ele pode ser alimentado no relatório sem nenhum filtro.

      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));
        }


ZЫ Executo a lógica de negociação somente em um ambiente VirtualFull que funciona 24 horas por dia. O VirtualBestInterval é sempre derivado do VirtualFull, não da lógica de negociação.

 

Tempo adicional gasto no fechamento de uma posição: duração desde o momento da ordem de fechamento até o fechamento propriamente dito. Em alguns casos, são informações muito necessárias.

E o deslizamento total em pips para cada lado - abertura e fechamento. A falta de paridade é um motivo para pensar sobre isso.

 

O relatório HTML do MT5 é gerado em 115 segundos e ocupa 221 MB.

O relatório HTML do MT5 leva 5 segundos para ser gerado e ocupa 38 MB.


O conteúdo das informações dos relatórios é ainda mais diferente.

 

Com base nessa e em outras bibliotecas postadas anteriormente, criei um relatório de teste para todos os Expert Advisors.

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

Quero agradecer ao fxsaber por essa e por tantas outras contribuições úteis para a comunidade!

Costumo usar essa biblioteca para gerar relatórios personalizados para símbolos e intervalos de datas específicos.

Uma coisa que não consegui fazer foi usar os filtros de relatório com o método ToChart(). Os filtros funcionam com a função ToFile() para gerar relatórios HTML, mas não com ToChart().

Por exemplo:

#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
}

Tentei modificar a função ToChart() para aceitar filtros, mas isso está além de minhas habilidades de codificação, infelizmente!

Gostaria muito de receber o feedback do autor ou de qualquer outra pessoa que esteja usando essa biblioteca, obrigado.

 
mqtrader #:

Os filtros funcionam com a função ToFile() para gerar relatórios HTML, mas não com ToChart().

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

fxsaber #:

REPORT::ToChart(REPORT_BALANCE, 0, 0, CURVE_NONE, NULL, false);
Isso gera um gráfico de equilíbrio vazio para mim. Talvez eu esteja fazendo algo errado. Ainda não consigo fazer com que ToChart() gere um gráfico com filtros aplicados. Há mais alguma coisa que precise ser declarada antes de chamar ToChart() para que REPORT_FILTER seja aplicado ao cálculo?
 
mqtrader #:
Isso gera um gráfico de equilíbrio vazio para mim. Talvez eu esteja fazendo algo errado.
Print(Filter.ToString());
 
fxsaber #:
Print(Filter.ToString());
Agora está funcionando, muito obrigado @fxsaber!