コンテンツにスキップ

【検証#06】バックテスト詐欺の手口を知る

この記事の3行まとめ

  • 🚨 バックテストで「未来のレート」を参照すれば100%勝てるEAが作れる
  • 💀 これは詐欺の手口であり、リアル口座では絶対に勝てない
  • 🛡️ 見破り方:フォワードテストコードレビュー

はじめに

この記事は、「とあるMetaTraderの備忘秘録」様のブログ記事を検証・紹介するシリーズの第6弾です。

今回は技術検証ではなく、EA購入者を守るための重要な知識をお届けします。

元ネタ

どんな通貨ペア時間足でもバックテストで利益の出るEA
https://fai-fx.hatenadiary.org/entry/20090930/1254280820
(2009年9月30日 公開)

時代背景に関する注意

この記事の元となるブログ記事は2009年頃に公開されたものです。
MQL5の仕様変更により、一部のハック的な未来参照手法は無効化されていますが、概念は依然として重要です。


なぜこの知識が重要なのか

インターネット上には「勝率99%」「年利300%」を謳うEAが溢れています。

その多くが見せているのはバックテスト結果です。

しかし、バックテストには致命的な弱点があります: 「未来のレートを知っている状態でテストできる」 ということです。


未来参照の仕組み

バックテスト時、MT4/MT5はすべてのヒストリカルデータを読み込んでいます。

つまり、プログラムから「1本先」「10本先」のローソク足を参照することが可能です。

MQL
// バックテスト時だけ動作する「詐欺コード」の概念図
void OnTick()
{
    // 次のバーの終値を取得(バックテストでは可能!)
    double nextClose = iClose(_Symbol, PERIOD_CURRENT, -1);  // 未来のバー
    double currentClose = iClose(_Symbol, PERIOD_CURRENT, 0);

    // 未来の方向がわかれば、必ず勝てる
    if(nextClose > currentClose)
        Buy();  // 上がるとわかっているので買い
    else
        Sell(); // 下がるとわかっているので売り
}

注意:実際のコードはより巧妙

上記は概念を示す疑似コードです。
実際の詐欺EAはこれを巧妙に隠蔽しています。


より巧妙な手口

1. インジケータ経由の未来参照

インジケータのバッファに未来の値が入っていることを利用:

MQL
// 一部のインジケータは未来のバーの値を参照可能
double futureValue = iCustom(_Symbol, PERIOD_CURRENT, "SomeIndicator", 0, -1);

2. リペイントインジケータの利用

過去のシグナルを書き換える「リペイント」インジケータを使い、 バックテストでは「常に正しいシグナルが出ていた」ように見せる。

3. 配列インデックスのトリック

ArraySetAsSeries の設定で混乱させ、実質的に未来参照していることを隠す。


実際にどれくらい勝てるのか

未来参照を使えば、理論上100%勝つことが可能です。

条件 バックテスト結果 リアル運用結果
未来参照あり 勝率100%、右肩上がり 動作しない or 大損
未来参照なし 現実的な結果 同様の結果が期待できる

見破り方

1. フォワードテストを確認

最も確実な方法

デモ口座でのリアルタイム運用結果を確認する。
バックテスト結果だけを見せるEAは要注意。

  • MyFXBookなどの第三者検証サービスを確認
  • 最低3ヶ月以上の実運用データを要求

2. ソースコードを確認(可能な場合)

以下のパターンがないかチェック:

MQL
// 危険なパターン1: 負のインデックス
double value = Close[-1];  // 未来参照
double value = iClose(_Symbol, PERIOD_H1, -5);  // 未来参照

// 危険なパターン2: Rates配列で未来を参照
MqlRates rates[];
CopyRates(_Symbol, PERIOD_H1, -10, 20, rates);  // 開始位置が負

// 危険なパターン3: 不自然なバッファ参照
double signal = buffer[i - 10];  // ループ内で「前」を参照しているように見えて実は未来

3. チェックリスト

確認項目 安全 危険
フォワードテスト公開
ソースコード公開
販売者の実績
現実的な成績 ✗ 過剰
返金保証

リペイントの見破り方

リペイントインジケータは、過去のシグナルを書き換えます。

リアルタイムで確認する方法

  1. MT5でインジケータを適用
  2. 最新のシグナルをスクリーンショット
  3. 数時間〜数日後に再確認
  4. 過去のシグナルが変わっていたらリペイント

コードで確認する方法

MQL
// リペイントの典型的なパターン
// CalculateOnBarOpen = false のインジケータで、
// i = 0 (現在のバー) を計算している場合は要注意

for(int i = 0; i < rates_total; i++)
{
    // i = 0 の時に計算して buffer[0] に書き込むと
    // 次のバーでは buffer[1] になり、値が「確定」したように見える
    buffer[i] = SomeCalculation(close[i], close[i+1], ...);
}

健全なEA選びのポイント

  1. フォワードテストを重視: バックテストよりリアルタイム結果
  2. ドローダウンを確認: 勝率100%は疑う
  3. ソースコード入手: できれば自分でレビュー
  4. コミュニティの評判: フォーラムやレビューサイト
  5. 少額から開始: いきなり大金を投入しない

まとめ

ポイント 内容
手口 バックテスト時に未来のレートを参照
結果 バックテストでは100%勝てる
リアル まったく機能しないか大損
対策 フォワードテストとコードレビュー

オリジナル記事への謝辞

この記事は「とあるMetaTraderの備忘秘録」様の貴重な知見をもとに、
現代の視点で解説を加えたものです。
2009年に既にこの問題を指摘されていたことに敬意を表します。


関連用語

この記事で登場した用語は用語集でも解説しています。