TL;DR
- Monte Carlo (MC) で「戦略 robust 性確認」をするとき、iid (独立同分布) sampling は危険
- 時間帯・曜日・market regime で edge は変動する。iid はこれを破壊して平均化する
- 解: block bootstrap、stratified sampling、joint sampling で時間構造を保つ
- backtest と MC の結果がよく一致したとき こそ、共通の前提が崩れている可能性を疑う
Hook
backtest の CAGR が +30%、Monte Carlo で 10,000 回シミュレートしたら平均 +28% で良く一致。「再現性ある robust な戦略だ」と判断して live 投入。1 ヶ月後、戦略は -3% で停止していた。
何が起きたか。MC が嘘をついたわけではない。MC の仮定が現実と合っていなかった だけだ。
単純 MC = iid Bootstrap という前提
戦略の robust 性を MC で評価する典型手順:
- backtest で得られた個別 trade のリターン列を保存
- そのリターン列から with replacement でランダム抽出
- N 個サンプリングして「シミュレートされた運用」のリターン分布を作る
- 何千回繰り返して期待値・分散・MaxDD を推定
この設計は「個別 trade のリターンが i.i.d. (独立同分布)」を仮定している。trade A と trade B が同じ確率分布から独立に出てくる、という仮定。
ところが現実の trading 結果は i.i.d. ではない。
なぜ trade は i.i.d. でないのか
具体的な依存性の例:
時間帯依存
- 朝の市場と夕方の市場で参加者構成が違う
- volatility regime が時間帯で異なる
- ベッティング系では「メイン G1 レース」と「平日午後の地方競馬」で edge の質も違う
曜日依存
- 月曜は週末ニュースを織り込み、変動が大きい
- 金曜は週末リスクで position 解消、動きが特殊
- ベッティング系では土日と平日でも参加者層・流動性が違う
Regime 依存
- low volatility 期と high volatility 期で edge が逆向きに動くことがある
- bull / bear / sideways で signal の解釈が変わる
- crash 中は normal time の relationship が崩れる
これらの依存性のもとで、edge の出方は 時間構造を持って分布 している。「いつ trade したか」が「どれくらいの edge があったか」と相関する。
iid sampling が破壊するもの
with replacement でランダム抽出すると、上記の時間構造はすべて 平均化されて消える。月曜の trade と金曜の trade、朝の trade と夜の trade、low vol regime の trade と high vol regime の trade、すべてが「同じ袋から引いたサンプル」として等価に扱われる。
結果として:
- 実際は「特定時間帯にしか edge が出ない」戦略
- iid MC の世界では「全時間帯で同じ edge が出る」と誤って evaluated
- 「robust」と判断して live 投入
- live では時間構造が復活し、edge の出る場面と出ない場面の差で結果がブレる
構造を保つ Block Bootstrap
Politis & Romano (1994) の Stationary Bootstrap や Künsch (1989) の Moving Block Bootstrap は、連続する k 個のサンプルをひと塊で resample する。
元データ: [a, b, c, d, e, f, g, h, i, j]
iid bootstrap: [c, h, b, j, a, ...] (順序破壊)
block bootstrap: [c, d, e, h, i, j, a, b, ...] (連続性保持)
block size k の選び方は研究テーマだが、典型的に k ~ N^(1/3) 程度。autocorrelation が強い系列ほど大きい k が必要。
Stratified Sampling — 時間帯/Regime ごとに分ける
別アプローチとして stratified sampling がある:
- trade を時間帯/曜日/regime ごとに分類
- 各層内で独立に resample
- 元と同じ「層別比率」を保ちつつ MC を回す
これで「現実の構成比」を保ったまま不確実性が評価できる。
結果の不一致が示すこと
backtest の数字と MC の数字を比べた時:
- 大きく一致する → iid 仮定が当てはまっているか、もしくは時間構造が backtest 期間で安定していた
- 乖離が大きい → iid 仮定が崩れている。時間構造の影響が大きい
実は前者が安心材料に見えて、危険側でもある。「同じ仮定下で同じ結果」は当然のこと。MC が backtest を確認しているのではなく、自分の仮定を確認している だけになりうる。
個人的経験
backtest で見えた CAGR を MC で再現したのに、live で出ない、という現象を経験した。原因を追ったら、戦略の edge は「特定時間帯」にしか発生しておらず、iid MC はその時間構造を破壊して edge を「均一に存在する」と誤って報告していた。
joint sample で時間軸を保持して MC を回し直したら、live により近い結果になった。MC の前提を疑うことが、過信を避ける鍵 だと学んだ。
「シミュレーションが backtest と一致した」のは「同じデータを同じ仮定で再描画した」だけで、現実保証ではない。
まとめ
- MC は iid 仮定を内包する
- 時間帯・曜日・regime 構造があれば iid sampling は結果を歪める
- block bootstrap / stratified sampling で構造保持
- backtest と MC の数値一致は「同じ仮定下で同じ結論」というだけで、安心材料にしかならない
次回は、Survivorship Bias — 「成功した起業家の習慣」「ヘッジファンドのリターン」、生存者しか見えていないデータ。
参考文献
- Politis, D.N., Romano, J.P. (1994). The Stationary Bootstrap. Journal of the American Statistical Association, 89(428), 1303-1313.
- Künsch, H.R. (1989). The Jackknife and the Bootstrap for General Stationary Observations. The Annals of Statistics, 17(3), 1217-1241.
- Lopez de Prado, M. (2018). Advances in Financial Machine Learning. Wiley. Ch. 13.
- Glasserman, P. (2003). Monte Carlo Methods in Financial Engineering. Springer.
- Wikipedia, “Monte Carlo method”.