記事"トレード履歴のカスタム表示とレポート図の作成"についてのディスカッション - ページ 5

 
テスターのテスト履歴を自分のファイルに読み込むことは可能ですか?EAからではなく、スクリプトを追加することで?
 
ANG3110:
テスターのテスト履歴を自分のファイルに読み込むことは可能ですか?Expert Advisorからではなく、スクリプトを追加することで可能ですか?

はい、エクスパートアドバイザーに分割することなく、ターミナル全体から履歴を読み込むスクリプトです。実際、記事の中ですべての作業を行うクラスを説明しましたので、それを使用して独自のスクリプトを書くことができます。

 

初期化解除の瞬間に、最適化中の履歴分析にあなたの開発を使いたいのです。

残高の変化を1つの配列にまとめるには、どのようにすればよいか教えてください。計器は現在のみ取引されています。

 
Aleksey Vyazmikin:

初期化解除時の最適化において、履歴解析のために貴社の開発を使用したい。

残高の変化を1つの配列にまとめるには、どのようにすればよいか教えてください。計器は現在のみ取引されています。

そのためには、2つ目の記事で 紹介した最終的なクラスを使用するのがよいでしょう。クラス "ReportCreator"

このクラスを使って、私はOnDeinitでこのコードを使い、ロボットに最適化レポートをアップロードします:

//+------------------------------------------------------------------+
//|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"
//+------------------------------------------------------------------+
//| ファイルライター|
//+------------------------------------------------------------------+
void writer(string fileName,string headder,string row)
  {
   bool isFile=FileIsExist(fileName,FILE_COMMON); // ファイルが存在するかどうかをフラグする
   int file_handle=FileOpen(fileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_COMMON|FILE_SHARE_WRITE|FILE_SHARE_READ); // ファイルを開く
   if(file_handle) // ファイルがオープンされている場合
     {
      FileSeek(file_handle,0,SEEK_END); // カーソルをファイルの末尾に移動する。
      if(!isFile) // 新規に作成されたファイルの場合、タイトルを書き込む。
         FileWrite(file_handle,headder);
      FileWrite(file_handle,row); // メッセージを書く
      FileClose(file_handle); // ファイルを閉じる
     }
  }
//+------------------------------------------------------------------+
//| ヒストリーセーバー|
//+------------------------------------------------------------------+
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)+";");
  }
//+------------------------------------------------------------------+
このコードは、#includeを介してロボットに接続する別のファイルにあります。