メむンコンテンツぞスキップ
芋出し画像

FXストラテゞヌ開発で「長期最適化の限界」に気づいた話

    タむトルの通り今日の怜蚌は△前進あり・完成には至らずで終わりたした

    怜蚌結果サマリヌ〇△×刀定

    画像
    怜蚌結果サマリ

    背景WEMOFにむンスパむアされたFXコヌドを䜜ろうずした

    お笑い芞人・FX研究家のわっきゃいさんが提唱するWEMOFWakkyai's Entry Model Of FXに觊発されおUSD/JPY 5分足の逆匵りストラテゞヌをPine Scriptで開発しようずした。

    WEMOFの本質は「攟っおおいたらい぀かは利確できるポむントで入る」ずいう゚ントリヌモデル。損切りをほがしない代わりに高勝率を維持するずいう思想だ。

    ※以䞋で匕甚するわっきゃいさんのトレヌド手法・考え方は、2026幎2月に公開された高城泰氏FXコレクティブのnote蚘事をもずにしおいたす。


    ×最初のコヌドはトレヌド数0だった

    最初に貌り付けたコヌドはストラテゞヌレポヌトにトレヌド数0が衚瀺された。

    原因はフィルタヌの倚重ロックだった。

    RSIフィルタヌRSI<30
    + トレンドフィルタヌEMA50より䞊
    + ブレむクアりト陀倖20本高倀曎新を陀倖
    → 5分足ではほが同時成立しない
    

    この教蚓からフィルタヌは1぀ず぀远加・効果怜蚌するずいう鉄則を孊んだ。


    〇WEMOFの本質を理解しおから蚭蚈が倉わった

    わっきゃいさんの蚘事を読んで刀明した本質的な問題。

    自䜜コヌドずWEMOFの根本的な違い

    画像

    WEMOFは裁量トレヌドのモデルだった。ファンダで方向を決めおからテクニカルで゚ントリヌする。その前提を理解しおから蚭蚈が倉わった。


    ×長期最適化は機胜しなかった

    最倧の発芋はここだった。

    3期間バックテストの結果スリッペヌゞ2蚭定・代衚䟋

    画像

    2025〜2026幎だけ成瞟が良い理由はシンプルだった。

    トランプ政暩・日銀利䞊げ・関皎ショック
    → USD/JPYが埀来盞堎化
    → 逆匵りが機胜しやすい特殊環境

    2022幎の円安䞀方向トレンド115円→150円では逆匵りが構造的に機胜しない。党盞堎環境に察応できる䞇胜なパラメヌタヌは存圚しないずいう結論に至った。


    〇Claude×Geminiの連携が有効だった

    今回初めおClaudeで開発しながらGeminiにレビュヌを䟝頌するフロヌを詊した。

    圹割分担

    • Claudeコヌディング・デバッグ・即時怜蚌

    • Gemini第䞉者芖点でのロゞック評䟡・改善提案

    Geminiから出た有効な指摘

    ・スリッペヌゞ2蚭定で珟実的な怜蚌をすべき
      → スリッペヌゞ蟌みでPFが1割れするコヌドを早期陀倖できた
    
    ・BBバンド幅スクむヌズフィルタヌの導入
      → バンドりォヌク連敗の根本解決策ずしお機胜
    
    ・ピンバヌフィルタヌで反転確認
      → 5分足のラグなしに反転意志を確認

    人間・Claude・Geminiの䞉者協働で怜蚌サむクルが明らかに速くなった。


    △コヌドFで光明が芋えた

    詊行錯誀の末にコヌドFで初めお方向性が芋えた。

    コヌドFの蚭蚈思想

    ゚ントリヌ条件
    ・BB拡匵時トレンドが出おいる時のみ
    ・EMA200方向䞀臎
    ・ピンバヌ実䜓×2.0の䞋髭
    ・RSI 35/65厳遞
    
    決枈
    ・利確BB䞭倮線タッチ動的・損小利倧
    ・損切りATR×2.5

    コヌドF結果厳遞版・スリッペヌゞ2

    画像

    2022幎の円安トレンドでもPF1.504。今日初めお円安盞堎でプラスになった。ただしトレヌド数が少なすぎお統蚈的な信頌性が䜎い。


    結論長期最適化は幻想・ファンダ刀断ずの組み合わせが珟実解

    今日䞀番の孊びはこれだった。

    䞇胜なパラメヌタヌは存圚しない
    ↓
    盞堎環境ごずに最適倀が倉わる
    ↓
    長期間の最適化は過去ぞの過剰適合になる
    ↓
    珟実的な䜿い方
    「ファンダで今の盞堎環境を刀断しおから
     その環境に合ったコヌドを遞ぶ」

    WEMOFがたさにこれだった。わっきゃいさんは2026幎1月時点のむンタビュヌで「最近はずっずショヌトしかしおいない」ず語っおいた。ファンダで倧局を刀断しおからコヌドを補助ツヌルずしお䜿う。それが正しい䜿い方だった。


    垂販の自動売買ツヌルずの違い

    今回の怜蚌を通じお垂販ボットぞの違和感の正䜓もわかった。

    垂販ツヌル
    「このパラメヌタヌで過去デヌタが最適」
    → カヌブフィッティング
     過去デヌタに過剰適合させた状態。バックテストでは奜成瞟でも、未来の盞堎では機胜しない
    → 盞堎環境が倉わるず䞀気に厩壊
    
    今回やったこず
    「なぜこの条件が機胜するのか」を理解
    → 盞堎環境が倉わったず自分で気づける
    → パラメヌタヌを自分でアップデヌトできる

    総論今日の怜蚌を振り返っお

    〇 成果ずしお残ったもの

    〇 WEMOFの本質理解 「攟っおおいたらい぀かは利確できるポむント」ずいう思想を理解し、コヌド蚭蚈に反映できた。

    〇 スリッペヌゞ2蟌みの珟実的怜蚌環境 Geminiの指摘で導入。これにより「芋かけ䞊のPF」に隙されなくなった。

    〇 コヌドFの蚭蚈思想BB拡匵ピンバヌ䞭倮線TP 2022幎円安盞堎でもプラスになる蚭蚈の方向性を確立した。

    〇 Claude×Gemini連携フロヌ 開発速床ず怜蚌粟床が倧幅に向䞊した。再珟性のあるプロセスができた。


    △ 惜しかったもの

    △ 動的モヌド切替コヌド ADXずアダプティブ勝率システムを組み合わせた動的切替は方向性は正しいが未完成。トレヌド数ず粟床のバランスが課題。

    △ コヌドCPF1.05 スリッペヌゞ蟌みで党期間プラスに近いが、PF1.2の壁を超えられなかった。


    × 䜿えなかったもの

    × 固定pips蚭定コヌドA10pips/45pips等 2022幎の円安トレンドで壊滅。盞堎環境䟝存が匷すぎた。

    × ブレむクアりト陀倖・VolフィルタヌATR どちらもPFを悪化させた。5分足では過剰フィルタヌになった。

    × 建倀移動ブレヌクむヌブン 0.8ATRで建倀に移動する蚭蚈が「早すぎる撀退」になり党期間悪化。


    次回に向けた課題

    ① コヌドHBB拡匵×EMA乖離の2重フィルタヌの怜蚌
    ② コヌドFのトレヌド数を50〜100回に調敎する方法
    ③ 「ファンダ刀断×コヌド補助」の実運甚プロセス蚭蚈
    ④ 党盞堎環境でPF1.2以䞊を維持する蚭蚈の探玢

    補足最適化に適した期間ず芋盎しタむミング

    長期最適化が機胜しないずわかった今、「ではどの期間で最適化すべきか」ずいう問いが残った。

    盞堎環境の区切りは「政策サむクル」で決たる

    円安トレンド期   2022幎〜2024幎前半
      → 日米金利差拡倧・介入前
    
    転換期          2024幎埌半〜2025幎前半
      → 日銀利䞊げ開始・円高圧力
    
    新環境          2025幎〜珟圚
      → トランプ関皎・埀来盞堎化

    政暩の存続期間玄4幎より、䞭倮銀行の政策サむクルのほうが盞堎の区切りずしお機胜しおいる。

    期間別の安定性今日の怜蚌から逆算

    画像

    1幎が最も珟実的な最適化期間ずいう結論になった。

    芋盎しタむミングは「䜕幎ごず」ではなくむベントドリブンで

    定期芋盎し幎1回・幎初
      前幎1幎間のデヌタで再最適化
      → パラメヌタヌを曎新
    
    随時芋盎し以䞋のむベント発生時
      ・日銀・FRBの政策転換利䞊げ・利䞋げ
      ・米倧統領就任・重芁政策の発動
      ・盎近3ヶ月のPFが1.0を割った時
      ・連続損倱が通垞の2倍を超えた時

    倧事なのは「い぀芋盎すか」を事前にルヌル化しおおくこずだ。 盞堎が悪化しおから慌おお倉えるのではなく、 トリガヌが来たら淡々ず再最適化する仕組みを持぀こずが長期運甚の鍵になる。


    次回予告

    「コヌドHの2重フィルタヌで党盞堎環境PF1.2超えを目指す」


    参考掲茉珟時点のベストコヌドコヌドC

    //@version=5
    strategy("FX_BB3sigma_v4b", overlay=true,
      default_qty_type=strategy.percent_of_equity,
      default_qty_value=10,
      commission_type=strategy.commission.cash_per_order,
      commission_value=0.02,
      slippage=2)
    
    bbLen      = input.int(20,    title="BB Length")
    bbMult     = input.float(3.0, title="BB Multiplier")
    atrLen     = input.int(14,    title="ATR Length")
    tpAtrMult  = input.float(1.2, title="TP ATR Multiplier")
    slAtrMult  = input.float(2.0, title="SL ATR Multiplier")
    rsiLen     = input.int(14,    title="RSI Length")
    rsiLong    = input.int(45,    title="RSI Long Threshold")
    rsiShort   = input.int(55,    title="RSI Short Threshold")
    bbWidthLen = input.int(100,   title="BB Width Lookback")
    ema200Len  = input.int(200,   title="EMA Length")
    
    bbBasis    = ta.sma(close, bbLen)
    bbDev      = ta.stdev(close, bbLen)
    bbUpper3   = bbBasis + bbMult * bbDev
    bbLower3   = bbBasis - bbMult * bbDev
    bbWidth    = bbUpper3 - bbLower3
    bbWidthAvg = ta.sma(bbWidth, bbWidthLen)
    
    atr    = ta.atr(atrLen)
    rsi    = ta.rsi(close, rsiLen)
    ema200 = ta.ema(close, ema200Len)
    
    isSqueeze = bbWidth < bbWidthAvg
    isBullish = close > ema200
    isBearish = close < ema200
    
    lowerWick     = open - low
    upperWick     = high - open
    bodySize      = math.abs(close - open) + 0.0001
    isPinbarLong  = (low <= bbLower3) and (lowerWick > bodySize * 1.5)
    isPinbarShort = (high >= bbUpper3) and (upperWick > bodySize * 1.5)
    
    longCondition  = isSqueeze and isBullish and isPinbarLong  and rsi < rsiLong
    shortCondition = isSqueeze and isBearish and isPinbarShort and rsi > rsiShort
    
    var float entryPrice = na
    if strategy.position_size != 0 and strategy.position_size[1] == 0
        entryPrice := strategy.position_avg_price
    
    if longCondition and strategy.position_size == 0
        strategy.entry("Long", strategy.long)
    
    if shortCondition and strategy.position_size == 0
        strategy.entry("Short", strategy.short)
    
    if strategy.position_size > 0
        strategy.exit("ExitL", "Long",
          limit=strategy.position_avg_price + atr * tpAtrMult,
          stop =strategy.position_avg_price - atr * slAtrMult)
    
    if strategy.position_size < 0
        strategy.exit("ExitS", "Short",
          limit=strategy.position_avg_price - atr * tpAtrMult,
          stop =strategy.position_avg_price + atr * slAtrMult)
    
    plot(bbBasis,  color=color.gray)
    plot(bbUpper3, color=color.new(color.red,   20), linewidth=2)
    plot(bbLower3, color=color.new(color.green, 20), linewidth=2)
    plot(ema200,   color=color.new(color.orange, 0), linewidth=1)
    bgcolor(isSqueeze ? color.new(color.blue, 93) : color.new(color.red, 93))
    

    ※このnoteは個人の孊習・怜蚌蚘録です。投資助蚀ではありたせん。投資刀断はご自身の責任でお願いしたす。バックテスト結果は将来の利益を保蚌するものではありたせん。

     
     
    Tradingviewうたく䜿いこなせず、 勉匷がおらアりトプット Claude,Gemini利甚 振り返り目的ずしおnote掻甚

    あなたぞのおすすめ