証拠としての backtesting
この講座の六十本の終値の上でありふれた移動平均の規則を253通り探索すると、コスト差引後に一株あたり9.84ドルを稼ぐ勝者が出てくる。買い持ちの5.68に対して、7回の取引で、t統計量は3.65である。ここで、その同じ六十本ぶんの足から足への変化を、時間構造がひとつも生き残らないように並べ替え、ドリフトとボラティリティはそのままに保って、まったく同じ探索をもう一度走らせてみよう。そうした構造のない系列の52.5パーセントで、最良の規則は本物と少なくとも同じだけ買い持ちを上回り、77.2パーセントではそもそも買い持ちを上回る。結果は、何も入っていない市場が生み出すものの中央値より下にある。ひとつの規則の backtest は測定である。253のうち最良のものの backtest は、探索の測定である。
前提条件: レッスン62。規則が検証されうるより前に書かれていなければならない四部構成の一文のため。レッスン19。七回の取引が担えるものと担えないもののため。そしてレッスン11。このページが自分の載せるすべての数字から差し引く往復コストのため。
その主張を、本来意図されたとおりに述べる
backtesting を支持する論拠はよいものであり、それに何かをする前にきちんと述べておくに値する。規則とは命令の集まりである。履歴とは価格が何をしたかの記録である。だから命令を記録の上で走らせて、その規則がいくら稼いだはずかを知ることができる。これはごく普通の工学的試験であって、迷信ではない。負けていたなら、それを安く学んだことになる。勝っていたなら、少なくともその考えが目に見えて空っぽではないと確かめたことになる。まともな人間で backtest が未来を予測すると主張する者はいない。主張はもっと狭く、そして反論しようのない響きを持つ。backtest はその規則が機能したかどうかを教えてくれる、と。
それが実際に教えてくれるものはこうだ。この講座がすでに印刷した数字の上で見よう。六十本の終値と、ひとつの規則の族を取る。終値の速い移動平均が遅い移動平均を上抜けたら買い、下抜け直したらノーポジションに戻る。速い期間は2から12、遅い期間は3から30、遅いほうは常に速いほうより長い。これで253通りの設定になる。どんな尺度でも小さな探索であり、そのどれもが分別のある人が提案しえた規則である。
約定の取り決めは見た目より重いので、ページに書いておく。クロスは足が確定して初めて見えるので、シグナルは足 i の終値で読み、取引は足 i プラス1 の終値で行う。シグナルの出た足そのもので約定させるのは、インターネット上の backtest の半分を機能させている先読みであり、ここでは見かけ上の優位のおよそ三分の一に相当する。コストはスプレッドが1セント、片道の slippage が103近辺の価格に対して5ベーシスポイント、手数料が一株あたり半セントで、往復で一株あたり0.1230になる。最終足でまだ開いている建玉はそこで手仕舞う。
253通りをすべて走らせると、最良は2本の速い平均に対する5本の遅い平均である。取引は7回、一株あたり総額10.70、コスト差引後9.84。最初の終値で買って最後の終値で売る5.68に対してだ。勝率は7回中6回、平均取引は一本ぶんの標準偏差の0.910、そしてこの規則自身の取引記録に対するt統計量は3.65である。これらの数字はどれも、戦略に資金がつくたぐいの数字だ。
同じ探索が、何も入っていない市場で見つけるもの
その検定は安い。この系列を構成する59回の足から足への変化を取り、そこから59回を復元抽出で無作為に引き、同じ始値から順に並べる。できあがったものは元と同じドリフトと同じボラティリティを持ち、文字どおり同じ変化から組まれており、そして時間構造はまったく持たない。何かの順序に依存する規則に付け入られるものは、その中に何もない。順序が壊されているからだ。それをシード20260903から4,000回行い、それぞれの上で同じ253セルの探索を走らせる。
| 指標 | 値 |
|---|---|
| 253のうち最良、コスト差引前 | 10.70 |
| 253のうち最良、コスト差引後 | 9.84 |
| 買い持ち、コスト差引後 | 5.68 |
| 買い持ちに対する優位 | 4.16 |
| 最良セルが買い持ちを上回る構造なし系列 | 0.772 |
| 本物の優位を超える構造なし系列 | 0.525 |
構造がまるで入っていない系列の77.2パーセントで、253の規則のうち最良のものが買い持ちを上回る。52.5パーセントでは、本物の探索が見つけた4.16以上の差で上回る。測定された結果はその分布に対して単に見劣りするのではなく、その中央値より下に位置する。本物の終値の上で探索が何を見つけたにせよ、同じ規模の探索は、見つけるものが何もないデータの中で、半分より多くの場合にそれ以上を見つけるのである。
これが言っていないことに注意してほしい。規則が悪いとは言っていないし、系列に構造がないとも言っていない。言っているのは、9.84という数字が、どのみち9.84のような数字を生み出す手続きによって生み出されたということであり、だからその数字は市場についての証拠には使えない。これは測定についての言明であり、あなたが相手に取引している人のうちほとんど誰も自分の測定を確かめたことがない理由でもある。その確認は一晩と再標本抽出のループで済み、そして結果を取り上げることしかできないからだ。
このモジュールがレッスン62で始めた表に、一文の隣へ二列が加わる。backtest が返した値、ここではベンチマークに対する4.16。そして同じ探索が、何も入っていないデータの上で返した値、ここでは52.5パーセントの試行で4.16以上。二列目が三列目より余裕をもって大きくない行は何も稼いでいないし、この対はどちらか一方の数字だけよりも値打ちがある。片方だけでは大した意味を持たないからだ。
その前に来る二つの引き算
まずコストだ。これだけが確実な部分だからである。往復はここで一株あたり0.1230かかり、この系列の一本ぶんの標準偏差は1.5443だから、往復は1Rの0.0796にあたる。小さく聞こえるが、掛け算するとそうではなくなる。勝った規則は7回取引するので0.557Rをコストに払う。買い持ちは1回で0.0796Rを払う。頻繁に売買する規則は、どちらかが何かについて正しくなるより前に、およそ半Rの遅れから始まる。そして同じコストは二シグマのストップに対しては0.0398R、半シグマのストップに対しては0.1593Rになる。コストはセントで固定されているが、Rはそうではないからだ。
次にベンチマークで、これがほとんどいつも欠けている引き算である。最良のセルは9.84を作った。買い持ちは5.68を作った。規則の寄与は9.84ではなく4.16である。系列が上げたからであり、買い建てで時間を過ごすどんな規則も、何かを理解していようがいまいがその上げを拾うからだ。戦略自身の資産曲線を報告してベンチマークのそれを決して報告しない backtest は、二つの数字のうち大きいほうを隠している。
分割標本の検定に見えない行
これらすべてに対する定番の弁護は標本外検定であり、それは本当にやる値打ちがあるので、ここでやってみよう。最初の三十本の終値だけで最適化する。その窓での最良セルはまたしても2と5の組で、3回の取引で正味5.53を作る。買い持ちが0.82を失った区間の上でだ。何も差し出さなかった市場の中で規則が何かを見つけたように見える。パラメータを凍結し、何も触らず、最後の三十本の終値の上で走らせる。
| ウィンドウ | 最良の規則、正味 | 買い持ち、正味 | 取引数 |
|---|---|---|---|
| 足1から30、ここで最適化 | 5.53 | -0.82 | 3 |
| 足31から60、パラメータ凍結 | 4.29 | 6.88 | 5 |
通る。成績は5.53から4.29へ落ち、劣化は22パーセントであり、この分野のどのチェックリストも30パーセント未満は合格として扱う。この規則はチェックリストの言う意味ではカーブフィットされていなかった。見たことのないデータの上でも本当に働き続けたのである。
そして同じ未見の足の上で、何もしないことが6.88を作った。検証済みの規則は、それを正当化するはずだったまさにその窓で、ベンチマークに2.59負けた。しかも標本外検定はそれを報告できない。その中のどこにもベンチマークが入っていないからだ。検定は結果が繰り返すかを問う。結果がそもそも持つ値打ちがあったかは決して問わない。
同じ六十本の終値を、四つの誠実さの段階で
以下のどれもデータも規則も変えない。2と5のクロスはどの段階でも同じ規則であり、同じ六十本の終値の上を走っている。変わるのは何に対して測るかだけであり、どの段階も、大半の backtest がそこで止まる段階である。
第一段階で止まれば、規則は7回の取引で一株あたり10.70を作り、うち6回が勝ちだった。第二段階で止まれば、コストがそれを9.84にする。8パーセントの目減りであり、これは丁寧さのように感じられる。コストを引くページは慎重に見えるからだ。第三段階で止まれば、ベンチマークがそれを4.16にする。もう一度半分以下に切ったわけで、ここまで来れば公表された backtest の大半より先へ進んでいる。
第四段階は、大きさではなく判定を変える段階だ。変化を引き直し、探索をやり直すと、構造のない系列の52.5パーセントが、買い持ちを4.16以上で上回る最良セルを生み出す。規則自身のt統計量3.65は間違ってはいない。別の問いに答えているだけだ。それはこのセルの7回の取引がどれだけ確かにゼロから離れているかを測っており、他の252のセルがオーディションを受けて落とされたことを知る手立てを持たない。t統計量は勝者の内側で計算される。探索は外側で起きた。
backtest が測るのは、あなたが走らせた探索であって、それを走らせた市場ではない。
生き残るものは聞こえよりも多い。backtest は今でも規則を殺す。安く、そして決定的に。標本内でコスト差引前に負ける規則は死んでおり、それを一日の午後で知ることが、この技術の存在理由の大半である。単独でできないのは、規則を昇格させることだ。昇格にはベンチマークとコストと再標本抽出した帰無分布が要り、その帰無分布はコード一つのループである。
だから今夜、自分の規則の上で四つの段階すべてを、この順に走らせ、結果を取り上げた最初の段階で止まることだ。
これで片づかないこと
backtesting が機能しないということ。このページは、六十本の系列ひとつの上で、253セルの探索によって規則の族ひとつを検定した。本物のプログラムは何千本もの足と多数の商品を走り、そこではこのページが利用している標本ノイズははるかに小さい。探索による水増しの議論はどちらの大きさにも依存しないが、具体的な52.5パーセントは依存するし、より長い系列では同じ探索がそれに応じて小さい優位を作り出すだろう。ここには技術が無用だと示すものは何もない。示しているのは、結果が何かを意味するより前に何を生き延びねばならないかである。
再標本抽出の検定が正しい帰無分布だということ。復元抽出で変化を引くと時間構造がいちどきに壊れるので、これは規則が順序を利用しているかどうかの検定であり、それ以外の何ものでもない。同時にボラティリティのクラスタリングも壊す。これは実在し、クロス規則が実際に取引しうるものなので、その点で帰無分布は倒しやすすぎ、真の割合は52.5パーセントより下というより上だろう。ブロック・ブートストラップならその構造の一部を保てるし、それが誠実な次の一歩だが、このページはそれを走らせていない。
そのコストがあなたのものだということ。1セントのスプレッドと5ベーシスポイントの slippage は、小さいサイズでの流動的な商品を描いている。もっと幅の広いものではひどく楽観的であり、深い大型株の百株では悲観的である。このページのどの数字もその仮定とともに動き、7回取引する規則はベンチマークのおよそ七倍の速さで動く。それは買い持ちに有利に働く向きだ。
買い持ちが正しいベンチマークだということ。ここで正しいのは、規則が上げている系列の上で買いのみだからであり、空売りする規則に対しては、あるいは下げた区間に対しては誤りである。下げる系列の上では、買いのみの規則はどれも買い持ちに対して見劣りするが、その理由は規則とは何の関係もない。そして自分に都合のよいベンチマークを選ぶのは、都合のよい窓を選ぶのと同じ誤りである。ベンチマークは検定の前に選ばれねばならないが、このページはあとから選んだ。系列がすでに書かれていたからだ。
分割標本の結果が一般化するということ。半分あたり三十本ははるかに少なすぎ、標本内の窓は3回、標本外の窓は5回の取引しか含まず、これほど小さい標本では22パーセントという劣化の数字はほとんど情報を運ばない。それが支えている知見は、標本外検定が普段から悪い規則を通してしまうということではない。もっと狭く、もっと堅い知見、すなわち標本外検定はベンチマークに負ける規則を通しうるということであり、なぜならその中にベンチマークが入っていないからだ。この欠陥は構造的であり、標本の大きさにはまったく依存しない。
そして最も高くつく譲歩。このページは探索が生み出したはずの分を引けと言いながら、あなたが実際に行った探索についてそれをやる手立てを与えていない。253のセルは数えられる。コードに書かれたからだ。チャートの上で眺めて捨てた規則、二度動かして戻したパラメータ、最初に試して醜いからやめた商品 — それらも設定であり、記録されておらず、そしてほぼ確実に253より多い。このページの補正は、書き留められるだけ誠実だった探索の部分についてしか計算できない。レッスン64はその問題に正面から取り組み、水増しが数だけから前もって予測できることを見いだす。15,000通りの設定を156回の取引にわたって探索すれば、最良のセルは市場が何かをするより前に0.351Rの優位を示すのである。
練習問題
- 往復一回をRで値付けする。自分の商品のスプレッド、ブローカーの手数料、そして自分で擁護できる slippage の数字を取り、往復ぶんとして足し、自分が売買する時間軸での一本ぶんの標準偏差で割る。十分間で終わり、手元には数字がひとつ残る。取引一回のコストをRで表したもので、あなたがこれまで読んだどの backtest も省いていた金額である。
- ベンチマークを自分の規則の隣に置く。すでに売買している、あるいはすでに信じている規則を取り、いま計算したコストを差し引いて二百本の足の上で走らせ、同じ二百本の足で、最初の終値で買って最後の終値で売っていたらいくらになったかを計算する。三十分で終わり、手元には数字がひとつ残る。その二つの差であり、自分の資産曲線のうち規則が責任を負っている唯一の部分である。
- 帰無分布を走らせる。その同じ二百本の足の、足から足への変化を取り、二百回を復元抽出で無作為に引き、順に並べて、自分の探索まるごとを合成系列の上で走らせ直す。それを、書き留めたシードで千回行い、最良の結果が、本物の探索が見つけた分以上にベンチマークを上回る回数を数える。一晩で終わり、手元には数字がひとつ残る。その割合であり、何も入っていない市場があなたの見つけたものを渡してきたはずの確率である。
出典。 Halbert White、「A Reality Check for Data Snooping」(Econometrica、2000)、このレッスンが小さく走らせているブートストラップ手続きについて。そして、探索が判定されるべき相手は、ある規則の分布ではなく最良の規則の分布だという議論について。 Ryan Sullivan, Allan Timmermann と Halbert White、「Data-Snooping, Technical Trading Rule Performance, and the Bootstrap」(The Journal of Finance、1999)、同じ実験を、百年ぶんの日次データと数千の規則の上で本格的な規模で行ったものについて。このページはそれを六十本の足で真似たものである。 David H. Bailey, Jonathan M. Borwein, Marcos López de Prado と Qiji Jim Zhu「Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance」(Notices of the American Mathematical Society、2014)、試した設定の数だけで、見かけ上の優位がどれだけ現れるかを予測できるという結果について。それが次のレッスンの計算するものである。 Bradley Efron「Bootstrap Methods: Another Look at the Jackknife」(The Annals of Statistics、1979)、このレッスンの帰無分布がそこから組まれている再標本抽出の方法について。
教育目的のみ。 トレードには重大な損失リスクが伴います。金融助言ではありません。過去の実績は将来の結果を保証するものではありません。
💬 ディスカッション(コメント0件)
コメントを読み込んでいます…