【ビットコイン自動売買】口座の残高からロット数を自動計算させてみる

Python
スポンサーリンク

こんにちわ、Heywaです。

Botを作成・運用していて、エントリするロット数をパラメータで指定していたのですが、資産に応じてパラメータの見直しをするのが面倒くさくなってきて、

「簡単な計算」で「安全値をみたロット数」を計算出来ないかと思い、少し考えてみました。

きっちり正確なロット数でなくてもいいので、しばらく下記に記述する方法で運用してみようと思います。一ヶ月ほど稼働させましたが、今のところうまく動いています。

同じく「ほどよくてけとー」な計算でもよいという方は参考にしていただければ幸いです。

レバレッジを使った取引も初心者なので、

誤りや計算が甘い部分があると思いますが、この先また良い方法を見つけたら見直していこうと思います。

 

スポンサーリンク

必要証拠金とか証拠金維持率のルール

まずルールを確認します。

bitflyerの証拠金の計算については、

以下の「3.証拠金等について」を確認してくださいとのことなので、確認する。

 

ビットコイン取引所【bitFlyer Lightning】
bitFlyer Lightning は、ビットコインの取引所です。お客様同士の需要と供給から価格が決定されます。円を売ってビットコインを買う、反対にビットコインを売って円に替えることもできます。FX(外国為替証拠金取引)での取引と似ています。

 

ざっくり小さい脳みそで理解したところによると、

①ポジションを持ったあとの価格変動による損失額

②建玉必要証拠金、注文必要証拠金

の2つを含めて、レバレッジに応じた証拠金維持率をカバーできる金額分の証拠金が預けられていればいいようですね。

僕のBotの場合は想定される損失率を超えたら損切りするようにしているので、ざっくりであれば①の金額は想定できそうだったのでたすかりました。

 

Botへ実装してみる

 

というわけで、

①最初に今の証拠金とレバレッジで保有できる仮のMaxロット数を求め、

②そこから想定する損失額を求め、証拠金から引き、

③再度想定損失額を引いた証拠金で保有できるロット数を求める

という方法で記述してみました。

途中で出てくる、

「leverage = 3.5」、
「loss_parcent = 0.02」

についてはそれぞれ設定レバレッジ、想定損失になります。

レバレッジは4倍設定ですが、少し余裕をみて3.5倍で設定しています。

loss_parcentは「ビットコインの価格が何パーセント下落したら」で想定していて、

以下では2%で計算していますが、5%にする場合は0.05に変更します。

 

#最適ロット数算出
# bitflyerのAPIを実行
#bitflyerにはccxt.bitflyerを格納しておきます。
balance = bitflyer().fetch2(path='getcollateral', api='private', method='GET')

# 総額
myaccount['total'] = round(balance['collateral'], 0)
print("# 総額:" + str(myaccount['total']))
# 拘束中(必要証拠金)
myaccount['used'] = round(balance['require_collateral'], 0)
print("# 拘束中:" + str(myaccount['used']))
# 使用可能
myaccount['free'] = myaccount['total']  - myaccount['used']
print("# 使用可能:" + str(myaccount['free']))
#証拠金維持率
myaccount['marginBalancePcnt'] =  round(balance['keep_rate'], 2)
print("#証拠金維持率:" + str(myaccount['marginBalancePcnt']))

pprint(myaccount)
##ロット数計算
#現在価格と口座の利用可能金額から、ロット数を自動計算
leverage = 3.5
loss_parcent = 0.02
#仮のロット数を計算
#レバレッジと使用可能金額を掛けて、現在のビットコイン価格で割る
lot1 = (myaccount['free'] * leverage) / price['last']
#現在価格、仮のロット数、許容する変動率を掛けることで、
#ポジションを保持してからのリスクを算出
riksloss = price['last'] * round(lot1,2) * loss_parcent
freeaccount = myaccount['free'] - round(riksloss,0)
#使用可能金額から変動リスク金額を引き、
#再度ロット数を計算する

print("#変動リスク加味した利用可能金額:" + str(freeaccount))
lot2 = round((freeaccount * leverage) / price['last'],2)
print("#自動計算ロット数の結果:" + str(lot2))
buy_lot= lot2
sell_lot= lot2

 

参考:レバレッジ設定を確認と、証拠金の預け入れを忘れずに

備忘を兼ねて僕がやってしまった凡ミス2つを紹介しておくと、「レバレッジ設定漏れ」と「証拠金の預け入れ漏れ」がありました。

前者はレバレッジは取引所の画面から設定できるため、想定しているレバレッジを先に設定をしておく必要がありました。

公式の「レバレッジ倍率の変更方法を教えてください。」を参考にして設定しました。

Botで計算する際のレバレッジよりも少ないレバレッジ設定になっていると、

Botからエントリできなかったり、最悪、即時ロスカットになります。

証拠金の預け入れについては、普通の取引所の口座からFXの証拠金用の口座へ移さなければならないところを、実施がもれていたのでBotからエントリができませんでした。

こちらも「証拠金の預け入れの方法を教えてください。」 を参考に預け入れしました。

 

コメント

タイトルとURLをコピーしました