クリプトHFTとか競プロとか

競技プログラミングや仮想通貨に関することを中心にブログを書いていきます.

仮想通貨高頻度取引ロジックが勝てないのは指標の影響なのか?

かの有名botterであるrichmanbtcさんが

仮想通貨自動売買ボットで儲ける方法5: 機械学習ボット|richmanbtc

で言及していた、

重要なのは以下の構造にして、yの予測精度の問題に帰着すること。

バリデーション: バックテスト成績が上がる、ならば、汎化性能(実戦成績)も上がる

yとポジション計算: yの予測精度が上がる、ならば、バックテスト成績が上がる

ということについて記事を書いていきます。

モチベーション

UKIさんの記事などにより、高頻度取引*1においては、価格予測を高い精度(リターンと指標の相関係数 > 0.05)で行うことができれば利益をあげられることは周知されましたが、MakerTakerモデルを採用している取引所でMarket Makingを行う場合指値の性質上不利約定がしやすく、成り行き注文などを利用すると手数料負けするなどの問題があります。

これらの問題などにより、優秀な指標を使ってうまく価格予測ができていたとしても不利約定に負けてしまうようでは、戦略として利益をあげられないことがあります。

今回、私の使っているマーケットメイクロジックが勝てない理由は執行戦略によるものなのではないかと考えたので、それについて検証していきます。

実験

実験1 完璧に価格予測できた場合 (simple)

一般的なロジックを用いても、100%*2の精度で未来の価格を予測できるようであれば、利益をあげられることを確認していきます。

バックテストする際の損益計算は自前で書くとほぼ100%バグらせてしまうので、BacktestAssistantを使って検証していきます。

使うロジックは

遅延があるときのmmbotの挙動 - キジトラのブログ

でのlinearを用いて発注サイズを調整しつつ、予測した(リークさせた)未来リターンを使って未来価格(futureprice)を算出したのち、現在の価格をpriceとして、  futureprice  \leq price + 1であれば売り指値を発注、  futureprice \geq price - 1であれば買い指値を発注 するロジックです。

改変した点としては、

検証データは2021/03/14のbybitのBTCUSDデータを使いました。

結果1

バックテスト結果1_損益グラフ

バックテスト結果1

想定のように、価格予測が100%正確にできていれば*3指値注文を使ったロジックでも利益をあげられることがわかりました。

しかし、現実においては未来の価格を予想することは簡単ではありません。

そこで、未来のリターンにノイズを載せたデータを使って同じストラテジーでバックテストすることを考えてみます。

実験2 未来リターンにノイズが載った場合

具体的には、リターンの標準偏差の10倍の標準偏差を持つ平均が0の正規分布に従うノイズを付加することにします。

指標 (未来リターン + ノイズ) と リターンの散布図(上図)はこうなります。

下図は指標のヒストグラムです。

指標とリターンの相関係数は 0.1程度と比較的高く、十分実用的な指標のはずです。

このノイズが載った指標から未来リターンを推測するには、何らかの方法を取る必要がありますが、今回はノイズが載っているので、RANSACRegressorを使います。

しかし、この指標を使って先ほどと同じストラテジーをバックテストすると、きれいに右肩下がりになってしまいます。

結果2

バックテスト結果2_損益グラフ

バックテスト結果2

この結果から、相関係数が0.1あるからといって、雑な執行戦略を採用していると余裕で焼かれることがわかりました。

さて、良い執行戦略とは何でしょうか?

(続きをいつか書きます)

*1:なかでも今回はmarket makingロジックについて

*2:非現実的な仮定

*3:そしてマーケットインパクトや遅延を無視できれば