計算結果が一致した。でも、正しかったのは一致しなかった方だった。
計算結果が一致した。でも、正しかったのは一致しなかった方だった。
自動売買の研究では、売買手法だけでなく、検証のやり方そのものも疑う必要があります。
第1回の記事では、コードが正常に動くことと、検証が正しいことは別だという話を書きました。
今回は、その続きです。
現在の研究では、計算をやり直して結果を照合する仕組みを取り入れています。
そして実際に、その照合から問題が見つかりました。
しかも、計算結果が一致しなかった銘柄の方が正しく、一致していた銘柄の方に問題があったのです。
結果を見る前に、ルールを決める
現在の研究では、検証を始める前に、何を調べるのか、どの条件で判断するのかを決めています。
いわゆる「事前登録」という考え方です。
研究をしていると、結果を見てから条件を変更したくなることがあります。
思ったような結果が出なければ、別の条件を試したくなる。
良い結果が出れば、その条件を採用したくなる。
しかし、結果を見ながら判断基準を変えてしまうと、最初からその仮説を検証していたのか、それとも良い結果に合わせて条件を選んだのか、区別が難しくなります。
だから、結果を見る前にルールを決めます。
自分に都合の良い結果が出たときほど、後から判断を変えられない仕組みが必要だと考えています。
もちろん、事前登録をしたからといって、正しい結果が保証されるわけではありません。
これは、判断の自由度を意図的に減らすための仕組みです。
後半のデータを開けるのは、探索全体で1回だけ
第1回では、データを前半と後半に分け、前半で選んだ条件を後半で選び直さないという考え方を紹介しました。
現在は、さらにルールを厳しくしています。
後半のデータを開けるのは、探索全体で1回だけ。
その前に候補を絞り込み、検証する条件を確定させます。
そして、最初に選んだ候補が後半の検証で不合格になっても、別の候補を繰り上げて同じ後半データで再挑戦することはしません。
一度結果を見てしまえば、その情報はもう知らなかったことにはできないからです。
時間をかけて探した候補が、最後の確認で否定されるかもしれない。
それでも、結果を見てから次々と候補を差し替えてしまえば、後半データを残していた意味が薄れてしまいます。
ここは、研究を進めるうえで特に厳しく守りたい部分です。
日経225だけ、計算結果が一致しなかった
今回、実際に起きた問題です。
計算をやり直して照合したところ、日経225だけ結果が一致しませんでした。
他の4銘柄は一致しています。
普通に考えれば、一致しなかった日経225の計算を疑いたくなります。
ところが、調べていくと意外なことが分かりました。
おかしかったのは日経225ではなく、一致していた残りの4銘柄の方でした。
自動売買では、利益確定や損切りの幅を決めるために、ATRという指標を使っています。
ATRは、値動きの大きさを測る指標です。
このATRの平均を計算する方法には、いくつか種類があります。
もともと決めていたルールは、単純平均(SMA)を使う方法でした。
日経225は、そのルールどおりに計算されていました。実際の運用で使う計算方法とも一致しています。
ところが、他の4銘柄では、途中からWilder式という別の計算方法が使われていました。
しかも、その変更は記録されていませんでした。
照合に使った現在のコードもWilder式だったため、同じ方法で計算されていた4銘柄の結果は一致しました。
一方、最初に決めたルールを守っていた日経225だけが一致しなかったのです。
つまり、結果が一致したからといって、正しいとは限らなかった。
同じ間違いをしていれば、計算結果は一致してしまいます。
今回の問題は、単純平均とWilder式のどちらが優れているかではありません。
事前に決めた計算方法が、記録されないまま変更されていたことです。
4銘柄は、決めていた計算方法で計算し直しました。数日分の計算をやり直すことになりましたが、間違った前提の上に結果を積み上げるよりはずっといいと考えています。
その後に続く計算も、すべてやり直しています。
以前の計算結果は消さずに、「無効」として残しています。
もし照合結果だけを見て、日経225の方を修正していたら、正しかった計算を間違った方に合わせてしまうところでした。
この経験から、計算結果の一致だけでなく、何を基準に正しさを判断するのかが重要だと改めて感じました。
45時間の計算が、再起動で消えた
計算方法だけでなく、計算結果の保存でも失敗しました。
約45時間かけて実行した計算結果が、Macの再起動によって消えてしまったのです。
原因は、保存場所でした。
結果が、再起動すると消えてしまう一時フォルダに保存されていました。
計算が間違っていたわけではありません。
しかし、結果が残らなければ、その計算を後から確認することも、研究の次の段階に使うこともできません。
この失敗を受けて、現在は約20分ごとに途中経過を保存し、処理が止まっても続きから再開できる仕組みに変更しました。
処理を途中で何度止めても、続きから再開して最後まで計算した結果が、止めずに計算した結果と完全に一致することも確かめています。
派手な改善ではありません。
ただ、長時間の検証を続けるには、こうした仕組みが欠かせないと感じています。
正しい結果を出す前に、間違いを発見できる仕組みを作る
以前は、良さそうなバックテスト結果が出ると、その売買手法が本当に有効なのかを疑っていました。
今も、その姿勢は変わりません。
ただ、疑う対象が増えました。
計算方法が途中で変わっていないか。
結果を見た後で、判断基準を変えていないか。
同じ条件で計算を再現できるか。
長時間の計算結果を確実に残せるか。
そして、間違いがあったとき、それを発見できる仕組みになっているか。
今回のATRの問題は、計算をやり直して照合しなければ、気づかないままだった可能性があります。
大切なのは、間違いを一度もしないことではなく、間違いを発見し、修正できる状態にしておくこと。
現在も、新しい売買手法の検証を続けています。
まだ結果は出ていません。
良い結果になるかもしれませんし、また仮説が否定されるかもしれません。
それでも、少なくとも以前より、結果を信用してよいか判断するための仕組みは増えました。
勝てる手法を探す研究を続ける中で、今はその土台となる検証環境も作り直しています。
良い結果が出ることより先に、その結果を信じてよい理由を持てるようにしたい。
今はそう考えています。