1. TesterStatistics関数の概要と実務での活用法
MQL5のTesterStatistics関数は、ストラテジーテスターで実行したバックテストや最適化の結果から、特定の統計指標(純益、プロフィットファクター、最大ドローダウンなど)を取得するための関数です。
実務開発において、初心者の多くは「バックテストの結果をMT5の画面上で眺める」だけで終わってしまいがちです。しかし、中級以上のクオンツエンジニアを目指すなら、この関数を使って「独自の評価指標(カスタム・フィットネス関数)」を構築することが不可欠です。
例えば、単純な利益額(STAT_PROFIT)だけでなく、「利益をドローダウンで割ったリカバリーファクター」や「シャープ比」を自動計算し、EA(エキスパートアドバイザー)の最適化プロセスの判断基準に組み込むことで、カーブフィッティング(過剰適合)を抑えた、真に頑健なロジックを抽出できるようになります。
2. 構文と戻り値
TesterStatistics関数の基本構文は非常にシンプルです。
double TesterStatistics(
ENUM_STATISTICS statistic_id // 取得したい統計指標のID
);
パラメーター
- statistic_id: 取得したい指標を
ENUM_STATISTICS列挙型の中から指定します。代表的なものは以下の通りです。STAT_PROFIT: 総純益STAT_PROFIT_FACTOR: プロフィットファクターSTAT_RECOVERY_FACTOR: リカバリーファクターSTAT_SHARPE_RATIO: シャープ比STAT_EQUITY_DDREL_PERCENT: 相対ドローダウン(%)STAT_TRADES: 総取引数
戻り値
- 指定した統計指標の値を
double型(浮動小数点数)で返します。
3. 具体的な使い方・実践サンプルコード
この関数は、バックテスト終了時に自動的に呼び出されるイベントハンドラ OnTester() 内で使用するのが一般的です。以下は、利益とリカバリーファクターを掛け合わせた独自の評価値を返すサンプルです。
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{
// 1. バックテストの結果から必要な指標を取得
double profit = TesterStatistics(STAT_PROFIT); // 純利益
double rf = TesterStatistics(STAT_RECOVERY_FACTOR); // リカバリーファクター
double trades = TesterStatistics(STAT_TRADES); // 取引回数
// 2. 評価のフィルタリング(例:取引数が30回未満なら評価を0にする)
if(trades < 30)
{
Print("取引数が不十分なため、このパラメータは除外します。");
return(0.0);
}
// 3. カスタム指標の計算(利益 × リカバリーファクター)
// これにより「利益が大きく、かつドローダウンからの復帰が早い」設定が優先される
double custom_fitness = profit * rf;
PrintFormat("Custom Fitness: %.2f (Profit: %.2f, RF: %.2f)", custom_fitness, profit, rf);
// 4. 計算した値を返す。最適化の「カスタム基準」としてこの値が使われる。
return(custom_fitness);
}
4. 使用上の注意点とよくあるエラー
1. ストラテジーテスター専用である
TesterStatisticsは、バックテストまたは最適化中のみ値を返します。リアルタイムのチャート上(ライブトレード中)で実行しても、正しい値を取得することはできず、常に 0 を返します。
2. データが生成されるタイミング
指標はバックテストの全工程が完了した後に確定します。そのため、OnTick() 内でリアルタイムに統計を取得しようとしても、その時点までの不完全なデータしか得られません。統計評価には必ず OnTester() または OnDeinit() を活用しましょう。
3. 取引回数の不足によるノイズ
最適化を行う際、数回だけのトレードで「たまたま」驚異的なプロフィットファクターを出す設定が紛れ込むことがあります。サンプルコードのように、必ず STAT_TRADES で一定以上の母数があるかを確認するガードロジックを入れるのが実務上の定石です。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムの性能を最大限に引き出すために、ロジックと同じくらい重要なのが「実行環境」です。自宅のPCでMT5を動かし、家庭用光回線で自動売買を行うことは、プロの視点から見ると非常にリスクが高いと言わざるを得ません。ネットワークの遅延(レイテンシ)はミリ秒単位で蓄積され、バックテストでは発生しなかった「スリッページ」を引き起こし、期待期待値を根底から破壊します。
特に、一瞬の価格変動を取りに行くスキャルピングや高頻度トレードに近いロジックの場合、物理的な距離による遅延は致命的です。約定スピードを極限まで高め、安定した24時間稼働を実現するには、ブローカーのサーバーに近いデータセンターに設置された専用のVPS(仮想専用サーバー)を利用することが必須条件となります。インフラへの投資を惜しむことは、シストレ開発における「最大のコスト」であることを忘れないでください。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント