バックテスト基礎
MQL5のOnTester関数を使った独自の最適化基準(カスタム評価)の作り方
公開 2026.06.17 最終確認 2026.06.17 Backtest
MT5のバックテスト最適化(遺伝的アルゴリズム等)において、デフォルトの「残高の最大化」や「プロフィットファクター」を最適化基準に選ぶと、極端なリスクを取るピーキーなパラメータばかりが選出されてしまいます。 MQL5の OnTester() 関数を用いることで、「純益 ÷ 最大ドローダウン(リカバリーファクター)」や「シャープレシオに勝率を加味した独自のスコ
PF、勝率、最大DD、取引回数は単独では判断しません。期間、条件、崩れ方とセットで読みます。
optimization / backtest
MQL5のOnTester関数を使った独自の最適化基準(カスタム評価)の作り方
結論
MT5のバックテスト最適化(遺伝的アルゴリズム等)において、デフォルトの「残高の最大化」や「プロフィットファクター」を最適化基準に選ぶと、極端なリスクを取るピーキーなパラメータばかりが選出されてしまいます。
MQL5の OnTester() 関数を用いることで、「純益 ÷ 最大ドローダウン(リカバリーファクター)」や「シャープレシオに勝率を加味した独自のスコア」など、システムトレードにおける真のリスクを抑えた性を測る『カスタム最適化基準(Custom max)』をプログラミングして適用することが可能になります。
なぜEA運用で重要か
最適化(Optimization)は、指定した評価基準(スコア)が最も高くなるパラメータの組み合わせを機械的に探す作業です。 AI(遺伝的アルゴリズム)に「とにかく残高(Balance)を最大にしろ」と命令すれば、彼は「一度も損切りせずにギリギリで助かった、ハイレバレッジの超危険なパラメータ」を最高の答えとして提示してきます。AIに「リスクを抑えたに稼ぐ」という概念を教えるためには、人間側で「利益とリスクのバランスをスコア化する数式」を定義してやる必要があるのです。
仕組み・条件
OnTester() は、1回のバックテストのパス(試行)が終了した直後に自動的に呼び出されるMQL5のイベントハンドラー関数です。
この関数は必ず double 型の数値を返す(return する)必要があり、MT5のテスター画面で「最適化基準:Custom max」を選択すると、ここで返された数値が最も大きいパラメータセットを「優秀」と判定します。
実装例(簡易的なリカバリーファクターのスコア化):
double OnTester()
{
// テスト結果から純益と最大ドローダウン額を取得
double net_profit = TesterStatistics(STAT_PROFIT);
double max_dd = TesterStatistics(STAT_EQUITY_DD);
// ドローダウンが0、または利益がマイナスの場合はスコア0
if(max_dd <= 0 || net_profit <= 0) return(0.0);
// リカバリーファクター(純益 ÷ 最大DD)を計算して返す
double custom_score = net_profit / max_dd;
return(custom_score);
}
バックテストやリアル運用で壊れるポイント
- 複雑すぎる数式の罠: カスタム基準に「取引回数」「勝率」「連敗数」などを複雑に掛け合わせすぎると、AI(最適化アルゴリズム)がどの要素を改善すべきか迷い、収束(最適なパラメータの発見)に異常な時間がかかったり、全く見当違いのローカルオプティマム(局所的最適解)に陥ったりします。評価基準はシンプルであるほど効果的です。
どう確認するか
カスタム最適化基準を実装したら、最適化を実行し、結果タブの「Custom」列の値が意図通りに計算されているか確認します。 最適化の結果として上位に並んだパラメータセットが、「利益はそこそこだが、資産曲線(グラフ)が非常に滑らかでドローダウンが浅い」ものになっていれば、カスタム評価関数の実装は成功です。
自分の検証スタンス
私はほぼすべての自作EAにこの OnTester() を実装しています。
特に重視している数式は「(純益 / 最大ドローダウン) * (取引回数 / 100)」のような形です。どれほどリカバリーファクターが高くても、10年間で取引回数が数回しかないような「たまたまハマっただけのパラメータ」をAIに評価させないため(ペナルティを与えるため)の工夫です。AIを正しく調教することが、優れたEA開発者の条件だと考えています。
関連して読む
- ExnessのRaw Spread・Zero・ProをEA目線でどう使い分けるか
- スプレッド固定バックテストがリアルで崩れる理由
- MT5バックテストで手数料を入れ忘れるとPFが盛れる理由
- Exnessのレバレッジ無制限とEAロット計算
- 最適化(カーブフィッティング)の罠:パラメータが綺麗すぎるEA
- EAの「リカバリーファクター(RF)」をPF以上に重視すべき理由
PF、勝率、最大DD、取引回数は単独では判断しません。期間、条件、崩れ方とセットで読みます。
参照した公式情報
- Exness official site (2026.06.17 確認)
- MQL5 documentation (2026.06.17 確認)
免責
本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。