Diskussion zum Artikel "Individuelle Darstellung der Handelshistorie und Erstellung von Berichtsdiagrammen" - Seite 5

 
Ist es möglich, den Testverlauf des Testers in meine Dateien einzulesen? Nicht über den EA, sondern durch Hinzufügen eines Skripts?
 
ANG3110:
Ist es möglich, den Testverlauf des Testers in meine Dateien einzulesen? Nicht über einen Expert Advisor, sondern durch Hinzufügen eines Skripts?

Ja, es handelt sich um ein Skript, das die Historie aus dem gesamten Terminal liest, ohne sie in Expert Advisors aufzuteilen. In dem Artikel habe ich die Klasse beschrieben, die die ganze Arbeit macht. Sie können sie verwenden und Ihr eigenes Skript schreiben.

 

Ich möchte Ihre Entwicklung für die Verlaufsanalyse während der Optimierung zum Zeitpunkt der Deinitialisierung verwenden.

Könnten Sie mir bitte sagen, wie ich es besser machen kann, um die Bilanzveränderung in ein Array zu bekommen? Das Instrument wird nur aktuell gehandelt.

 
Aleksey Vyazmikin:

Ich möchte Ihre Entwicklung für die Verlaufsanalyse während der Optimierung zum Zeitpunkt der Deinitialisierung verwenden.

Könnten Sie mir bitte sagen, wie ich es besser machen kann, um die Bilanzveränderung in ein Array zu bekommen? Das Instrument wird nur aktuell gehandelt.

Hierfür ist es besser, die finalisierte Klasse aus meinem zweiten Artikel zu verwenden. Klasse "ReportCreator"

Mit dieser Klasse verwende ich diesen Code in OnDeinit, um Optimierungsberichte in meine Robots hochzuladen:

.
//+------------------------------------------------------------------+
//|KurzBericht.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"
//+------------------------------------------------------------------+
//| Datei-Schreiber|
//+------------------------------------------------------------------+
void writer(string fileName,string headder,string row)
  {
   bool isFile=FileIsExist(fileName,FILE_COMMON); // Kennzeichen, ob die Datei existiert
   int file_handle=FileOpen(fileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_COMMON|FILE_SHARE_WRITE|FILE_SHARE_READ); // Öffnen Sie die Datei
   if(file_handle) // Wenn die Datei geöffnet ist
     {
      FileSeek(file_handle,0,SEEK_END); // Bewegen Sie den Cursor an das Ende der Datei
      if(!isFile) // Wenn es sich um eine neu erstellte Datei handelt - schreiben Sie den Titel
         FileWrite(file_handle,headder);
      FileWrite(file_handle,row); // Eine Nachricht schreiben
      FileClose(file_handle); // Schließen Sie die Datei
     }
  }
//+------------------------------------------------------------------+
//| Historienspeicher|
//+------------------------------------------------------------------+
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)+";");
  }
//+------------------------------------------------------------------+
Dieser Code befindet sich in einer separaten Datei, die ich über #include mit dem Roboter verbinde.