実装したモデルがバックテスト結果と異なることはしばしばあります。
スリッページや手数料、信用取引金利、そしてマーケットインパクトを含めると結構大きな数字となります。
また、バックテスト条件・環境と取引環境が異なることも一つの原因です。
実は私はこの2022年1月においては実装したモデルと取引結果が大きく異なり、バグ出しに費やす1か月でした。細かなミスが大きな違いを生むこの世界で、同士が無駄な時間を過ごさないためにも、実装モデルにおけるミスの炙り出したプロセスについて書いてゆこうと思います。
1.使っているデータはバックテストと同一か
一番先に考える話です。そもそも、バックテストでは225インデックスの値そのものでバックテストを実施していたけど、実装したモデルではETFだった、先物だったという話があります。初期分析段階ではインデックス値そのものを使用していても問題ありませんが、バックテストでは必ず、実装モデルと同じにしたいものです。必ずや剥離が生じます。
ましてや、自動車業界の特徴をあぶりだす為に完成車メーカーインデックスで分析・バックテスト後、個別株で実装しました、という話は限りなくNGかと思います。
ちなみに、インデックスETFは寄付き価格自体が各ETFで異なりますので要注意です。ベアインデックスだとなおさらです。
そのほか、同じようで同じでないデータは沢山ありますので、データの同一性は意識をしておく必要があります。
2.執行時間と判断データの時間差はバックテストと同一か
執行時と判断データを入手する時間は同一ではありません。どんなすごいPC・回線をお持ちでも同一にはできないはずです。これを考慮したバックテストにすることは必要不可欠です。
サラリーマンだとザラ場に張り付くことは無理なので、寄り引けトレードなどの手法を取っているかたが多いと思いますが、さらに分解能を上げてトレードする際には注意が必要です。
3.バックテストに生存者バイアスはかかってないか
時に長期のバックテストをする際に、株式銘柄を選定するときがあります。戦略にもよりますが、小型株やマザーズや新興市場で取引を想定するとき、過去に上場廃止になった株は数知れず、それらの影響を加味しないバックテストは生存者バイアスがかかっていることになります。
もっとわかりやすい表現をすると、TOPIX30を選定してバックテストをするときに、東京電力や東芝の過去における存在はどう考えますか?ということです。避けて通れない命題です。
株でシステムトレードをしている際、上記のような銘柄が出現した時の対応を事前に決めておく必要もあることを覚えておいてください。私は即、取引停止にします。不正会計発覚時、決算発表延期、カリスマ経営者(孫正義のような)の悲報などいろいろなケースを想定しておく必要があります。
4.実装モデルの計算プログラムはバックテストと同じ計算プログラムを使用しているか
これは私個人の経験で、辛い辛い経験あります。
具体的にいうと、実装はExcel・バックテストはPythonでやっているのですが、この二つでは基本的な関数のデフォルト値が違うもの多いです。たとえば、曜日の出力でもPythonとExcelでは違いますし、rank関数でもデフォルトでは昇順と降順で異なります。また、Excelで米国株価を取得できますが、yahoo financeとティッカーが微妙に異なることもあるので、PythonのYfinanceから入手した情報と異なる可能性があり、要注意なのです。
ソフトウェア間で必ず異なる部分があるので、その炙り出しは必ず必要です。
5.信頼出来るところからのデータソースであるか
僕は4本値での高値・安値を信用していません。
昔、複数のデータソースで検証しましたが、皆異なっていたのです。
個人的によく使うストキャスティクス%Kなるテクニカル指標がありますが、そこで使う高値・安値はtick情報から作り出したものです。
今はどうかはわかりませんが、これを改善するだけで、リターンが良くなったという話は聞きますので、信頼できるところからTICK情報を購入し、自分で作り出すことを推奨いたします。
6.そもそもちゃんと実装モデルにデータが適切に入力されているか
サラリーマンシステムトレード川柳があれば、私はこのネタでいくつか唄えます。
とある部分だけデータ更新がエラーで1か月実施されていなかったという話は私の中ではメジャーです。ずっとあるデータだけ同じ入力でトレードしていたのです。勝っていたとしても妙に悲しい話になります。
また、複数の株式銘柄を扱っていると、ストップ高、ストップ安の影響を受ける事はしばしばです。これについてはバックテスト上でもですが、実装システムにも組み込んでおく必要があります。この作業はしばしば面倒ではありますが。
7.最後に
失敗は成功の母ですが、この世界では勉強料が非常に高いので私が経験したような話は、このブログを読んでいる方は経験しなくても良いです。
実は上記のミスで私はこれまで車が買えるぐらい損失を出しています。
それぐらい仮想と現実は異なるものです。