【投資本紹介】Testing and Tuning Market Trading Systems|良いバックテストほど疑え

書評・読書メモ

今回は、ティモシー・マスターズの『Testing and Tuning Market Trading Systems: Algorithms in C++』を紹介します。

タイトルどおり、売買システムのテストとチューニングだけを扱う本です。手法の本ではありません。「このバックテスト、本当に信じていいの?」を、統計の道具を使って一つずつ確かめていく本です。

しかもコードはC++。正直、気軽に読める本ではありません。

「バックテストで勝てているんだから、あとはリアルで回すだけ」

そう思っている人ほど、一度は読んでおいたほうがいい一冊だと思います。

堅牢な自動取引システム構築の鉄則(NotebookLMで作成した本書のまとめ)
堅牢な自動取引システム構築の鉄則(NotebookLMで作成した本書のまとめ)

 

スライドや動画で深く理解したい方はこちら。

投資本紹介(24) – Testing and Tuning Market Trading System |WOLF
概要 こちらからどうぞ。 スライドまとめ

この本で一番おもしろかったこと

「良いバックテスト」を作るのは簡単で、それを疑う方が何倍も難しい、という話が最初から最後まで一貫していることです。

本書の第1章からいきなりこれです。

  • 収益率をパーセントで足すと、何もしないシステムでも利益が出ているように見える
  • ほぼランダムなシステムに、たった1%の未来情報を混ぜるだけで、見事な右肩上がりになる
  • 勝率90%でも期待値はゼロ、ということは普通にある

どれも「知ってるよ」と言いたくなる話ですが、実際の検証コードの中に紛れ込むと気づけないんですよね。

著者は、未来情報の混入(future leak)について「想像しているよりはるかに致命的だ」と書いています。僕もバックテストのバグで、Sharpeが1.9から-0.1まで落ちたことがあるので、ここは本当に身に染みますな。

本書の構成

全7章、ざっくりこんな流れ。

章 テーマ 中身
1 イントロダクション 対数収益率、ルール型とモデル型、未来情報の混入、勝率の罠
2 最適化の前に 定常性のチェック、指標のエントロピー
3 最適化 正則化つき線形モデル、非線形化、差分進化
4 最適化の後に バイアスの簡易推定、パラメータ感度曲線
5 将来性能の推定(1) IS/OOS、選択バイアス、入れ子ウォークフォワード
6 将来性能の推定(2) ブートストラップ信頼区間、ドローダウンの見積もり
7 パーミュテーション検定 利益を「実力・トレンド・学習バイアス」に分解

最適化そのもの(第3章)より、最適化の前と後の章の方が厚いのがこの本らしいところ。

パーセントで足すと、何もしなくても儲かって見える

100が110になって、また100に戻る。

パーセントで見ると、+10%と-9.1%。足すと、ほぼ+1%の利益が出たことになります。実際には1円も増えていないのに。

本書はここで、収益率は対数で計算しろと言っています。10→11でも100→110でも、対数の変化は同じ0.09531。値段の水準に左右されないので、長い期間の比較でも歪みません。

地味ですが、自分で書いた集計コードがパーセントで足していないか、一度は確認する価値があります。

勝率90%の罠

ランダムウォークの相場で、利確+1・損切り-9のルールで売買すると、10回中9回勝ちます。それでも期待値はゼロ。

著者の言葉がいいです。

「勝率を自慢する人がいたら、勝ちと負けの大きさを聞いてみろ」

そして、この話には続きがあります。

「小さな利益をたくさん積み、損切りは広め」に設計されたシステムを、トレーダーが途中で手動介入して壊してしまったエピソード。そのシステムは、たまに来る大きな負けまで含めて設計されていたわけです。

著者の結論は、「システムを信じる度胸がないなら、自動売買はやめておけ」。

これはEAを回している人には耳が痛い話だと思います。

勝率の罠と、1%の未来情報が作る偽の右肩上がり
勝率の罠と、1%の未来情報が作る偽の右肩上がり

相場は非定常。だから検定ではなく対策をする

第2章で面白かったのは、

「市場は本質的に非定常なので、非定常性の統計検定をしても意味がない」

と言い切っているところ。

検定で「定常かどうか」を判定するより、最初から非定常である前提で指標を作れ、という立場です。たとえば、

  • 価格そのものではなく、差分を使う
  • 長い期間と短い期間の値を引き算する
  • 中央値と四分位範囲で正規化する

といった加工で、指標が相場の水準に引きずられないようにします。

非定常性への3つの対策
非定常性への3つの対策

指標のエントロピーを見る

もう一つ、本書らしいのが指標のエントロピーをチェックする話。

指標の値が一部に固まっていたり、外れ値が少数あるだけで分布が潰れていたりすると、モデルはその指標からほとんど情報を取れません。

著者の目安は、正規化したエントロピーが0.5を下回ったら怪しい、0.1を下回ったら深刻。

対策としては、分布の両端だけを圧縮する(tail cleaning)、対数や平方根で変換する、といった前処理が紹介されています。

インジケーターを作るときに「値の分布」を見る人は意外と少ないので、ここはすぐに使える話です。

複雑なモデルより、正則化した線形モデル

第3章の主役は、意外にも線形モデルです。

著者が挙げる線形モデルの長所は3つ。

  • 過学習しにくい
  • 何をしているか理解できる
  • 学習が速い

そのうえで、Ridge(L2)とLasso(L1)を混ぜたエラスティックネットで係数を縮めます。αで2つの比率を、λで縮める強さを決め、λはクロスバリデーションで選ぶ、という流れ。

複雑さとIS/OOS誤差:線形モデルの利点
複雑さとIS/OOS誤差:線形モデルの利点
エラスティックネットのペナルティ(α=0でRidge、α=1でLasso)
エラスティックネットのペナルティ(α=0でRidge、α=1でLasso)

非線形にしたいときも、いきなりニューラルネットに行くのではなく、入力を多項式に展開して線形モデルに食わせる方法が紹介されています。「まず単純なもので勝負する」という姿勢は、僕もかなり共感します。

K分割交差検証でλを選ぶ
K分割交差検証でλを選ぶ

一番大事なのは選択バイアスの話

僕が一番読んでほしいのは第5章の選択バイアスです。

本書にはこんな寓話が出てきます。

  • 部門長のアグネスが、ジョンとフィルにそれぞれ売買システムを作らせる
  • ジョンのバックテストが圧倒的に良かったので、それを採用
  • 数か月後、資金はほぼ消えた。アグネスはクビ
  • 後任のメアリーは、直近1年分のデータを隠して2人に作り直させ、隠した1年で評価する

ここまでは「アウトオブサンプルで評価しよう」という、よくある話です。

ところが本書はさらに先に進みます。複数のシステムをOOSの成績で比べて一番良いものを選ぶと、その時点で再び運が混ざる。選んだ瞬間に、そのOOS成績はもう公平な見積もりではなくなる。

だから、選んだ後にもう一度、誰も触っていない期間で確かめる必要がある、と。

これは、僕がこのブログでいつも書いている「試行回数Nを数えてDSRで割り引く」と同じ問題です。何十個も試して一番良いものを持ってくれば、偶然でもそれなりの数字は出ます。

普通のウォークフォワードでも楽観的になる

もう一つ刺さったのがここ。

パラメータを選ぶ手続きそのものもウォークフォワードの中に入れないと、普通のウォークフォワードでも危険なほど楽観的な結果が出ることがある、と著者は書いています。

そこで出てくるのが入れ子のウォークフォワード。外側のループで「どのモデルを選ぶか」まで含めて検証し、内側のループで個々のモデルを学習します。

計算コストはかかりますが、「ウォークフォワードしたから大丈夫」は通用しない、という指摘は重いです。

p値0.01は「99%本物」ではない

第6章には、統計の話でよくある誤解が出てきます。

p値0.01というのは、「もしシステムが無価値なら、これほど(orこれ以上)良い結果が偶然出る確率は1%」という意味。

「このシステムが本物である確率は99%」という意味ではありません。

著者は犬の足の本数のたとえで説明しています。電話してくる相手が、実は犬の保護施設の人だったら、どれだけ「足が2本」と言われても答えは全部「犬」。p値は、前提の世界がどうなっているかを何も教えてくれない、ということです。

ドローダウンは思ったよりずっと深い

同じく第6章のドローダウンの話も重要です。

OOSのリターンをそのままブートストラップしてドローダウンを見積もると、壊滅的なドローダウンの確率を10倍以上、ほどほどのドローダウンでも2倍くらい過小評価することがある、と著者は書いています。

「OOSのリターンは公平な見本なんだから、並べ替えればドローダウンもわかるはず」という直感が、ここでは裏切られるわけです。

平均的なドローダウンではなく、次に来るかもしれない最悪のドローダウンを気にするなら、見積もりは保守的にしておいたほうがいい。

デイトレーダー・システムトレーダー向けTODO

本書を読んで、すぐに手元の検証に持ち込めることをまとめます。

1.収益率を対数で集計する

パーセントのまま足していないか確認。何もしないシステムが黒字に見えていたら、まずここを疑う。

2.未来情報の混入を疑う

1%混ざるだけで右肩上がりになります。良い数字が出たときほど、当日データや決済日の扱いを確認する。

3.勝率ではなく、勝ちと負けの大きさを見る

勝率が高いシステムほど、たまに来る大負けの大きさを確認する。

4.指標の分布とエントロピーを見る

外れ値に引っぱられて分布が潰れていないか。必要なら両端を圧縮してから使う。

5.まず正則化した線形モデルで試す

複雑なモデルに行く前に、単純なモデルでどこまで説明できるかを確認する。

6.試した回数を数え、選んだ後にもう一度確かめる

選択バイアスは、OOSで選んでも消えません。試行回数を記録し、最終候補は誰も触っていない期間で確認する。

7.パラメータ感度を見る

最適値から少しずらしたときに、成績がなだらかに落ちるなら安定している可能性が高い。一点だけ尖っているなら危ない。

8.ドローダウンは保守的に見積もる

ブートストラップの素朴な推定は過小評価になりがち。想定より深い最悪ケースを前提に資金管理する。

「勝てる手法」を探す本ではない

最初に書いたとおり、この本には「これで勝てる」という手法は出てきません。

デモ用のシステムも、売買コストを無視し、足の終値で約定する単純なものです。著者自身、それを実戦向けだとは言っていません。

この本がくれるのは、自分のバックテストを疑うための道具です。

  • 収益率の計算方法
  • 未来情報の混入
  • 指標の質
  • 過学習
  • 選択バイアス
  • 統計的な有意性の読み方
  • ドローダウンの見積もり

こうやって並べると、どれも「バックテストの数字が嘘をつく理由」なんですよね。

まとめ:良いバックテストほど疑え

『Testing and Tuning Market Trading Systems』は、システムトレードの「作り方」ではなく「確かめ方」の本です。

C++のコードが大量に載っていて、統計の前提知識もある程度いります。英語の本なので、読み通すのは楽ではありません。

それでも、

  • パーセントではなく対数で集計する
  • 勝率ではなく損益の大きさを見る
  • OOSで選んでも、選んだこと自体がバイアスになる
  • p値は「本物の確率」ではない
  • ドローダウンは思ったより深い

この5つだけでも、バックテストの見え方はかなり変わると思います。

EAやPine Scriptで検証している人、特に「バックテストは良いのに、リアルでは勝てない」経験がある人には、強くおすすめしたい一冊です。

コメント

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