高頻度失敗作
1か月前くらいに試作したやつだからあんまり覚えてない。希望は見えたけど面倒すぎて掘ってないので良かったら試してみてねのノート。前に取ったスクショとまごころあふれる手書きの図からなんとなく感じ取ってほしい。
これはbitflyerのバックテストの図。希望の光が見えそうな図。これしか残ってなくて、ここからプログラムをいじったような気もするので、このnote通りにやっても再現できるかわからない。近い形にはなるかもしれない。
ワクワクドキドキ、一番気になるであろうロジックの部分
概要
bitflyerで配信される板ごとに取引を行う。そのままだとAPI制限に引っかかるのでなんとかする。板の配信速度は大体1秒に4回くらいだったと思うけど分からん。4回ということにしておく。
板ごとのタイムスタンプでohlcvを作成したやつを使う。あとはrichmanbtcさんのチュートリアルと同じことをする。執行はmagitoさんのmmを参考に指値でやる。
指値について詳しく
magitoさんのmmと同じ。大きな板の手前みたいなのは書いてたと思う。けど、具体的にどれくらい離して指値を指すかが書いてなかった。もしくは当時の自分が見落としていた。
ので、とりあえず板ごとに、上下で閾値を超えるまで値段ごとの板の量を足していき、閾値を超えたら、その一個手前の値段のところに指値を指すという感じでやってみた。閾値の説明は別でする。
指値の閾値
説明が難しいのでなんとなく感じ取ってほしいところ。そしてもっともガバガバなところ。
板ごとのタイムスタンプのohlcvについて、板60*4回分(大体1分間)について、板1回分(t-1~tの間)の平均の取引量をbuy,sell側でそれぞれ計算して、buy側で計算したものをsell側で、sell側で計算したものをbuy側で閾値として用いる。
逆にしたのは買ったらすぐ同じだけ売るような人がいっぱいいると思ったから。高頻度いっぱいいそう。実際はわからない。とにかくこれでやった。
特徴量
適当。とりあえず、best_ask(bid)_qty(bestのaskとbidの量)とか
best_ask_qty/best_bid_qty(ベストの板の厚さの比)とか
volumeをbuyとsellで分けたやつの直近n秒合計(10秒, 30秒, 60秒)とか
volume_buyをvolume_sellで割って比率出したやつとか
入れた。
スプレッドの大きさとか入れてもいいかもしれない。
分母には10**-16を足してバグらないようにした。この方法が正しいのかは不明。
データの作り方
手順1:板データを入手する。買うなり集めるなり。自分はbid側ask側それぞれ25までの値段と板の量のデータを使った。
手順2:約定履歴をなんとかして入手する。買うなり集めるなり。
手順3:合成する。resampleが使えないからnumpyで手動で作った。
1秒間に8回くらい配信されてないですか?見なかったことにする。このガバロジックでもバックテストでは勝っていたので問題ない。なお、バックテストに問題がある可能性は考慮していない。
問題点
フォワードで負けた。
理由
遅いと思う。計算に~0.05秒くらいかかってたと思う。
こんな感じで負けてそうな気がする。
改善案
・計算終了時刻を考慮してtimestampを変えてmodelを作る。
・一個先の板について予測する。
binanceのBUSDペアでもやってみた。
手数料マイナス!すごい!うれしい!バックテストでは勝てた!フォワードで負けた。
その他
自分はバックテストが面倒すぎて投げました。何かの参考にはなるかもしれない。上手くいったらこっそり教えてください。
終わり。
この記事が気に入ったらサポートをしてみませんか?