
仮想通貨自動売買ボットで儲ける方法5: 機械学習ボット
今回は機械学習ボットについて。
考え方
機械学習の予測精度の問題に帰着して、あとはkaggler界隈とかで流通しているノウハウを適用して、予測精度をあげる。という流れにするのがベストプラクティス。
よくあるのが、予測精度(R2とか)上がったけど逆にバックテスト成績落ちた。バックテスト成績上がったけど実戦投入したら負けた。
バリデーションやy設計やポジション計算をうまくやるとこれを回避できる。
バリデーション
バリデーションは、作った戦略がちゃんと機能するかどうかを確かめるためのものです。プログラミングで言うところのテストコードみたいなものです。バリデーションの必要性は、機械学習ボットに限りませんが、機械学習は強力で、下手なバリデーションだとかんたんに破られてしまうので、重要です。
yを考える
yは目的変数です。よくあるのは、10分後価格を予測するなどです。この場合、y = cl[t + 10] / cl[t] - 1とか、y = np.log(cl[t + 10] / cl[t])です。他にもいろいろ考えられます。成績への寄与が大きいです。
ポジション計算
重要なのは、yの予測精度が上がったときに、必ず(または、だいたい)、ボット成績も上がるようにポジション計算とか執行をすることです。そうなっていないと、yの予測工程での頑張りが無駄になります。
yの予測
ここはkaggleとかと同じです。特徴量エンジニアリングをしたり、アンサンブルしたり、ハイパーパラメータチューニングしたりして、性能をあげます。オススメ本
https://www.amazon.co.jp/dp/4297108437
重要なポイント
重要なのは以下の構造にして、yの予測精度の問題に帰着すること。
バリデーション: バックテスト成績が上がる、ならば、汎化性能(実戦成績)も上がる
yとポジション計算: yの予測精度が上がる、ならば、バックテスト成績が上がる
データの分け方
データ全体をtrainとtestに分けて、trainをさらにTimeSeriesSplitで分けています。trainをTimeSeriesSplitで分けたもののCVのスコアを改善するのがメインです。testはあまり使わずに最終確認で時々実行するだけです(たくさん実行するとデータを消費してしまうので)。
ファイナンス機械学習に書いてある方法(未来を使って過去を予測するとか)も参考になるかもしれません。