Site Overlay

一般サラリーマンがテクニカル戦略の日中監視を検証する話 -日中監視・データ粒度編-

こんにちは。このシリーズでは、「天井・底を完璧に当てるのではなく、トレンドの60〜80%程度を機械的に取り続ければ、長期的にBuy & Holdより良い結果になるのか?」という問いを、BTC-USD/ETH-USDのMACD戦略で検証してきた過程を紹介しています。前回はペーパートレードとAzure Functionsによる自動化の話でした。今回は少し毛色を変えて、「監視・計算の頻度を上げれば戦略は良くなるのか」というテーマを扱います。

検証の出発点: 日次のストップロスは急落を見逃している

これまでのストップロス(apply_stop_loss)は、毎日の終値だけを見て「直近高値からstop_loss_pct(既定15%)以上下がったら手仕舞う」という判定をしていました。ですがこれは、1日の中で完結してしまう急落・急騰を原理的に捉えられません。以前の検証で、BTC-USDはstop_loss_pctを10〜25%のどこに設定してもtestの成績がほとんど変わらないという結果が出ていたのですが、これはそもそもストップロスがほとんど発動していないことを示唆していました。

そこで、「MACD本体(いつ買う・いつ売るというトレンド判定)は日次のまま変えず、価格の監視だけを1時間足・4時間足・6時間足・12時間足などで高頻度化した独立の安全弁を追加したら、どれくらい効果があるのか」を検証してみました。

本題1: 監視頻度を上げると、BTC-USDとETH-USDで結果が正反対になった

Binance公開APIから2017年8月の上場日以降、約9年分の1時間足データを取得し、監視間隔(1h/4h/6h/12h/24h)×stop_loss_pct(10%/15%)を全期間で比較しました。24h監視は既存の日次モデルとほぼ同じ挙動になります。

サイジングあり(本番構成: VolatilityTargetSizer target_vol=40%)のSharpe Ratio

Buy&Holdストップロスなし1h/15%6h/10%24h/15%(既存)
BTC-USD0.780.990.890.891.03
ETH-USD0.680.830.890.990.82

BTC-USDは監視をどれだけ高頻度化しても、既存の24h(日次)監視を上回ることができませんでした。9年・119回のトレードという十分なサンプルでこの傾向が崩れなかったため、BTC-USDへの高頻度監視の導入は見送りと確定させています。

一方でETH-USDは、高頻度監視によって日次よりSharpeが改善するケースが繰り返し見られました。サイジングなしの設定では1h/15%監視でSharpeが0.61→0.71、サイジングありの設定では6h/10%監視で0.83→0.99まで改善しています。同じロジックを2つの銘柄に適用しただけなのに、結果が正反対になるというのは、このシリーズで何度も出会ってきたパターンです。

本題2: 「有望」を鵜呑みにせず、Walk-forwardで検証し直す

ここで一旦立ち止まる必要があります。上の表は「全期間を通しで見て、どの監視間隔・stop_loss_pctが一番良かったか」を事後的に選んだだけの比較です。300通りの中からたまたま一番良かった1つを選ぶのと同じで、これだけでは本当に効果があるのか、たまたまこの9年間にフィットしただけなのか区別がつきません(このシリーズで繰り返し出てきたwinner’s curseの問題です)。

そこでETH-USDに絞り、学習期間3年・検証期間1年の窓をずらしながら(2017年8月〜2026年8月、6つの窓)、学習期間だけで機械的に監視間隔×stop_loss_pctを選び、一度も学習に使っていない検証期間で成績を確認する、Walk-forward検証を行いました。

構成walk-forward選定のOOS Sharpe24h/15%固定のOOS Sharpe
サイジングなし0.460.29
サイジングあり(本番構成)0.910.62

サイジングの有無どちらでも、学習期間だけで機械的に選んだ監視設定が、常に既存の日次モデル(24h/15%)を明確に上回りました。単発の全期間比較よりも強い形で、「ETH-USDには高頻度監視が構造的に効きうる」という見立てが裏付けられたことになります。

ただし手放しでは喜べません。6つの窓のうち2つでは、学習期間内でSharpeが最も良かった「1h監視」が選ばれたのですが、そのいずれも検証期間では大きく成績が悪化しました(例: ある窓では学習Sharpe 1.71の1h監視が選ばれ、検証Sharpeは0.12まで落ちています)。極端に高頻度な監視ほど、学習期間のノイズを拾いやすく過学習しやすいという、これまでのシリーズと同じ教訓がここでも再現されています。6つの窓のうち4つは6h監視に収束しており、実装するなら1hのような極端な間隔を外し、6h前後を軸にするのが無難そうです。

本題3: 監視ではなく、MACD本体を細かい足で計算し直したらどうなるか

ここまでは「ストップロスの監視頻度」だけを上げる話でしたが、もう一歩踏み込んで、MACD本体(トレンド判定・売買シグナルそのもの)を1h/6h/12h/24hの足で計算し直したら成績が変わるのかも検証しました。MACD(12,26,9)は日次を前提にしたパラメータなので、足を短くする際は実時間の長さ(約12日/26日/9日)を保つようバー数を換算しています。

銘柄walk-forward選定 Sharpe/CAGR常に24h固定 Sharpe/CAGR
BTC-USD0.89 / 22.46%0.77 / 19.51%
ETH-USD0.48 / 10.21%0.61 / 15.33%

全期間の単純比較では両銘柄とも「6h足が一番良い」という結果が出たのですが、これも事後的な観察に過ぎません。実際にtrain区間だけで足を機械的に選ぶWalk-forwardを通すと、BTC-USDはわずかな改善にとどまり、ETH-USDに至っては逆に悪化しました。ストップロス監視の高頻度化とは対照的に、「データそのものを細かく刻む」効果は確認できなかったことになります。銘柄間で結果が一致しない以上、既存の日次(24h)MACDを変える根拠にはならないと判断し、この方向性は見送りとしています。

検証で気をつけていること

  • 全期間1回きりの比較を最終結論にしない: 「6hが一番良かった」「ETH-USDに高頻度監視が効いた」という発見はどちらも、学習に使っていない期間で機械的に選定させるWalk-forwardにかけ直して初めて信頼できるかどうかを判断しています
  • 都合の良い結果だけを書かない: 今回はBTC-USDのストップロス高頻度化とデータ粒度の高頻度化、どちらも「見送り」という否定的な結論です。ETH-USDのストップロス監視だけが「有望」に格上げされ、それ以外は既存の日次モデルのままにしています
  • サンプルの少なさを過信しない: Walk-forwardといっても窓の数は6つ程度で、統計的な確度が高いとは言えません。「1hのような極端な間隔は過学習しやすい」という傾向は複数の検証で繰り返し出てきていますが、それでも結論はあくまで暫定的なものとして扱っています

次回予告

次回は「為替・レバレッジ編」として、GMOコインのJPY建てデータとyfinanceのUSD建てデータの乖離検証、MaxDD制約付きの再チューニング、レバレッジによるショートポジション追加を見送った経緯などを紹介する予定です。

最後まで読んでいただきありがとうございます。ご質問やコメントはお問い合わせからよろしくおねがいします。