Discussão do artigo "Apresentação personalizada do histórico de negociação e criação de gráficos para relatórios" - página 5

 
É possível ler o histórico de testes do testador em meus arquivos? Não a partir do EA, mas adicionando um script?
 
ANG3110:
É possível ler o histórico de testes do testador em meus arquivos? Não a partir de um Consultor especialista, mas adicionando um script?

Sim, na verdade é um script que lê o histórico de todo o terminal sem dividi-lo em Expert Advisors. Na verdade, no artigo eu descrevi a classe que faz todo o trabalho, você pode usá-la e escrever seu próprio script.

 

Quero usar seu desenvolvimento para análise de histórico durante a otimização no momento da desinicialização.

Você poderia me dizer como fazer isso melhor para obter a alteração do saldo em uma matriz? O instrumento é negociado apenas no momento.

 
Aleksey Vyazmikin:

Quero usar seu desenvolvimento para análise de histórico durante a otimização no momento da desinicialização.

Você poderia me dizer como fazer isso melhor para obter a alteração do saldo em uma matriz? O instrumento é negociado apenas no momento.

Para isso, é melhor usar a classe finalizada do meu segundo artigo. Classe "ReportCreator"

Com essa classe, uso este código no OnDeinit para carregar relatórios de otimização em meus robôs:

.
//+------------------------------------------------------------------+
//|ShortReport.mqh
//| Copyright 2019, MetaQuotes Software Corp.
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#include "ReportCreator.mqh"
//+------------------------------------------------------------------+
//| Gravador de arquivos|
//+------------------------------------------------------------------+
void writer(string fileName,string headder,string row)
  {
   bool isFile=FileIsExist(fileName,FILE_COMMON); // Sinaliza se o arquivo existe
   int file_handle=FileOpen(fileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_COMMON|FILE_SHARE_WRITE|FILE_SHARE_READ); // Abrir o arquivo
   if(file_handle) // Se o arquivo for aberto
     {
      FileSeek(file_handle,0,SEEK_END); // Mova o cursor para o final do arquivo
      if(!isFile) // Se for um arquivo recém-criado, escreva o título
         FileWrite(file_handle,headder);
      FileWrite(file_handle,row); // Escreva uma mensagem
      FileClose(file_handle); // Fechar o arquivo
     }
  }
//+------------------------------------------------------------------+
//| Proteção do histórico|
//+------------------------------------------------------------------+
void SaveReportToFile(string fileName)
  {
   if(FileIsExist(fileName,FILE_COMMON))
     {
      FileDelete(fileName,FILE_COMMON);
     }

   DealDetales history[];
   CDealHistoryGetter dealGetter;
   dealGetter.getDealsDetales(history,0,TimeCurrent());

   CReportCreator reportCreator;
   reportCreator.Create(history,0);

   TotalResult totalResult;
   reportCreator.GetTotalResult(totalResult);

   int total= ArraySize(history);
   for(int i=0;i<total;i++)
     {
      writer(fileName,
             "Symbol;DT open;Day open;DT close;Day close;Volume;Long/Short;Price in;Price out;PL for one lot;PL for deal;Open comment;Close comment;",
             history[i].symbol+";"+
             TimeToString(history[i].DT_open) + ";" +
             EnumToString(history[i].day_open) + ";" +
             TimeToString(history[i].DT_close) + ";" +
             TimeToString(history[i].day_close) + ";" +
             DoubleToString(history[i].volume)+";"+
             (history[i].isLong ? "Long" : "Short")+";"+
             DoubleToString(history[i].price_in) + ";" +
             DoubleToString(history[i].price_out) + ";" +
             DoubleToString(history[i].pl_oneLot) + ";" +
             DoubleToString(history[i].pl_forDeal) + ";" +
             history[i].open_comment + ";" +
             history[i].close_comment + ";");
     }

   writer(fileName,"","===========================================================================================================================================");
   writer(fileName,"","PL;"+DoubleToString(totalResult.total.PL)+";");
   writer(fileName,"","Recovery factor;"+DoubleToString(totalResult.total.recoveryFactor)+";");
   writer(fileName,"","Profit factor;"+DoubleToString(totalResult.total.profitFactor)+";");
   writer(fileName,"","Draw Down in percent;"+DoubleToString(totalResult.total.maxDrawdown.inPercents)+";");
   writer(fileName,"","Draw Down by pl;"+DoubleToString(totalResult.total.maxDrawdown.byPL)+";");
   writer(fileName,"","Draw Down for a deal;"+DoubleToString(totalResult.total.maxDrawdown.forDeal)+";");
  }
//+------------------------------------------------------------------+
Esse código está em um arquivo separado que conecto ao robô por meio de #include.