テスターの結果を取得 TesterStatistics 関数

関数

共通関数

TesterStatistics 関数

この関数は、EAをストラテジーテスターで使用した時に算出される結果を取得します。取得する結果は ENUM_STATISTICS 列挙値で指定します。

 

データ型と構成・戻り値

double TesterStatistics(①);

戻り値は、EAをストラテジーテスターで使用した時に算出される結果を返します。

引数 [1]

TesterStatistics関数は 1個の引数で構成されます。


引数名データ型単位初期値説明
statistic_idenumENUM_STATISTICS 列挙値から取得するデータの識別子 または 値を選択。

使用例

TesterStatistics関数によるストラテジーテスター結果の取得

TesterStatistics関数を使用してストラテジーテスターの結果を出力させます。

今回、こちらの方法 (設定) で EAをストラテジーテスターで動かします。

次のコードは「買いのみトラリピEA」のコードの後、TesterStatistics関数を組み込んだものになります。

TesterStatistics関数はストラテジーテスターの時のみ実行されます。今回、引数には識別子ではなく値を使用しています。値に対応する識別子はこちらから確認してください。

コード

// TesterStatistics関数によるストラテジーテスター結果の取得

// BuyOnlyTraripEA.mq4 (買いのみトラリピEA フランのなるほどMT4)
//★1.初期設定値の決定★★★★★★★★★★★★
#property strict
extern double lots = 0.01;             // ロット数
extern double maxPrice = 100.0;        // 取引最大値(各通貨単位)
extern int trapsu = 100;               // トラップ数(個)
extern int profitPips = 100;           // 利益幅(Pips)
extern int trapIntervalPips = 50;      // トラップ幅(Pips)
extern int slippage = 3;               // スリッページ(Pips)
extern int magic = 1001;               // マジックナンバー
extern int orderRangePips = 100;       // 指値注文範囲(Pips)

int slippagePips;                      // スリッページの単位をPipsからPointへ変換した変数
double PipsPerCunit;                   // 1Pipsあたり各国通貨単位に変換する係数
int i, j, ticket;                      // i:トラップ数計数用の変数, j:ポジション数計数用の変数, ticket:チケットNoの変数

//★2.初期処理★★★★★★★★★★★★★★★★
void OnInit() {                        // 初期処理
    int coe = 1;                       // 2,4桁表示業者の場合の係数は「1」
    if(_Digits == 3 || _Digits == 5) { // 3,5桁表示業者の場合の係数は「10」
        coe = 10;
    }
    PipsPerCunit = _Point * coe;       // 1Pipsあたりを各国通貨単位に変換する係数
    slippagePips = slippage * coe;     // スリッページの単位をPipsからPointへ変換
}

//★3.終了処理★★★★★★★★★★★★★★★★
void OnDeinit(const int reason) { //終了処理
   ObjectsDeleteAll();            // オブジェクトテキストをEA削除時消すための処理
}

//★4.レート変動毎の処理★★★★★★★★★★★
void OnTick() { //レート変動毎の処理

   for(i=0; i < trapsu; i++){ 
//●4.①注文範囲内かのチェック●●●●●●●●
      double openPrice = maxPrice - trapIntervalPips * i * PipsPerCunit;
      RefreshRates();
      double currentPrice = Ask;
      if( orderRangePips != 0 && (openPrice < currentPrice - orderRangePips * PipsPerCunit || openPrice > currentPrice + orderRangePips * PipsPerCunit) ){
         continue; // 現在値が指値注文範囲より乖離した注文は出さない
      }
      
//●4.②決済価格とマジックナンバーの設定●●●
      //注文範囲内に入ったので処理を続行
      double closePrice = openPrice + profitPips * PipsPerCunit; //イフダン注文の決済価格を設定
      int magicNumber = magic + i;
      
//●4.③注文有無のチェック●●●●●●●●●●
      ticket = -1; // 既に注文orポジション化されているかチェック。無しの時、ticket=-1。
      for(j=0; j < OrdersTotal(); j++) { 
         if(OrderSelect(j, SELECT_BY_POS) == false) {
            break;
         }
         
         if(magicNumber == OrderMagicNumber() && OrderSymbol() == _Symbol) {
            ticket = OrderTicket();
            break;
         }
      }
      
//●4.④注文無しの時は注文する●●●●●●●●
      if(ticket <= 0) { // 注文がなければ(ticket=-1の時)リピートする
         int tradeType;               // 注文形式を決定する
         if(openPrice <= Ask) {
            tradeType = OP_BUYLIMIT;  // 指値 <= 現在価格(Ask) の時、買い指値注文
         } else {
            tradeType = OP_BUYSTOP;   // 指値 >  現在価格(Ask) の時、買い逆指値注文
         }
         openPrice = NormalizeDouble(openPrice, Digits);   //指値価格の有効桁丸め
         closePrice = NormalizeDouble(closePrice, Digits); //決済価格の有効桁丸め
         ticket = OrderSend(Symbol(), tradeType, lots, openPrice, slippagePips, 0, closePrice, "B_T_EA:" + (string)magicNumber, magicNumber, 0, clrNONE); //イフダン注文
      }
   }
}

double OnTester() {
   Print(" 0.初期証拠金:",                           TesterStatistics( 0));
   Print(" 2.純益:",                                 TesterStatistics( 2));
   Print(" 3.総純益:",                               TesterStatistics( 3));
   Print(" 4.総損失:",                               TesterStatistics( 4));
   Print(" 5.最大勝トレード:",                       TesterStatistics( 5));
   Print(" 6.最大負トレード:",                       TesterStatistics( 6));
   Print(" 7.最大連勝(トレード数)合計利益額:",       TesterStatistics( 7));
   Print("35.最大連勝(トレード数)連勝回数:",         TesterStatistics(35));
   Print(" 8.最大連勝(金額)合計利益額:",             TesterStatistics( 8));
   Print("36.最大連勝(金額)連勝回数:",               TesterStatistics(36));
   Print(" 9.最大連敗(トレード数)合計損失額:",       TesterStatistics(9));
   Print("37.最大連敗(トレード数)連敗回数:",         TesterStatistics(37));
   Print("10.最大連敗(金額)合計損失額:",             TesterStatistics(10));
   Print("38.最大連敗(金額)連敗回数:",               TesterStatistics(38));
   Print("11.最低残高値:",                           TesterStatistics(11));
   Print("12.最大ドローダウン(金額):",               TesterStatistics(12));
   Print("13.最大ドローダウン(%):",                  TesterStatistics(13));
   Print("15.相対ドローダウン(%):",                  TesterStatistics(15));
   Print("14.相対ドローダウン(金額):",               TesterStatistics(14));
   Print("16.最低残高評価値:",                       TesterStatistics(16));
   Print("17.証拠金ベースの最大ドローダウンの金額:", TesterStatistics(17));
   Print("18.証拠金ベースの最大ドローダウン率(%):", TesterStatistics(18));
   Print("20.証拠金ベースの相対ドローダウン率(%):",  TesterStatistics(20));
   Print("19.証拠金ベースの相対ドローダウンの金額:", TesterStatistics(19));
   Print("21.期待利得:",                             TesterStatistics(21));
   Print("22.プロフィットファクタ:",                 TesterStatistics(22));
   Print("25.マージンレベルの最小値:",               TesterStatistics(25));
   Print("26.最適化基準の値:",                       TesterStatistics(26));
   Print("28.総取引回数:",                           TesterStatistics(28));
   Print("29.勝ち取引回数:",                         TesterStatistics(29));
   Print("30.負け取引回数:",                         TesterStatistics(30));
   Print("31.売りの取引回数:",                       TesterStatistics(31));
   Print("32.買いの取引回数:",                       TesterStatistics(32));
   Print("33.売り取引で利益がプラスになった回数:",   TesterStatistics(33));
   Print("34.買い取引で利益がプラスになった回数:",   TesterStatistics(34));
   Print("39.平均連勝:",                             TesterStatistics(39));
   Print("40.平均連敗:",                             TesterStatistics(40));
   return(0);
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

ストラテジーテスター実行後、「操作履歴」タブから TesterStatistics関数で出力した結果を確認できます。

TesterStatistics関数で出力した結果は、ストラテジーテスターのレポートに次にように対応します。丸番号は TesterStatistics関数で使用した引数の値です。

タイトルとURLをコピーしました