「たまたま出た利益か?」…編み出した2つの検証方法
■試行錯誤と葛藤の日々
ストラテジーの研究を始めてわりと早い段階で、私は大きな気づきを得ました。
統計では、ある現象(例えば利益が出た)が発生した時、それが偶然に出たものか、必然的に意味があって出た数値なのかを判断する値を「p値」と言います。
p値が高いと利益が出ても「本当にストラテジーの実力でそうなったのか」確証が持てません。そこで検証対象の時間を5つの区間に分けて検証を実施することで、そのストラテジーが安定して稼げるものか否かをテストするのです。私はこれをp‐mean法と名付けました。
また、Kaggle(Googleの下部組織)で有名な手法、Adversarial Varidationをヒントに、時系列予測での汎化性能を上げる手法も考えました。簡単に言うと、特徴量から「時刻を予測できないような特徴量を選択する」という手法です。特徴量の分布が時刻に依存しづらくなるので、実運用時の特徴量分布が機械学習時の分布と近くなり、汎化性能が上がることが期待できます。
この2つの手法は、現在まで継続して使っています。私は研究を開始してからたった3日で、重要な気づきを2つも得ていたことになります。
さらに試行錯誤は続きました。フォワードテスト※1ではバックテスト※2との乖離のみを検証すると、検証期間が短くて済むことがわかりました。
※1 バックテスト後、将来の値動きをテストすること
※2 過去のテストデータもとに行うシュミレーション
フォワードテストはバックテストの未知パラメータの推定にも使えます。例えば、フォワードテストの乖離を取引回数で割って、売買コストとしてバックテストに組み込めばいいのです。
研究開始から2週間、システムトレードでは①リークのないバリデーション、②相関係数の改善、③シャープレシオの改善、④ミスなく実装することが重要であるとわかりましたが、実際にはまだ利益を出すには至っていません。
Jupyterでのバックテストではうまく行くのですが、取引所に移植して現実の相場で運用するとその通りにはいきません。その原因がどこにあるのかを探し、悩む日々が続きました。