有名な仮想通貨botterであるよーぶんさんが発案したレバレッジ積み立てbotです
同じくbotterのともいさんが、仮想通貨取引所bybit用のコードを書いて、noteに公開されています
試しにコードをコピペして実行してみたところ、たまたま上昇トレンドだったからか、一晩で$500の資産が$600!?に増えてびっくりしました
どういう仕組みで動いているのか気になったので、解読してみました
Contents
養分ロングbotの解読
仮想通貨取引所bybit用のPythonプログラムをnoteから引用させてもらいました
暗号資産取引所bybitとは
ライブラリについて
import sys
import time
import ccxt
from datetime import datetime
from pprint import pprint
print(datetime.now())
必要なライブラリのインポートをしています
ccxtは、APIを一括で管理するライブラリです
仮想通貨の自動売買をする際に、よく使われます
パラメータについて
# パラメータ###########################################
GOAL = 100000 #[USD]決済価格
LEVE = 1.5 #維持するレバレッジ
print("deffence", 100/(LEVE+1), "%") #最高値からこれだけの調整は耐えるよという表示
LOT = 10 #[USD]一度に注文する量
STIME = 3 #[sec]ループ頻度。多分3以上じゃないとだめ
bybit = ccxt.bybit()
bybit.apiKey = ''
bybit.secret = ''
ゴールを100,000[USD]、レバレッジを1.5倍、ロットを10[USD]とし、3秒に1回ループするようにしています
ゴールは、ビットコイン価格が100,000[USD](日本円で大体1,000万円くらい)になると、利確するように設定されています
ロットは、1回あたりに買うビットコインの量で、10ドル分(大体1000円分)に設定してあります
ループ頻度は、3秒に1回と設定してあり、これより高頻度にするとアクセスエラーが出てしまうと思われます
初期処理について
#初期処理#########################################
#全注文キャンセル
bybit.cancelAllOrders('BTC/USD')
# 証拠金を取得
res = bybit.fetch_balance()
# ポジションを取得
pos = bybit.v2PrivateGetPositionList({'symbol': 'BTCUSD'})
balance = float(res['BTC']['free']) + float(res['BTC']['used']) + float(pos['result']['unrealised_pnl'])
print("balance+unreal:", balance, "BTC")
print("pos", pos['result']['size'], "USD")
#決済指値注文
if pos['result']['size'] > 0:
order = bybit.v2PrivatePostOrderCreate({'side': 'Sell',
'symbol': 'BTCUSD',
'order_type': 'Limit',
'qty': pos['result']['size'],
'price': GOAL,
'time_in_force': 'PostOnly',
'reduce_only': True})
#寸前のポジション、減ったら決済と認識、停止
pre_pos = pos['result']['size']
balanceは、今持っているビットコイン全資産で、有効証拠金として使います
決済指値注文では、ビットコイン価格が100,000[USD]になったら利確をするように、ポジションを持っている分だけ指値を指します
繰り返し処理について
#繰り返し################################################
while True:
try:
# 証拠金を取得
res = bybit.fetch_balance()
# ポジションを取得
pos = bybit.v2PrivateGetPositionList({'symbol': 'BTCUSD'})
balance = float(res['BTC']['free']) + float(res['BTC']['used']) + float(pos['result']['unrealised_pnl'])
# レバレッジを計算
margin_leve = float(pos['result']['position_value']) / balance
#ポジション量が減ってたら決済スタートもしくは異常事態として終了
if pos['result']['size'] < pre_pos:
print('DECLEASE POS !!!')
break
#レバ低ければ買い増し
if margin_leve < LEVE:
print(datetime.now())
print('LONG (leve', margin_leve, ")")
res = bybit.create_market_buy_order('BTC/USD', LOT)
print("pos", pos['result']['size'], "USD")
res = bybit.v2PrivatePostOrderReplace({'order_id': order['result']['order_id'],
'symbol': 'BTCUSD',
'p_r_qty': pos['result']['size'] + LOT})
except Exception as e:
print(datetime.now())
print(e)
time.sleep(STIME)
pre_pos = pos['result']['size']
この処理が、3秒に1回繰り返されます
ループの中を詳しく見てみます
証拠金について
# 証拠金を取得
res = bybit.fetch_balance()
# ポジションを取得
pos = bybit.v2PrivateGetPositionList({'symbol': 'BTCUSD'})
balance = float(res['BTC']['free']) + float(res['BTC']['used']) + float(pos['result']
まずはじめに、balance(有効証拠金)を計算しています
レバレッジについて
# レバレッジを計算
margin_leve = float(pos['result']['position_value']) / balance
#ポジション量が減ってたら決済スタートもしくは異常事態として終了
次に、margin_leve(実効レバレッジ)を、下の式より計算しています
margin_leve(実効レバレッジ)=(取引額ポジション)÷ balance(有効証拠金)
レバレッジについて詳しく知りたい方は、この記事もご覧ください
例外処理について
#ポジション量が減ってたら決済スタートもしくは異常事態として終了
if pos['result']['size'] < pre_pos:
print('DECLEASE POS !!!')
break
例外処理です
指値が部分約定し始めると、終了するということです
また、異常事態の例として、bybitのサイトやアプリから手動で利確(決済)をすると、ロングポジションが減るので、例外処理を食らうと思います
メイン処理について
#レバ低ければ買い増し
if margin_leve < LEVE:
print(datetime.now())
print('LONG (leve', margin_leve, ")")
res = bybit.create_market_buy_order('BTC/USD', LOT)
print("pos", pos['result']['size'], "USD")
res = bybit.v2PrivatePostOrderReplace({'order_id': order['result']['order_id'],
'symbol': 'BTCUSD',
'p_r_qty': pos['result']['size'] + LOT})
もしmargin_leve(実効レバレッジ)が1.5より小さければ、1.5になるように買い増しをします
・ビットコイン価格が上がる(=儲かる)と、有効証拠金(全ビットコイン資産)が増える
・有効証拠金が増えると、実効レバレッジが減る
実効レバレッジ=取引額(ポジション)÷ 有効証拠金
・実質レバレッジが1.5倍になるように買い増す
という仕組みになっています
1回買い増すBTCは10[USD]分で、実効レバレッジが1.5になるまで、3秒に1回、買い増しが繰り返されます
フローチャート
フローチャートでざっくり表すと、こんな感じになると思います
補足説明
私がつまずいたところを補足説明としてメモしておきます
私が勝手に解釈したものなので、間違っていたらごめんなさい
・仮想通貨取引所bybitの口座レバレッジは100倍である
・bybitは証拠金取引を行う取引所である
・保有するBTCを証拠金にして、ドル建てでBTCを購入する(ドルを借りてBTCを買う)
・購入するBTC量に応じて、実効レバレッジが変わる
実効レバレッジ = 取引額 ÷ 有効証拠金(全ビットコイン資産)
・ビットコイン価格が上がる(=儲かる)と、有効証拠金が増える
・有効証拠金が増えると、実効レバレッジが減る
・実質レバレッジが1.5倍になるように買い増す
リンク
プログラムの引用元
他の自動売買プログラムについて
暗号資産取引所bybitについて
コメント