Bot勉強会でBotをリアルタイム改良してみた【Python】
はじめに
昨日(2018/02/03)にくーるぜろさん(@zephel01_vc)主催のBot勉強会が行われました。自分は一般参加だったのですが、発表者の方が一人来られなかったということで、急遽発表することになりました笑
何も準備をしていなかったので、思いつきで喋っていたのですが、中身のある発表になっていたでしょうか?
参加者みなさんが得られるものがあったのならとてもうれしいです!
さて、発表会の後にはハンズオンとして、実際にpybitflyerを用いたAPI操作から、以前書いた記事のBotの実演、更にその場で改良をしてみました。
btc-market.hatenablog.com
行き当たりばったりの改良だったので、エラーを吐いたりとスムーズな実演をできなかったと反省してます。
そこで、この記事ではその改良を順を追って解説していこうと思います。
改良したソースコードの全文はこちらに上がっています。
github.com
エントリーを指値に
勉強会の発表では、"執行コスト"という問題について話されていました。これは、成行でエントリーした場合、スプレッド分損してしまい、某ジャスティスBotなどに利益を吸われてしまう要因になります。
そこで、エントリーを指値に変更しました。
引数としてprice = 0が渡された場合は成行でエントリーするようになっています。
未約定の注文をキャンセルする
エントリーを成行から指値に変更したということは、勿論約定しない可能性が生まれてきます。この注文を放置しておくと、どんどん注文がたまり、思わぬポジションを持ってしまう場合があります。
今回はサンプルということで、一定間隔ごとに全注文をキャンセルするようにしました。
クローズ時のポジションを管理する
以前作成したBotは成行エントリーのみで、約定しないということはありません。しかし、指値でエントリーするとなると、部分約定などにより、想定外の枚数を持ってしまうことがあります。
また、鯖の調子で正しく注文が通っていなかったりといった事態も考えられます。
そこで、クローズ注文を発注する際には、APIでポジションを取得してから行うようにしました。
これだけでは儲からない、更なる改良の必要性
ここまでがハンズオンで改良したものになります。エントリーを成行から指値に変更するだけで多くの処理の実装が必要でしたが、成行よりも有利なポジションを持てることが多くなったと思います。
しかし、これだけで儲かるほど甘くはありません。更なる改良を施していく必要があります。
具体的に何点か上げるとすれば
- 鯖が重い時にどうする?
- 利確と損切りは別処理に分けた方が良くない?
- bFがメンテになった時の処理は?
など色々です。
ここではその実装方法までは述べません。各自、頭を捻って考えてみてください!
discordで質問すれば答えてくれる方もいらっしゃると思います。
まとめ
いかがだったでしょうか?当日よりは分かりやすく記事を書いたつもりです。笑
Bot作成は日々の改良の積み重ねです。
まずは動かしてみて、だめなところを順順に直していくと良いBotが生まれると思います。
長々と読んでいただきありがとうございました!!
BTC : 3CxNTX7mgAvYRdmUnrv4NCDtgDEjsYxwmu
MONA : MFaih1kjd96TxvaW3NfhcAbRYJWaHyco3Y