TesterStatistics 関数
この関数は、EAをストラテジーテスターで使用した時に算出される結果を取得します。取得する結果は ENUM_STATISTICS 列挙値で指定します。
データ型と構成・戻り値
double TesterStatistics(①);
戻り値は、EAをストラテジーテスターで使用した時に算出される結果を返します。
引数 [1]
TesterStatistics関数は 1個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | statistic_id | enum | - | - | ENUM_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関数で出力した結果を確認できます。
![](https://naruhodo-mt4.com/wp-content/uploads/2023/04/P688testerstatistics.png)
TesterStatistics関数で出力した結果は、ストラテジーテスターのレポートに次にように対応します。丸番号は TesterStatistics関数で使用した引数の値です。
![](https://naruhodo-mt4.com/wp-content/uploads/2023/04/P687enum_statistics-1.png)