【FX自動売買】Williams %RとSMAを組み合わせたトレンドフォローロジックの徹底検証とカーブフィッティング対策

手法EA化

どうも!和菓子職人トレーダー潤奈です( ゚Д゚)

今回の記事では、Williams %R(WPR)と200期間のSMA(単純移動平均線)を組み合わせたトレンドフォローEAのロジック構成と、その性能を正しく評価するための検証設計について詳しく解説していきます。システムトレードにおいて最も重要なことは、単に過去のチャートで利益が出ることではなく、そのロジックが持つ優位性の源泉を正確に理解し、再現性を担保することにあります。
今回の戦略の核となるのは、トレンドの方向性を200期間のSMAで定義し、その上でWPRを用いた押し目買い・戻り売りのタイミングを計るという手法です。

具体的には、200期間のSMAよりも価格が上に位置している「上昇トレンド局面」において、WPRが-80という過熱感の閾値を下回った瞬間、一時的な下落の勢いが限界に達したと判断して買いエントリーを仕掛けます。逆に、価格が200期間のSMAよりも下に位置する「下降トレンド局面」では、WPRが-20を上回るポイントを、上昇の勢いが限界に達したタイミングと見なし、売りエントリーを実行します。
このロジックの狙いは、トレンドに逆らわずにトレードを行うという大原則を守りつつ、オシレーター系の指標であるWPRを利用して、価格の調整(押し目や戻り)が完了する地点を統計的に捉えることにあります。
単なる順張りとは異なり、トレンドの初期から中期にかけて発生する調整局面の「安値での買い」や「高値での売り」を自動で捕捉できる点が、このシステムの最大の特徴と言えるでしょう( ゚Д゚)。

システムトレーダーが最も恐れなければならないのは、特定の期間にだけ適合する過剰最適化、いわゆる「カーブフィッティング」です。
これを防ぐために、今回の検証では厳密な「イン・サンプル」期間と「アウト・オブ・サンプル」期間の分離を行いました。まず、イン・サンプル期間として2010年1月1日から2019年12月31日までの10年間を設定し、この期間内でEAのパラメータを最適化して最大限のパフォーマンスを引き出します。
しかし、この期間で結果が良いからといって、そのまま実運用に移行するのはあまりにも危険です。なぜなら、そのパラメータ設定は、この10年間の相場特有のボラティリティや癖に過剰に反応するように作られた「その期間だけの正解」である可能性があるからです。

そこで、2020年1月1日から2025年12月31日までの期間をアウト・オブ・サンプル、つまり「未知の検証期間」として完全に切り離しました。
この期間には、世界的な金融市場の変動や予期せぬ経済イベントが含まれています。最適化を行わずにこの期間を走らせることで、パラメータが特定の過去データに固執していないか、つまり「真の汎用的な優位性」を持っているかを確認します。もしイン・サンプルでは右肩上がりだったにも関わらず、アウト・オブ・サンプルで全く通用しないのであれば、それはカーブフィッティングが発生している動かぬ証拠です。
過去のテスト結果ばかりに目を奪われがちですが、未知の相場に対してもロジックが機能する根拠を、こうした分離検証によって証明しなければなりません( ゚Д゚)。

  1. 5通貨ペアのバックテスト検証結果
    1. USDJPY
    2. GBPJPY
    3. EURJPY
    4. EURUSD
    5. GBPUSD
  2. 200期間SMAフィルター+Williams %R押し目・戻りの数理的・相場構造的考察
  3. 中核ロジックコードの抜粋と技術解説
    1. エントリーシグナル判定関数 signalPrimary
    2. 技術解説:数理的意図と設計の背景
  4. 有料エリアで提供されるコンテンツのご案内
    1. 【有料特典①: パフォーマンスの出たパラメータ設定書】
    2. 【有料特典②: 4大構成セクションの徹底コード解説】
    3. 【有料特典③: コピペで動く完全版ソースコード(.mq4)の掲載】
  5. 【有料特典①】バックテスト再現用パラメータ設定書
    1. パラメータ選定の技術的補足
  6. 【有料特典②】MQL4コード徹底解説
    1. ①入力パラメータ・グローバル変数定義
      1. マジックナンバーとロット設定の重要性
      2. テイクプロフィット(TP)、ストップロス(SL)、トレーリングストップ
      3. インジケータ期間と時間足の構造的役割
    2. ②イベントハンドラ(基本骨格)
      1. OnInit():システム環境の構築と正規化処理
      2. OnDeinit():システムの解放と終了処理
      3. OnTick():ロジックの心臓部と制御フロー
    3. ③取引ロジック・判定関数
      1. signalPrimary():トレンドと過熱感の数理的結合
      2. riskGuard():スプレッドフィルターによるコスト抑制
    4. ④注文管理・補助関数
      1. openOrder():注文執行とガード処理の設計
      2. applyTrailingIfNeeded():利益を最大化する追従ロジック
      3. countPositions():ポジション集計の正確性
      4. adjustPoint() / adjustSlippage():ブローカー汎用性の担保
  7. 【有料特典③】メタエディター用コピペ動作検証用・完全版ソースコード(.mq4)の掲載

5通貨ペアのバックテスト検証結果

通貨ペア総純損益取引回数勝率プロフィットファクター (PF)期待利得最大ドローダウン相性判定
USDJPY725,400円189355.26%1.16383円142,512円 (11.32%)✨最適(本命)
GBPJPY1,911,123円242750.80%1.11787円1,081,559円 (30.59%)〇良好
EURJPY1,353,877円284354.84%1.10476円434,238円 (19.34%)△要改善
EURUSD296,581円147268.48%1.02201円1,600,616円 (59.55%)❌運用不可
GBPUSD-49,436円151761.37%0.99-33円1,512,361円 (63.24%)❌運用不可

USDJPY

USDJPYは、今回の検証において最も優れたパフォーマンスを示しました。
200期間のSMAとの乖離をWilliams %Rで補完する本ロジックにおいて、米ドル円特有の「トレンドの持続性」と「調整局面での戻りの浅さ」が非常に高い整合性を見せています。
最大ドローダウンが11%台に収まりつつ、安定して利益を積み上げている点は、リスク管理の観点からも極めて優秀です。
特に深夜帯から早朝にかけての特定の時間設定が機能しており、市場の流動性が安定している局面で押し目買い・戻り売りの精度が最大化されているのが特徴です。
ボラティリティが極端に急拡大しにくい通貨ペアだからこそ、SMAによるトレンド判定がダマシを回避するフィルターとして機能し、過度な損失を未然に防ぐことができています( ゚Д゚)。

USDJPY Optimization Result

GBPJPY

ポンド円は高いボラティリティを背景に、総純利益ではトップの数字を記録しました。
取引回数も2000回を超え、ロジックの優位性を市場のノイズに埋もれることなく発揮できています。
勝率は50%強と標準的ですが、プロフィットファクターが1.11を維持していることから、トレンド発生時にしっかりと利益を伸ばせていることが分かります。
ただし、最大ドローダウンが30%を超えている点には注意が必要です。ポンド特有の荒い動きは、本ロジックのストップロス設定を容易にヒットさせるリスクを孕んでいます。
このドローダウンを許容できる資金管理体制があれば、ポートフォリオの中核として高い収益源になることは間違いありません( ゚Д゚)。

GBPJPY Optimization Result

EURJPY

ユーロ円の結果は「一長一短」といえる内容です。
取引回数が最も多く、市場参加者が多い時間帯におけるチャンスを効率的に拾っていることは評価できます。一方で、プロフィットファクターは1.10とプラス域ではあるものの、利益の伸び悩みと損失の発生が交互に繰り返される展開が目立ちます。
調整局面を捉えるWPRのパラメータが、ユーロ円のやや粘り強いトレンド形成特性と完全には噛み合っていない可能性があり、さらなる最適化の余地を残しています。
現状のままでは大きな利益を期待するよりも、サブのロジックとして運用を検討すべき段階でしょう( ゚Д゚)。

EURJPY Optimization Result

EURUSD

EURUSDについては、運用不可と判断せざるを得ません。
最大ドローダウンが約60%に達しており、資産を大きく減らすリスクが非常に高いという結果になりました。勝率は高い数値を維持しているものの、一度の損失がこれまでの利益をすべて吹き飛ばす「コツコツドカン」の典型的な兆候が見て取れます。EURUSDのトレンドはUSDJPYやクロス円に比べてダマシが多く、SMAのトレンドフィルターだけではWPRのシグナル精度を十分に補完しきれていません。
この通貨ペア特有の緩やかなトレンド転換を、今回のロジック設定では捉えきれないことが統計的に証明された形です( ゚Д゚)。

EURUSD Optimization Result

GBPUSD

GBPUSDは、残念ながら全検証通貨ペアの中で唯一のマイナス収益となりました。
勝率は6割を超えていますが、期待利得がマイナスであることから、損小利大のコンセプトが全く機能していないことが明白です。
最大ドローダウンも60%を超えており、検証期間を通じて常にストレスのかかる運用環境でした。ポンドドルはテクニカルの根拠がしばしば急激に覆されることがあり、200期間のSMAを基準とした大まかなトレンド判定だけでは、ボラティリティの波に飲み込まれてしまうことがこの結果から読み取れます。
今回のロジックにおいては、GBPUSDでの運用は戦略的に避けるべきであるという結論に至りました( ゚Д゚)。

GBPUSD Optimization Result

200期間SMAフィルター+Williams %R押し目・戻りの数理的・相場構造的考察

今回の検証結果において、なぜ通貨ペアごとにこれほどのパフォーマンス格差が生じたのか。その核心は、各通貨ペアが持つ「トレンドの純度」と、採用した200期間のSMAという「長期移動平均線の追随性」との数学的な適合度にあります。
USDJPYやGBPJPYといった通貨ペアでは、2020年から2025年にかけてのパンデミック後の金融緩和から出口戦略、そして急激な歴史的円安へと至る過程で、極めて明確な一方向のトレンドが形成されました。この期間、200期間のSMAは強固なダイナミック・サポートおよびレジスタンスとして機能し続けました。
数学的に見れば、価格がSMAの上位に位置し続ける時間は圧倒的に長く、この条件下でWilliams %Rが-80を下回るという現象は、トレンドの勢いを一時的に削ぐ「健全な押し目」として定義することが可能です。
オシレーターが買われすぎ・売られすぎの限界値を記録することは、トレンドの終焉ではなく、むしろトレンドが持続する中でのボラティリティの収束を意味しており、そこをピンポイントで捉える今回のロジックは、確率論的に優位性の高い局面を効率よくサンプリングできていたと言えます( ゚Д゚)。

一方で、EURUSDやGBPUSDといった通貨ペアにおける破綻は、トレンドフィルターの構造的な限界を如実に示しています。
これらのペアはクロス円と比較して、2020年以降の相場環境において「レンジ」と「トレンド」の境界が曖昧な期間が長く、200期間のSMA自体が水平に近い状態になる「SMAの横ばい化」が頻発しました。
この数理的な構造変化が発生すると、価格はSMAを上下に跨ぐ往復運動を繰り返し、ロジックの判定基準である「価格とSMAの相対位置」が短期間で反転し続けます。
これにより、エントリーシグナルは発生しても、その直後にトレンドの定義が崩れるという「往復ビンタ」の状態を誘発しました。
さらに、GBPUSDなどにおいて勝率が60%を超えているにもかかわらずPFが1を下回ったのは、トレンドが明確でない期間に、トレンドフォロワー特有の大きなストップロスを狩るような微細なノイズがWilliams %Rの閾値に抵触し続けたためです。
オシレーター単体では捉えきれないボラティリティの不規則性が、損益の期待値を決定的に悪化させる要因となりました( ゚Д゚)。

本ロジックの設計思想である「SMAによるトレンド定義」と「Williams %Rによるエントリータイミングの最適化」を総括すると、このEAはボラティリティが一定以上の勢いを持って継続する「トレンド相場」の捕捉に特化したモデルであることが証明されました。
特に、歴史的な円安トレンドにおいて、円を絡めた通貨ペアで高い収益性を発揮した事実は、長期移動平均線の持つ「相場のモメンタムを平滑化して捉える」という数理的特性が、市場の大きな潮流と合致していたことを物語っています。
逆に言えば、200期間のSMAという「期間の長いフィルター」は、市場が構造的に変化し、トレンドが小刻みに転換する通貨ペアに対しては、その感応度の低さが致命的な遅行性となって現れるのです。EURUSDやGBPUSDでの惨敗は、ロジックが悪いのではなく、採用したフィルタリング指標のパラメータがその通貨ペアの市場構造の「周期」と一致していなかったという事実に他なりません。
今後の開発においては、通貨ペアごとのボラティリティATR(平均真のレンジ)に基づいた動的なフィルターの導入や、SMAの期間を適応的に変化させる適応型アルゴリズムの実装が、さらなるパフォーマンス向上への道筋となるとは思います。

中核ロジックコードの抜粋と技術解説

今回検証に使用したEAの核心部分であるエントリーロジックの判定関数を公開します。
このコードはMQL4で記述されており、トレンドフォロー戦略の骨子となる「SMAによる環境認識」と「WPRによる仕掛けタイミング」をいかに組み合わせるかを論理的に実装したものです( ゚Д゚)。

エントリーシグナル判定関数 signalPrimary

技術解説:数理的意図と設計の背景

このロジックの優位性は、全く異なる周期性を持つ2つの指標を掛け合わせることで「トレンド相場の押し目」を統計的に特定しようとする点にあります。
まず、iMAで算出される200期間のSMAは、相場の長期的なモメンタムを表す指標です。
価格がこのラインより上にあるという事実は、数学的に言えば、期間200の平均コストよりも市場参加者の期待値が高いことを示唆しており、構造的な「買い優勢」の状態を定義しています。
このフィルターにより、トレンドに逆らった無謀な逆張りを物理的に排除することが可能となります( ゚Д゚)。

次に採用した iWPR(Williams %R)は、価格の終値が直近の最高値・最安値のレンジ内でどの位置にあるかを示す、極めて反応の早いオシレーターです。
通常、-80を下回る領域は「売られすぎ」と見なされますが、これを単なる逆張りシグナルとして使うと、強い下降トレンドではさらなる下落の連鎖(ナイフキャッチ)を招きます。
しかし、ここに「価格がSMAより上にあること」という絶対条件を課すことで、数理的な意味合いが「下降トレンド中の安値更新」から「上昇トレンドにおける一時的な調整」へと劇的に変化するのです。

このロジックの深淵は、price > ma という長期的な正のバイアスがある環境下でのみ、wpr < -80 という「短期的なパニック的売り」をトリガーとして機能させている点にあります。
つまり、長期トレンドは維持されているものの、短期的な投資家心理が一時的に極限まで冷え込んだ瞬間、すなわちトレンド回帰のエネルギーが最も蓄積されたポイントを狙い撃つ設計になっているわけです。この手法は、単なる順張りよりもエントリータイミングが洗練されるため、ストップロスまでの距離を最適化でき、結果としてリスク・リワード比の改善を狙える構造となっているのです( ゚Д゚)。

さらに、コード内で iWPRiMA の計算に 1 というシフト値を指定している点にも注目してください。
これは現在の足(0番目の足)ではなく、確定した直前の足(1番目の足)を用いて条件を判定するという開発上の鉄則です。
リアルタイムで価格が激しく変動する中で判定を行うと、シグナルの点滅(ダマシ)が頻発し、過剰なエントリーを招きます。
確定足を待つことで、検証結果と実運用の乖離を最小限に抑えることができ、これが長期にわたる安定したパフォーマンスを支える技術的な裏付けとなります( ゚Д゚)。

有料エリアで提供されるコンテンツのご案内

ここまで、WPRと200期間SMAを組み合わせたトレンドフォローロジックの理論的背景、ならびに検証を通じた相場構造の分析について解説してきました。
ここまでの内容で、このロジックがなぜ機能するのか、そしてどのような相場環境で優位性が生まれるのかという「技術的な本質」は十分に理解していただけたはずです。
有料エリアでは、コード全体の解説を提供します( ゚Д゚)。

【有料特典①: パフォーマンスの出たパラメータ設定書】

どれだけ精緻なロジックを組んでも、パラメータの調整一つでEAの命運は分かれます。
本特典では、USDJPYをはじめとする通貨ペアで、最大ドローダウンを抑制しつつ純利益を最大化することに成功した具体的なパラメータを公開します。
tpPipsslPips、そしてtrailingPipsの最適な組み合わせや、maPeriodが200で固定された中でどのように各通貨のボラティリティを許容したのかという数値を公開します。
この数値は、特定の期間だけでなく、2020年から2025年までの激動の相場においても通用した汎用性の高い設定であり、あなたのMT4に数値を入力するだけで、私の検証結果と全く同じ戦略を再現することが可能になります( ゚Д゚)。

【有料特典②: 4大構成セクションの徹底コード解説】

提供するEAのソースコードを、単に「コピペして終わり」にしないための技術講義です。
①EAの設定値を保持するグローバル変数の管理手法、②相場の変化を捉えるイベントハンドラの設計、③トレンド判定とオシレーター判定を統合した取引ロジックの詳細構造、そして④予期せぬエラーを防ぎ確実に注文を執行するための注文管理関数という、EAを形作る「4つの主要セクション」を徹底的に分解解説します。
なぜこの順番で処理を記述するのか、なぜ変数のスコープをそのように定義するのかといった、MQL4開発者として避けては通れない「バグを排除し堅牢性を高めるコーディングの流儀」についてまとめました( ゚Д゚)。

【有料特典③: コピペで動く完全版ソースコード(.mq4)の掲載】

そして最後は、メタエディターに貼り付けるだけで即座にコンパイルが完了する、完成版の完全ソースコードです。
本ロジックの根幹である「200期間SMAでの環境認識」と「WPRによる押し目・戻りの高精度捕捉」が、すべてのエラー処理や注文管理ロジックと共に統合されています。
自分で一からコードを書いて環境を構築する手間を省き、すぐにバックテスト環境で自分の目を使って検証を行いたい方にとって、これは最も価値のある資産となるはずです。
この有料エリアの情報を手に入れることは、システムトレードにおける学習コストを大幅に短縮できると思います( ゚Д゚)。

コメント

タイトルとURLをコピーしました