BTCのBotトレードをしてみよう

取引所はBybit、理由は
①記事がいっぱい見つかったので、真似して出来そうだから
②手数料が安いから 一時期より高くなったみたいだけど
まあ0.06%なら往復でも0.12%で十分取れるのではないかという予想

Bybitデリバティブ手数料maker:0.01%
Bybitデリバティブ手数料taker:0.06%
Bybit現物手数料:0.10%
Bybit現物手数料:0.10%

考えるべき観点
①運用額
②執行ルール
③エントリーロジック、クローズロジック
④時間足
⑤サーバー
⑥言語
⑦運用するか決める検証方法

①運用額

まずはなくなって許せる金額にすべき
月1万円
月末1万円以上あった場合は半額を納税用に出金
半額にするのは最高税率かかった場合に55%持ってかれるから、半額だしとけば一旦は問題ないだろうという考え

②執行ルール

うまくいかなくなった時に永遠にエントリーし続けるのは不毛なので、5連敗で一旦クローズ
勝率50%なら3%くらいで起こるけど、問題ないなら手動で起動すれば良い
バルサラの破産確率によるとリスクリワード2、勝率50%、資金率10%(1000円)
Bybitの最低取引量は0.000048BTCなので、仮に1BTC=600万円になっても288円から取引でき資金率クリア
目標でいくとリスクリワード3、勝率50%、資金率10%で行きたいところ
損切り幅一旦ベンチマークになる2%

③エントリーロジック、クローズロジック

検証してみないとわからないけど、土日取引からのリバーサルとか、レンジを仮定した高値安値逆張り、ヒゲキャッチ、シンプルにドンチャン、OIとかからくそポジ出しに行くとか興味ある
検証して良いやつを採用する

④時間足

時間足1本あたりの値幅から手数料差っ引いたものをポジションあたりの取れる値幅とし、時間足に比例してポジションが取れるとした時、1Hが一番効率良さそうだったから1H

⑤サーバー

自動化して動かすのに何が良いかよくわからないけど、BTC bot サーバーで調べた時に出てくるのが
VPS
 WebARENA、さくらインターネット、お名前.com、GMO、AWS lambdaのあたりから選んだら良さそう
lambdaだけ使ったことあるから、lambdaで組めたら楽そうだなという感じ

⑥言語

一旦python
他の言語知らないので、新しく学ぶ必要がある
pythonで組めたらありがたい

⑦運用するか決める検証方法

200トレードしてリスクリワード2以上、勝率50%以上のものを選びたい
少額スタート徐々に資金を増やしていけたらって感じ

1H、リスクリワード3、勝率50%でやるとして、流石に毎時間足でエントリーできる分けないが1日に1回くらいは動いて欲しいので月30トレード
2回トレードして1勝1敗、2%損切り、6%利確、資金率10%から1回あたりは1000円のトレード
40円の利益、手数料が2.4円で37.6円が利益
このサイクルを月7.5回するので564円の利益見込み
月+5.64%
100万円積んでも5万円にしかならないけど、メンテナンスだけで5万円ならまあ悪くはない美味しいご飯を食べよう

方針決まったので次やること

①取引所Bybit、言語python、サーバーレスのlambdaで取引を通す
②執行ルールの実装
③BTCの価格収集
④エントリーロジック、クローズロジックの実装
⑤検証
⑤全部をlambdaに載せる
⑥経過観察

①取引所Bybit、言語python、サーバーレスのlambdaで取引を通す

lambda使うのはこの記事が参考になりそう

https://qiita.com/speedkingg/items/b285a2149a461f7fb489

①-a DynamoでDBを作成

一旦取引履歴が残るものを作成しろと書いてあるので、作成します

①-b Lambdaにコードを載せると書いてあるのですが、取引所がZaifを使っていたので、Bybitで作ります

やることは
(i) place_order:取引をする
(ii) cancel_order:未約定のポジションをキャンセルする
(iii) get_price:取引のための価格情報を拾う
(iv) get_order:取引のポジション量を決めるために、現在のポジションと未約定のポジションを拾ってくる
(v) get_trade_log:今回5連敗したら止めるルールがあるので、過去の取引実績を拾ってくるものを作っておきます
(vi)api keyの情報をまとめるファイル
細かくは色々あるのでしょうが、こんなところかと思います

(i) place_order:取引をする
apiは注文情報の確認と注文を送信するものを選択

インバース契約とリニア契約
リニアはUSDTで取引するもの、インバース契約はBTCやETHなどステーブルコインでないもの建の取引のようです。
インバース契約でBTC建で流動性のあるアルトコインを取引して、アルトシーズンとBTCシーズンに合わせて売ったり買ったりするのとか面白そうだなと思いました。
でもまずはUSDTでやりたいので、リニア

timeInForce

Good till cancelled (GTC): 注文は、トレーダーによって手動でキャンセルされるか、完全に約定されるまで有効です。 GTCは、すべての注文が指定された価格で約定すること、未約定の注文をいつでも柔軟にキャンセルすることを希望するトレーダーに適しています。

Fill or Kill (FOK): 全ての注文数が指値またはそれより有利な価格で約定されます。そうでない場合、注文は完全にキャンセルされ、部分的な約定はされません。この注文方法は、一般的に短期的な市場のチャンスを探しているスキャルピングトレーダーやデイトレーダーが多用します。

Immediate or Cancel (IOC): 注文は、指値またはそれより有利な価格ですぐに約定される必要があります。注文をただちに約定できない場合、未約定分の注文はキャンセルされます。 IOCは通常、大量の注文が、希望価格とは異なる価格でが約定されるのを避けるために使用されます。この設定では、指値価格で約定できない注文はキャンセルされます。

Bybit ヘルプセンター

見る限り、GTCが一番スタンダードな感じなので、GTCにします

orderType

MAKERとLIMITはわかるのですが、LIMIT_MAKERというのもあるようです
調べてみると“reduce-only”、“maker-only”があるようです
違いはreduce-onlyはロングポジションの後、ショートポジションを出した時にロングポジションの決済として機能するようです
maker-onlyは同じ時に両建てする機能のようです
仮にですが、エントリーロジックとクローズのロジックで別のものを採用した時にreduce-onlyは勝手にポジションを減らされる
一方でポジションを持ちすぎるのを防ぐようには機能しそうです
ロジックがずれてしまうのは嫌なのでmaker-onlyにしようと思います
ポジションサイズはポジションデータをしっかり取得して持ちすぎないコードを書こうと思います

エラー発生

FailedRequestError: You have breached the ip rate limit. (ErrCode: 403) (ErrTime: 10:12:52).

調べるとリクエストの飛ばし過ぎで30minのbanがされている状態、30min以降もこのエラーなら永久banって書いてあるのですが、1件のリクエストしか飛ばしていないのになぜこのエラーが出るのでしょうか?
わからないですが一旦30min待ってみようと思います
結局testnet=Trueにしていたのが原因だったようです
IP addressをIPが違うと言われ設定できなかったので、一旦IPは設定せずに設定
その代わりtransferを切って、サブアカウントを作りました
無事orderが通り完成

(ii) cancel_order:未約定のポジションをキャンセルする
想定している使い方は時間切れだったり、ポジションサイズの調整だったりです
Order IDを指定して1つ1つキャンセルする方法と全てのOrderをキャンセルする方法があるようです
Cancel Allする方が手軽だし、安定するのではないかって気がしました
Id指定しては何か処理ミスって永遠に残り続けるOrderが発生しそう

(iii) get_price:取引のための価格情報を拾う
ハッシュ値がresultのところで2段階になってたの見落としてましたが、無事取れました
みたところ1hだと6ヶ月分くらい抜けるようです(おもったより長い)

(iv) get_order:取引のポジション量を決めるために、現在のポジションと未約定のポジションを拾ってくる
これも難なく
symbol かsettleCoinの設定が必要でした

(v) get_trade_log:今回5連敗したら止めるルールがあるので、過去の取引実績を拾ってくるものを作っておきます
直近の5回を拾ってきて5回pnl負けならstopの判定をします

(vi)api keyの情報をまとめるファイル
これまとめるだけなのであとでやります
Bybitのapikeyとsecretだけあれば良さそうです

①-c ロジックの作成

基本機能の使い方がわかったので、(iii)で撮ってきた価格データから良い感じのロジックを探します
上で書いたリストですと、
・土日取引からのリバーサルとか
・レンジを仮定した高値安値逆張り
・ヒゲキャッチ
・シンプルにドンチャン
・OIとかからくそポジ出しに行く
・関連する銘柄から後追い

まずはヒゲキャッチから行こうと思います
計算したところ
openPriceから1ATRの位置に逆張りの指値を入れます
→そのためにはATRを計算する必要があります。14日間でATRを計算しましょう
ポジションを持った時に2ATR動けば半利確、残ったポジションは次の足の終値で全決済を仮定します
ちょっとバックテストでは良い数値が出過ぎているのですが、1万円ですし一旦回してみようと思います。
問題は1ATRが40ドルとかなので、全勝しても0.4%ずつしか積み上がりません。取引手数料がエントリーは指値0.01%、クローズが全て成行なら0.06%なので勝っても16%は手数料として消えます
これは手数料負けしそうだなという印象です

この記事が気に入ったらサポートをしてみませんか?