Discusión sobre el artículo "Representación personalizada de la historia comercial y creación de gráficos para los informes" - página 5

 
¿Es posible leer el historial de pruebas del probador en mis archivos? No desde el EA, sino añadiendo un script?
 
ANG3110:
¿Es posible leer el historial de pruebas del probador en mis archivos? ¿No desde un Asesor Experto, sino añadiendo un script?

Sí, en realidad es un script que lee el historial de todo el terminal sin dividirlo en Asesores Expertos. De hecho en el artículo describí la clase que hace todo el trabajo, puedes usarla y escribir tu propio script.

 

Quiero utilizar su desarrollo para el análisis de la historia durante la optimización en el momento de la desinicialización.

¿Podría decirme cómo hacerlo mejor para obtener el cambio de saldo en una matriz? El instrumento se negocia sólo corriente.

 
Aleksey Vyazmikin:

Quiero utilizar su desarrollo para el análisis del historial durante la optimización en el momento de la desinicialización.

¿Podría decirme cómo hacerlo mejor para obtener el cambio de saldo en una matriz? El instrumento se negocia sólo corriente.

Para esto es mejor usar la clase finalizada de mi segundo artículo. Clase "ReportCreator"

Usando esta clase, utilizo este código en OnDeinit para cargar informes de optimización en mis robots:

.
//+------------------------------------------------------------------+
//|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"
//+------------------------------------------------------------------+
//| Escritor de archivos|
//+------------------------------------------------------------------+
void writer(string fileName,string headder,string row)
  {
   bool isFile=FileIsExist(fileName,FILE_COMMON); // Marca si el fichero existe
   int file_handle=FileOpen(fileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_COMMON|FILE_SHARE_WRITE|FILE_SHARE_READ); // Abrir el fichero
   if(file_handle) // Si el fichero está abierto
     {
      FileSeek(file_handle,0,SEEK_END); // Mover el cursor al final del fichero
      if(!isFile) // Si es un fichero recién creado - escribe el título
         FileWrite(file_handle,headder);
      FileWrite(file_handle,row); // Escribir un mensaje
      FileClose(file_handle); // Cerrar el archivo
     }
  }
//+------------------------------------------------------------------+
//| Ahorrador de historia|
//+------------------------------------------------------------------+
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)+";");
  }
//+------------------------------------------------------------------+
Este código está en un archivo separado que conecto al robot a través de #include.