高頻度スキャルEAの例:テスターでは勝ち、口座では負ける
このコースの主役は、東京時間の高値・安値のブレイクをグリッド探索で磨いたAさんと、同じ考えを事前に決めた1通りだけで検証したBさんの2人です。 しかし、過剰最適化とコストの罠を最も鮮明に理解するために、ここでは市販のEAによくある「5分足の逆張りスキャルピングEA」の実験データ(単発記事『テスターで勝てるスキャルEAが口座で崩れる理由』参照)を比較ケースとして取り上げます。「短い足で行き過ぎた値動きを拾えば、小さく何度も勝てる」という典型的な設計です。
- ルールの形:RSI(値動きの行き過ぎを0〜100で表す指標)が売られすぎの水準を下回って足が確定したら買い、買われすぎを上回ったら売り。ボリンジャーバンドの外側にあることを条件に足すかどうかも選べる。決済は利確・損切り・最大保有本数のどれか早いもの。
- 探したもの:RSIの期間・閾値、ボリンジャーバンドの有無と幅、取引する時間帯、利確、損切り、最大保有本数の組み合わせ 3,456通り。
- 選び方:直近1年(学習期間)で総pipsが最大の案。MT5の既定と同じ「残高最大」で、取引100回以上を条件にした。
- テスター上の前提:シグナル足の終値でそのまま約定し、スプレッドは0。多くのテスターで、設定を変えなければこれに近い前提になる。
- 使い方:学習1年で選んだ案を、次の6か月(運用期間)にそのまま使う。
本文で取り上げるのは、2025年の1年間で最適化し、2026年1〜6月に運用した回です。選ばれたのは「RSI期間7・閾値30・ボリンジャーバンドなし・全時間帯・利確10 pips・損切り5 pips・最大24本保有」でした。 テスターの上では、学習期間に10,043回取引して +1,402 pips。運用期間の6か月も3,785回で +1,397 pipsと、ほぼ同じペースで勝ち続けました。 「未使用の6か月でも勝った」ので、テスターだけを見れば合格に見えます。
ところが、同じ取引を口座の条件、つまり「シグナル足の次の足の始値で約定し、往復0.4 pipsのスプレッドと滑りを払う」条件で計算し直すと、学習期間は −2,785 pips、運用期間は −165 pipsになりました。 往復1.0 pipsの悪化条件では、運用期間は −2,434 pipsです。下の図の金茶の線(テスター)とグレーの線(口座)は、同じルール・同じ取引から描いています。違うのは約定とコストの前提だけです。
なぜこれほど変わるのでしょうか。答えは1回あたりの数字にあります。テスター上の学習期間の平均は、1取引 +0.140 pipsでした。 取引が年に約1万回あるので合計は +1,402 pipsと大きく見えますが、1回の優位は、往復で払う0.4 pipsのコストより小さいのです。 1回ごとにコストが優位を上回るなら、取引を重ねるほど損失が積み上がります。取引回数の多さは、ここでは強みではなく、コストを払う回数の多さです。
もう1つ大事な事実があります。学習期間の最良案は3,456通りの中から選ばれたものなので、その +0.14 pipsもそのまま実力とは言えません。 試した数を差し引いて評価する DSR(第14回で扱います)は、この回の学習期間で 0.05 でした。3,456通り試したことを隠して「1通りだけ試した」と偽ると、同じ成績が 0.98 に見えます。 つまりこのスキャルEAは、コストを入れる前から「偶然でも出る程度の優位」でしかなく、そこに口座のコストが乗って崩れた、という順番です。
このスキャルEAのデータは、Aさん・Bさんの最終テストとは別に、「テスターと口座の乖離で崩れる典型例」として検証者が実験した実データです(詳細は単発記事『テスターで勝てるスキャルEAが口座で崩れる理由』にまとめています)。検証者はこの期間のドル円の相場を見ていたため、意図的な設定選択を避けるよう、ルールは買いと売りを対称にし、1回限りの結果ではなく2006年から39回繰り返したウォークフォワードの割合を客観的な指標としました。本文で取り上げる回(学習2025年→運用2026年1〜6月)は結果を見る前に「最新の回」と固定しています。39回の結果は 3段階の章で示します。
含めるコスト
チャートの価格だけで計算した損益をグロス(コスト前)、売買のたびに払う費用を引いた後の損益をネット(コスト後)と呼びます。口座に残るのはネットだけです。 検証に入れるコストは、次の5つです。
- スプレッド:売値(Bid)と買値(Ask)の差。買うときは高いほう、売るときは安いほうで約定するので、往復するたびに1回分払う。時間帯や指標発表で広がる。
- 取引手数料:口座の種類によって、スプレッドとは別に払う。片道か往復か、ロット単位か金額単位かを確認する。
- スリッページ(滑り):注文した価格と実際に約定した価格の差。成行注文だけでなく、損切りの逆指値でも起きる。
- スワップ・資金調達費:ポジションを日またぎで持つと付く金利差の受け払い。週末や祝日の付与日数も確認する。
- 通貨換算:損益の通貨と口座の通貨が違うときの換算。ゴールドやクロス円以外の通貨ペアで起きる。
このコースでは、ドル円の往復コストを通常0.4 pips・悪化1.0 pips・ストレス2.0 pipsに固定しました(スプレッドと滑りを含む値。検証を始める前に決めたもので、結果を見て変えていません)。 Aさん・Bさん、そしてスキャルEAの比較実験でも、すべて同じ3段階で計算しています。
同じ0.4 pipsでも、戦略によって重さがまったく違います。下の図は、1取引の平均とコストを並べたものです。 Aさんは1日1回まで、数時間ポジションを持つ戦略で、探索期間の報告値は1取引 +8.65 pipsでした。0.4 pipsはその一部にすぎません。 スキャルEAの1取引 +0.14 pipsに対しては、0.4 pipsのコストのほうが大きくなります。コストの影響は「1取引の平均」と「往復コスト」の大小で決まり、総pipsや勝率を見ても分かりません。
ここから言えるのは、コストの影響を見積もるには「総pipsがいくらか」ではなく「1取引あたり何pips取れているか」を必ず書くということです。 レポートに1取引の平均がなければ、そのEAがコストに耐えるかどうかは判断できません。
シグナル足の終値では買えない:次の足の始値で約定する
コストと並んで見落とされやすいのが、どの価格で約定したことにするかです。 「RSIが30を下回って足が確定したら買う」というルールでは、足が確定した瞬間に初めてシグナルが分かります。 ところが、多くの自作バックテストは、そのシグナル足の終値で買えたことにしてしまいます。終値は判定に使った価格そのものなので、判定と同じ瞬間に、判定に使った価格で約定したことになります。 現実には、足が確定してから注文を出すので、約定できる最初の価格は次の足の始値です。
差は1回あたりではわずかです。スキャルEAの取り上げる回では、コストを入れずに約定だけを次の足の始値に変えると、学習期間の1取引の平均は +0.140 から +0.123 pipsに、運用期間は +0.369 から +0.356 pipsに下がりました。 しかし、1回の優位が +0.1 pips台しかない戦略にとっては、この差も無視できません。逆張りは「行き過ぎた価格で入れるか」が損益の中心なので、入る価格が少しずれるだけで優位が削られます。
Aさんのように1取引で数pips以上を狙う戦略では、影響は小さく見えます。Aさんの最終案は、探索期間の報告値(終値約定・コスト0)が1取引 +8.65 pips、次の足の始値と通常コストに直すと +8.24 pipsでした。 それでも、報告と現実の条件がずれていること自体が問題です。どれだけずれるかは戦略ごとに違うので、最初から次の足の始値で計算するのが安全です。 MT5・TradingView・Pythonで約定のタイミングがどうずれるかは、道具箱コース第10回「約定タイミング」で実際に確かめました。
損切りを「指定した価格ちょうど」で約定させる楽観
約定の前提には、もう1つ見えにくい楽観があります。損切りの逆指値が、指定した価格ちょうどで約定すると仮定することです。 現実の相場では、急に動いたときや窓を開けたときに、逆指値は指定価格より不利な価格で約定します。ところが多くのバックテストは、足の安値が損切りの価格に届いたら「その価格で決済した」と計算します。
この楽観の大きさは、規則のない相場で確かめると見えます。値動きに規則がなく、どんなルールでも期待値がゼロのはずのランダムウォーク(第2回)200本に、Aさんの縮小グリッド3,456通りを当てると、全候補の平均が +376 pipsになりました。 期待値ゼロの相場で平均がプラスになった原因は、損切りを指定価格ちょうどで約定させた仮定で、1取引あたり約0.19 pipsの楽観にあたります。 1取引で数pipsを取る戦略には小さな差ですが、スキャルEAのように1回の優位が +0.14 pipsの戦略なら、この楽観だけで優位と同じくらいの大きさになります。 なお、このスキャルEAのルールでは、同じ足の中で利確と損切りの両方に届いたときは損切りを優先して計算しています。足の中の値動きの順番が分からないときは、不利な側を仮定するのが原則です。
コストを入れずに最適化すると何が選ばれるか
ここまでで「コストを入れると成績が下がる」ことは分かりました。過剰最適化の観点で本当に問題なのは、その先です。 コストを入れずに最適化すると、選ばれるルールそのものが変わるかどうか。変わるなら、コストなしの最良案をあとから補正しても意味がありません。
まず、Aさんのグリッド57,600通りを、次の足の始値と往復0.4 pipsの条件で全部計算し直しました(記述統計で、ここで何かを選び直してはいません)。結果は、想定より穏やかでした。
- 上位10案の重なり:コストなしの上位10案のうち、8案が現実の条件でも上位10案に残った。
- 上位100案の重なり:100案中70案が残った。
- 最良案:Aさんの最良案は現実の条件でも1位のまま(探索期間の総pips +5,143 → +4,618)。
- 何が削られたか:総pipsの変化と取引回数の相関は −0.976。取引回数が多い案ほど、ほぼ回数に比例して削られた。
- プラスの案の割合:総pipsがプラスの案は、全体の 59.5% から 51.1% に減った。
Aさんの戦略は1日1回まで、値幅は数十pipsです。このタイプでは、0.4 pipsのコストで順位はあまり崩れません。 一方、相関 −0.976 が示すとおり、コストは取引回数に比例して効くので、順位が崩れるのは高頻度・小幅の案です。そして、その典型が高頻度スキャルEAです。
このスキャルEAの最適化は、スプレッド0の世界で総pipsが最大の案を選びます。この世界では、1回の優位が小さくても、回数が多ければ総pipsは大きくなります。 だから選ばれたのは、年約1万回・1回 +0.14 pipsの案でした。スプレッド0の世界の「最良」は、コストを払えないほど小さな優位を、たくさん積み上げた案になりやすいのです。
では、最初からコストを入れて選べばよいのでしょうか。比較のために、同じ39回の最適化を、次の足の始値・往復0.4 pipsの条件で最初から選び直した「スキャルEA'(コスト込み選択)」も検証しました。
結果は2つの面を持っています。良い面は、大損を防げたことです。39回の運用期間の合計は、スキャルEAが −23,637 pipsなのに対し、スキャルEA'は −931 pipsでした。 コストを払えない高頻度の案が、選ぶ段階で落とされたからです。
悪い面は、過剰最適化は残ったことです。スキャルEA'は39回すべての学習期間でプラスの案を見つけましたが、運用期間では通常コストで21回、悪化コストで33回がマイナスでした。 1取引の平均の中央値は、学習期間の +0.565 pipsから運用期間の −0.299 pipsに落ちています。学習期間で一番良かった案が、次の6か月ではゼロ以下に戻る。これはコストの問題ではなく、3,456通りから選んだことの問題です。 2006〜2010年の回は運用もおおむねプラスでしたが、2011年以降はマイナスが多くなりました。逆張りの優位が薄れたのか、初めから偶然だったのかは、このデータだけでは区別できません。
コストを入れずに最適化すると、コストを払えない案が選ばれ、口座で大きく負けます。コストを入れて最適化すると、その大損は防げます。 しかし、たくさん試して最良を選ぶ限り、選んだ案が偶然に乗っている問題は残ります。それを確かめるのが、比較対象(第10回)、感応度(第11回)、置換検定(第12回)、DSR(第14回)です。
通常・悪化・ストレスの3段階と、損益がゼロになるコスト
コストの値は、推定です。業者、時間帯、相場の荒れ方で変わりますし、自分の注文がどれだけ滑るかは運用してみないと分かりません。 だから1つの値で計算して終わりにせず、3段階で計算して並べます。
- 通常(0.4 pips):平常時の中央値に近いスプレッドと、現実的な滑り。
- 悪化(1.0 pips):スプレッドと滑りが通常より広い状態。採否の判定はこの段階で行う。
- ストレス(2.0 pips):重要指標、薄商い、週明けのような厳しい状態。これでも生き残るかを見る。
Bさんは、事前に書いた合格ラインの1つを「悪化コストでも、期待値の95%信頼区間の下限が0を超える」にしていました。最終テストの結果は、通常コストの平均 +4.42 pipsに対して、悪化コストの信頼区間の下限が −0.21 でした。 この1項目が不合格だったこともあり、Bさんの判定は「保留」です(第17回)。合格ラインを通常コストに緩めれば「採用」と書けましたが、Bさんはそうしていません。
Aさん・Bさん、そしてスキャルEAの数字を3段階で並べると、1取引の値幅が小さいほど、段階が1つ上がるたびの打撃が大きいことが分かります。
| 開発者/検証モデル(期間・取引数) | やったこと | 通常 0.4 | 悪化 1.0 | ストレス 2.0 |
|---|---|---|---|---|
| Aさん(検証期間、190件) | スプレッド0・終値約定で選び、報告も同じ条件 | +3.55 | +2.95 | +1.95 |
| Bさん(探索期間、1,893件) | 最初から次の足の始値・3段階で計算 | −0.14 | −0.74 | −1.74 |
| Bさん(検証期間、914件) | 同上 | +1.57 | +0.97 | −0.03 |
| スキャルEA(取り上げる回の運用期間、3,782件) | スプレッド0・終値約定で選び、テスターだけで判断 | −0.044 | −0.644 | −1.644 |
単位は1取引あたりのpipsで、どれも次の足の始値で約定させた値です。Aさんは1回の値幅が大きいので、ストレス条件でもまだプラスに残ります(ただしAさんの問題はコストではなく、第10回以降で見る「稼いだのは相場の流れ」という点にあります)。 スキャルEAは通常コストの時点で、すでにマイナスです。
損益がゼロになるコストを書く
3段階と一緒に書いておきたいのが、損益がゼロになる往復コストです。往復コストは1取引ごとに同じ額が引かれるので、コストを入れる前の1取引の平均が、そのまま「このコストまでなら損益がプラスに残る」という上限になります。 Bさんの探索期間は、コスト前の平均が +0.26 pipsでした。つまり往復0.26 pipsより高いコストを払う口座では、探索期間の成績はマイナスになります。通常コスト0.4 pipsの時点で、すでにその上限を超えていたわけです。 スキャルEAの取り上げる回では、次の足の始値・コスト0の1取引の平均が学習期間 +0.123 pips、運用期間 +0.356 pipsでした。どちらも、ドル円で現実に払う往復コストに届くかどうかという水準です。
この数字を書いておくと、「自分の口座のスプレッドがあと何pips広がったら、このEAは負けるのか」がすぐ分かります。損益がゼロになるコストが、ふだんのスプレッドに近いEAは、採用しません。
39回繰り返すと、崩れるのは毎回だった
スキャルEAの取り上げる回は、たまたま崩れた1回ではありません。この実験では、同じ手順(学習1年で最適化→次の6か月で運用)を、2006年から6か月ずつずらして39回繰り返しました。
テスターの上では、39回中36回で運用期間がプラスでした。これだけを見れば、「毎回最適化し直すやり方」は優秀に見えます。 ところが口座の条件では、通常コストで31回、悪化コストとストレスコストでは39回すべてがマイナスでした。 さらに、学習期間そのものも、通常コストでは39回中28回がマイナスでした。最適化で選ばれた最良案でさえ、コストを払うと学習期間から負けていたということです。はじめから、取引できるエッジではなかったと読むのが自然です。
FXとゴールド固有の注意
FX
同じ通貨ペアでも、コストは時間帯で変わります。東京の早朝(ニューヨーク市場が閉まった後の薄い時間)、ロンドン・フィキシング前後、重要な経済指標の発表時、週明けの寄り付きは、スプレッドが広がりやすく、滑りも大きくなります。 スキャルEAの選んだ案は「全時間帯」で取引するので、こうした時間も含みます。スプレッド0のテスターでは、時間帯によるコストの違いが最初から見えません。
- 価格の種類:ヒストリカルデータがBid(売値)だけなら、買いも売りもBidで約定させるとスプレッドを払っていないことになる。
- 時刻:サーバー時刻とJSTの対応、夏時間、週末クローズの時刻を記録する。このコースのデータはJSTで、日足の区切りは06:00 JST。
- スワップ:日またぎで持つ戦略は、スワップの付く曜日(3日分の曜日)と金利差の向きを確認する。
- コストの値:このコースの0.4/1.0/2.0 pipsはドル円のための値で、他の通貨ペアにそのまま当てはめない。
ゴールド
XAU/USD(金のドル建て価格)のCFDは、業者によって契約サイズ、最小変動幅、取引停止の時間、スプレッド、資金調達費が違います。「1ロット」「1ポイント」が何を意味するかを先に固定し、利用する業者の仕様で損益を口座通貨に換算してください。 指標発表の直後は、スプレッドと滑りが同時に悪化することがあります。値幅の大きい銘柄なので、pips(ポイント)で見た1取引の平均とコストの比を、FXと同じ感覚で読まないことも大切です。
よくある間違い
「コストは最後に引けばよい」
コストなしで最適化し、最良案にだけ後からコストを当てると、コストを払えない案が選ばれたまま残ります。スキャルEAが選んだ年約1万回・1回 +0.14 pipsの案がその例です。 コストは、選ぶ前の段階、つまり最適化で比べる成績そのものに入れます。
「テスターの運用期間でも勝ったから、フォワードで確認済み」
スキャルEAの実験では、テスターの上では39回中36回、運用期間でもプラスでした。未使用の期間で試しても、約定とコストの前提がテスターのままなら、確かめたのは「スプレッド0の世界で通用するか」だけです。 口座の条件では、同じ39回のうち31回がマイナスでした。未使用データの検証は、口座と同じ条件で行って初めて意味を持ちます。
「損切りは指定した価格で約定する」
逆指値は価格を保証しません。期待値ゼロのランダムウォークでも、損切りを指定価格ちょうどで約定させるだけで、全候補の平均が +376 pips(1取引約0.19 pips)になりました。1回の優位が小さい戦略ほど、この楽観を差し引いて読む必要があります。
「コストを入れて選び直したから、もう安全」
スキャルEA'は大損を防ぎましたが、運用期間は39回中21回がマイナスでした。コストを入れることは必要ですが、それだけで過剰最適化は消えません。何通り試して選んだかは、別に数えて評価します(第8回・第14回)。
実戦課題
自分のEAか、これから検証するルールを1つ選んで、次の順に作業してください。
- 約定を次の足の始値に直す:シグナル足の終値で約定させている箇所がないか、コードとテスターの設定を確認します。
- 1取引の平均を出す:コスト前の1取引の平均(pips)を計算し、それが「損益がゼロになる往復コスト」であることを研究ログに書きます。
- 3段階を決める:利用する業者の実際のスプレッドと滑りを調べ、通常・悪化・ストレスの3つの値を結果を見る前に決めて記録します。
- 最適化をコスト込みでやり直す:パラメータを探しているなら、コストなしとコスト込み(通常)の上位10案を並べ、何案が重なるかを数えます。重なりが少ないなら、そのルールはコストに敏感です。
- 損切りの約定を確かめる:損切りに滑りを入れた場合と入れない場合で、1取引の平均がどれだけ変わるかを書きます。
やるべきこと/やるべきでないこと
| やるべきこと | やるべきでないこと |
|---|---|
| 1回目の検証から、次の足の始値で約定させ、往復コストを入れる | 終値約定・スプレッド0で最適化し、最後にコストを引く |
| 最適化で比べる成績を、コスト込みの成績にする | コストなしで選んだ最良案に、後からコストを当てて合否を決める |
| 1取引の平均と往復コストを並べて書く | 総pipsと勝率だけでコストに耐えるかを判断する |
| 通常・悪化・ストレスの3段階を事前に決め、悪化で合否を判定する | 一番安いコストの結果だけで採用する |
| 損切りの滑りを入れるか、楽観の大きさを測って書く | 逆指値は指定価格ちょうどで約定すると仮定する |
| テスターの成績と口座の条件の成績を分けて記録する | テスター上の未使用期間の勝ちを「フォワードで確認済み」と呼ぶ |
| コスト込みで選んでも、試した数を数えて別に評価する | コストを入れたから過剰最適化の心配はないと考える |
チェックリスト
次の回に進む前に、以下が自分の言葉で説明できるか確認してください。
- グロス(コスト前)とネット(コスト後)の違い
- コストの影響は「1取引の平均」と「往復コスト」の大小で決まること
- シグナル足の終値ではなく、次の足の始値で約定させる理由
- 損切りを指定価格ちょうどで約定させる仮定が、成績を良く見せること
- コストで順位が崩れやすいのは、高頻度・小幅の案であること
- コスト込みで選んでも、過剰最適化は残ること(スキャルEA'の例)
- 通常・悪化・ストレスの3段階と、損益がゼロになるコストの読み方
ミニテスト
4問で確認します。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。
Q1. 高頻度スキャルEAの案は、テスター上の1取引の平均が +0.14 pips、取引は年約1万回でした。往復0.4 pipsのコストを払う口座で起きることは?
コストの影響は、総pipsではなく1取引の平均と往復コストの大小で決まります。優位よりコストが大きければ、回数の多さは損失の多さになります。実際にスキャルEAの運用期間は、通常コストで −165 pips、悪化コストで −2,434 pipsでした。
Q2. Aさんのグリッドを現実の条件(次の足の始値・往復0.4pips)で計算し直すと、上位10案のうち8案が残りました。ここから言えることは?
総pipsの変化と取引回数の相関は −0.976 で、コストは回数に比例して効きます。順位が保たれたことは、コストに強いことを示すだけで、実力の証明にはなりません。Aさんの利益の中身は第10回で分解します。
Q3. 同じ39回の最適化を、最初からコスト込みで選び直したスキャルEA'の結果の正しい読み方は?
運用期間の合計はコストなし選択の −23,637 pipsに対してスキャルEA'は −931 pipsで、コストを入れる効果ははっきりあります。それでも学習期間の最良案が運用期間でゼロ以下に戻るのは、たくさん試して選んだことによる問題で、コストとは別に評価が必要です。
Q4. 「RSIが30を下回って足が確定したら買う」ルールを、シグナル足の終値で約定させて検証するのが問題なのはなぜ?
足の確定を見てから出した注文が約定できる最初の価格は、次の足の始値です。スキャルEAの取り上げる回では、約定を次の足の始値に直すだけで、学習期間の1取引の平均が +0.140 から +0.123 pipsに下がりました。