Trading Bot開発日記 - 1
3 min read
こんにちは、無能です。
去年くらいずっとなんやかんややっているBotのお話です。
はじめに
今までバックテストは色々やっていましたがその際に色々試行錯誤してましたが結局、実際にBot作り手を始めたほうが話が早そうだと思い始めたのでやってみました。
バックテストする辛さ的な部分は、長い時間軸でバックテストするとテクニカル指数のパラメータを変化させた場合の結局試行で最大リターン結果にデータの偏りが起きてしまうのである程度の期間でOHLCVを切り出す必要があります。それがめんどくさいですね。
ファイル構造
去年からずっと単一ファイルmain.py
に書き殴っていましたがちょっと改善しました。
シグナル系がかなり冗長になってしまうのでそれぞれ切り出すようにしました。
実際には、signals
配下ではそれぞれ
bull/bear
、go/stop
を返すだけとしてその戻り値を受け取ったあとにmain.py
側での注文を実行を行うだけです。
- 売買
- bull/bearの戻り値が揃ったら方向性にエントリー
- 取引条件
- go/stopで判定しstopの戻り値が一つでも帰ってくればエントリー行わない
現状プロセス自体はデーモン化させずにcron
で動かしています。
注文量
一番の課題点ではありますが元本の何%で買うとしています。
この点ATRなどで可変式にしないと上昇後のレンジ相場入で結構資本を減らしてしまう要因になりかねません。
それ以外でも、どうにか一度資金が増えたあとのセーブする方法を模索中ですが根本的な解決になるものが出てきてません。
シグナルのモジュール化
一番やってよかった部分ではありますが、この仕組みのおかげで冗長になってしまうのは防げたことはかなり大きいです。
かつLLMに投げるときも一瞬で作成しやすい状況になっています。
例えば、ある程度サンプルコードを一個投げて最終的に戻り値として帰ってくる関数実装をするだけでいいのです。
課題点
- 注文量の動的調整
- 利益確定/損切りの動的調整
- 取引銘柄の選定
特に最後の取引銘柄選定に関しては短期でトレンドが出ている銘柄があるならばそれに乗っかるべきですが、それを検知して注文まで行うとなるとそもそも短期トレンドとして取引すべき銘柄とする判定条件をどうするべきかというのがまた頭を悩ませます。
言語に関してはそもそも速度重視のアビトラbotとは違うのでPython以外に移行する理由もないのですが、今回のような仕組みだと関数インポート自体の設計としてはGoが次点で選択肢としていいのかもしれませんね。
という訳で鞘取りbotとは違うアプローチとしてあまり取引bot自体を書いている人がいないので書いてみました。
それではまた。よろしくおねがいします。