「MACDクロスは、パラメータ次第で勝てる」
もしあなたが今もそう信じているなら、悪いことは言わない。今すぐこのページを閉じ、FXから足を洗うべきだ。
私はEURUSDの2000年〜2025年の25年分の相場データに対して「200万通り以上」のパラメータを総当たりで叩きつけた。計算量は数千億回。物理的な限界まで計算し尽くした結果、導き出された結論は一つだ。
MACDクロス戦略に、聖杯など1ミリも存在しない。
巷にあふれる「ゴールデンクロスで買い、デッドクロスで売り」「MACDは相場の転換点を示す」といった薄っぺらな格言は、25年という時間の重みと、統計学という名の審判の前に、無残な瓦礫と化した。
この記事では、私がCPUを焼き尽くして暴いたMACDの結果を公開する。
今回行う検証
今回はMACDのクロス戦略が本当に勝てるのか?といったテーマで検証していこうと思う。
方法は総当り検証だ。
シンプルに、MACDのゴールデンクロス(シグナル上抜け)でロング、デッドクロス(シグナル下抜け)でショートにエントリーして、指定された利確、損切りpipsでエグジットするというもの。
非常にシンプルだが、最も本質的でヘッジファンドなどでもこういった思想で利益をもたらしている。
『我々はデータの中にあるアノマリー(歪み)を探し、利用するのだ』 ーーJimSimons (Renaissance Technologies創業者)TEDのインタビューより引用
「投資とは科学的なプロセスであり、数千の仮設を厳密なデータ解析によって検証し続けることだ」 —— Two Sigma(公式レポート:The Innovation Equation)より引用
まずはよくある設定で検証
今回はどのように検証しているのかを実際に写真で見てもらおう。
以下は無料のバックテストツール、Delverの画面だ。
検証対象
-
銘柄・時間足: EURUSDの15分足
-
スプレッド: 0.7pips
-
スリッページとスワップ: 無効
-
レバレッジ: 25倍
-
リスク管理: 固定ロット(今回は運用の検証ではなく手法の検証であるため)
MACDの設定
基本的なMACDの設定として最も広く知られているのは、短期EMA 12、長期EMA 26、シグナル 9だ。
ゴールデンクロス(MACDラインがシグナルラインを上抜け)でロング、デッドクロス(MACDラインがシグナルラインを下抜け)でショートというシンプルな戦略だ。
利確・損切りはRR1の20pipsで固定した。
検証結果

絶望的な結果となり、破産してしまった。
-
25年間の累積PnL:-28,912pips: 23,149回のトレードを重ねた末、口座は壊滅した。
-
一貫した右肩下がり: 2000年から2025年まで、ほぼ一直線で資産が溶けていく。回復の兆しすら見えない。
-
スプレッドの残酷な累積: 23,000回以上のエントリーに対して0.7pipsを往復すれば、それだけで16,000pips以上が消える計算だ。
散々な結果となったが、これはあくまで一つの検証に過ぎない。
これらだけで結果を全部理解したつもりになるのは早計だ。
もしかしたらカーブフィッティングしているかもしれないのでここで検証したつもりになるのもよくない。
それでは更にじっくり検証してみよう。
Exit条件によるという仮説
先程の検証ではTP/SLともに20pipsで固定していたが、その指定が問題だったのではないか?
MACDはトレンドフォロー系のインジケータなのだから、利確を大きく損切りを小さく設定すれば損小利大が実現できるのではないか?
それとも短い時間軸でスキャルピング的に運用するほうが適しているのではないだろうか?
様々な仮説が生まれてくる。
次の項ではそれらの仮説を一斉に検証してみよう。
Pythonでの総当り検証
Delverでも検証して良かったのだが、今回は200万通り以上の検証になるのでPythonで実行してみようと思う。
検証の全容
-
エントリー条件 : MACDゴールデンクロスでロング、デッドクロスでショート
-
MACDパラメータ : 短期EMA 5〜20、長期EMA 20〜50、シグナル 5〜15(計2,178,000通り)
-
利確(TP): 5〜100pips(5pips刻み、20通り)
-
損切(SL): 5〜100pips(5pips刻み、20通り)
-
検証期間: 5年(EURUSD M15、2020年から2025年)→ 上位候補を25年で耐久テスト
-
総シミュレーション数: 2,178,000通り × 400 TP/SL組み合わせ
-
etc : スプレッドやリスクについては先程の条件と同条件
この設定であれば、短期EMAが12、長期EMAが26、シグナルが9の代わりに他のパラメータを試したらどうなるのか?TP/SLは5pips単位でどの組み合わせが最適か?といった疑問をすべて数値で答えることができる。
これであればExitでの検証の際のバイアスは消滅する。
検証結果
検証結果は驚くべき結果となった。
期待値
以下は期待値の分布を示したヒストグラムだ。

大部分の期待値がマイナスになっているが、少数、期待値がプラスになっているものがあるので期待できる。
89.0%がマイナス期待値、プラスは全体のわずか11.0%に過ぎない。

こちらは利確(TP)と損切り(SL)と期待値の関係をヒートマップで表したものだ。
見ての通り、ヒートマップの大部分は死を意味する青から紫に染まっている。
しかし、黄色に輝く期待値がプラスの場所があるではないか。
利確を65〜100pipsまで伸ばし、損切りも100pips近くに設定したエリアに、かすかな希望の光が灯っている。
MACDは損小利大ではなく、大きく取って大きく切るスタイルのほうが相性がいい可能性がある——そんな仮説が浮かび上がった。
だが、ここで騙されてはいけない。
次は私がエンジニアとして、この『黄金のエリア』が本物かどうか、更に残酷かつ粘着質な2つのテストを課すことにした。
ドローダウンの可視化
ドローダウンは検証において最も重視すべき要素の一つだ。
勝率が高くとも、ドローダウンの呪いによって、何度も損失を生み出したことは私が経験済みだ。
多くのトレーダーにもあるだろう。
しかし、以下のヒートマップを見てほしい

このマップの見方はシンプルだ。
-
黄色いエリア: ドローダウンが極めて大きい「デッドゾーン」
-
青いエリア: ドローダウンが低く抑えられている「安全地帯」
ここでもう一度下記の期待値のヒートマップを見てほしい。

マップの右下、期待値が最も高く輝いていたTP65〜100、SL80〜100のあの場所に、ドローダウンが沈静化している「青いスポット」が点在しているのがわかるだろうか?
「利益(期待値)は最大化され、かつリスク(ドローダウン)は最小化されている」
200万通りの総当り検証という狂気の果てに、ついに私は、数学的に裏付けられた「真の聖杯」を掴み取ってしまったのかもしれない。
この組み合わせでトレードをすれば、もはや負けることなど不可能なのではないか? 震える手で、私はこの「黄金の設定」をさらに過酷な25年間の耐久テストへと放り込んだ。
優秀な条件だけで25年分を検証
先程の結果から、MACDは非常に期待ができるインジケータのように考察することができた。
それでは、本当に私が先程言ったとおり、期待値が高くDDが少ない条件でトレードを行えば必ずプラスになるのか、25年分のデータを用いてトレードしてみた。
優秀な条件の定義
前述のグラフで解説したように、ヒートマップで青色と黄色が重なっているところを抽出しようと思うが、今回は更に正確に定義してみようと思う。
以下は実際に使用した優秀な条件を定義するPythonのプログラミングコードになるが、短く解説する。
取引回数フィルタ
df = df[df["trades"] >= MIN_TRADES_5Y]
こちらは条件が5年で200トレード以上の条件だけを抽出している。
それの理由は、取引数が少なく、たまたま当たっただけのカーブフィッティングを除外することと、期待値の統計的な安定性を担保することだ。
ここで再現性のない個体を除外することになる。
最大DDフィルタ
df = df[df["max_dd"] <= MAX_DD_PIPS_5Y]
これは5年間のトレードで、最大DDが5000pips以下の個体だけを抽出し、資金管理的に破綻する個体を排除している。
例えば、勝率は高くて2020年まではプロフィットファクターが1以上の個体だったとしても、その後DDが深くなりすぎている個体は実務上使いようがないので排除という考え方だ。
DDを取引数で正規化
dd_per_trade = df["max_dd"] / df["trades"]
スプレッドが原因で、取引が多い戦略ほどDDは増えやすい傾向にある。
しかしそれだと頻度の差による不公平が生じるので、今回は**MACDは勝てるのか?**というテーマに焦点を当てているためこのような措置を施した。
スコア計算
score = 期待値 - 0.30 × (最大DD / 取引数)
このように期待値を主軸とし、スコアで個体を評価することにした。
いわば、DDが大きい戦略は減点し、DDが小さく、同じ期待値なら高評価とし順位付けをしていく。
そしてスコア上位のみを採用した結果がこちらだ。

優秀条件での検証結果
解説するよりもまずは結果のグラフを見てもらおう。

このグラフの見方は、縦軸がPnL(利益と損失)で横軸がエグジット条件だ。
解説するまでもないが、大部分がマイナスとなっており、ほぼ全滅である。
わずかに+189、+625、+1167pipsというプラス個体が存在するが、25年という膨大な期間を考えれば実質ゼロに等しい。
しかし、これだけでMACDが使えないというのは少々ナンセンスである。
考察していこう。
なぜ優秀だった条件がマイナスになるのか?
このグラフはトレードと検証の本質を露呈させているといっても過言ではないだろう。
スプレッドによる損失が累積
5年間では0.7pipsを往復してもそこまでDDに影響しなかったが、25年ともなるとスプレッドの累積による損失は多大なものになるだろう。
TP65、SL100という設定で1トレードあたり1.4pipsのコストは、TP65に対して約2%のハンデを背負うことになる。
これが数千回積み重なれば、どれほど優秀な設定でも侵食されていくのは避けられない。
たまたま勝てていた。
5年間という、一見すると十分な期間に思えるが、それを25年というスパンで見れば一部でしかなかったのだ。
しかし、私はこう考え、仮定することのほうが生産的だと考えている。
それは、MACDは2020年〜2025年の間で優位性があったと。
2020年以降のトレンド相場——コロナショック後の急激な値動き、ウクライナ侵攻による大きなトレンド——これらの局面ではMACDのトレンドフォロー特性が機能した可能性がある。
これは検証において最大の成果物だろう。
まとめ
今回の検証でわかったことをまとめていこう。
-
MACDは極限られた相場環境でのみ機能する
-
MACD単体でトレードを行うと、長期では期待値がマイナスに収束する
-
スプレッドという取引コストの累積効果が、長期では致命的になる
-
89%のTP/SL組み合わせがマイナス期待値——MACDは「設定次第で勝てる」インジケータではない
以上のようなことがわかった。
しかし、重要なのはここからだ。
MACDは使えないインジケータではない
なぜなら今回の検証において、期待値がプラスの条件を特定期間で発見することができたからだ。
89%が期待値マイナスだったとしても、それだけでMACDを使えないという結論に至るのは短絡的すぎる。
しかし、MACD単体でトレードをし続けると資金が削られていく構造にあるのは事実だ。
同様の結論はボリンジャーバンドの25年検証でも得られた。テクニカル指標の多くは、単体では長期のマイナス収束という共通の宿命を抱えている。
MACDの優位性があるタイミングを把握する。
今回の記事で最も大切なのはここだ。
すなわち、『検証とはエッジ(優位性)を見つけるためにある』
今回MACDの優位性があるタイミングを大雑把にだが把握することができた。
これを
- トレンド相場でのみ使用する(ADXや移動平均でフィルタリング)
- 曜日でフィルタリングする
- 時間足を長くする(日足・4時間足でのMACDクロス)
- プライスアクションでフィルタリング
など、数えだしたらキリがないがその優位性を抽出することが検証の本質である。
今回の検証はなにもPythonでないとできないことはない。
完全無料の検証ツールはたくさん存在している。
今回使用した検証ツールのDelverはこういった総当りの検証と相性が素晴らしいが、自分のトレード思想に合致した検証ツールを選ぶのがベストなので、比較して検証することをオススメする。
オープンソース・リサーチ
検証の透明性と再現性を担保するため、今回の膨大なバックテストに使用したPythonスクリプトを公開している。データ処理のロジックから統計計算のプロセスに至るまで、そのすべてをGitHubで確認することが可能だ。