【BNB】Binanceでの取引所内アービトラージ(三角裁定取引)
このプログラムでは理論上は100%儲けがでる裁定取引機会の抽出を行います。裁定取引は通常、同一商品が、異なる取引所間において、異なる価格で取引されている場合、その価格差を利用して、利益を上げる手法です。(要するにさやどりです。)
ただし今回紹介するのは、Binance内での裁定取引です。
通常の裁定取引と比較して、取引所を跨がなくてよいため
1.送金手数料が不要
2.送金にかかる時間がないため、さやが逆転して損をする心配がない
3.送金にかかる時間がないため、連続で取引できる
といったメリットが挙げられます。
今回の取引の手法としては以下になります。
①BNBでBTCを購入 -> ②BTCでETHを購入 -> ③ETHでBNBを購入
※前回(https://note.mu/enjoycc/n/n313a1d6b976b)は以下でした。
パターン1: ①USDTでBTCを購入 -> ②BTCでETHを購入 -> ③ETHでUSDTを購入
パターン2: ①USDTでEHTを購入 -> ②ETHでBTCを購入 -> ③BTCでUSDTを購入
取引にはask,bidのスプレッドや手数料(0.75%)がかかります。
出力結果は手数料を含めて計算したもの、手数料を含めないで計算したもの、それぞれを表示しています。
(計算が間違っていたら教えてくださいw)
また前回は表示していなかった取引できる最良の板のVolも表示しています。
一見してわかりやすいようBTC換算で表示しています。
コードは以下の通りです。
# coding: utf-8
import datetime
import time
import logging
import ccxt
import requests
commission = 0.075 #手数料 0.075%
binance = ccxt.binance()
est_prof_per = 0.001 #想定利益
#-----------------------------------------
arb_flag = 0
vol_list = [0, 0, 0]
eth_btc_rate = 0
bnb_eth_rate = 0
# -------------------------------------------
# ログ設定
logger = logging.getLogger('LoggingTest')
logger.setLevel(10)
fh = logging.FileHandler('tri_arb.log')
logger.addHandler(fh)
sh = logging.StreamHandler()
logger.addHandler(sh)
formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# -------------------------------------------
# -------------------------------------------
def spred_chk():
global arb_flag
global vol_list
global eth_btc_rate
global bnb_eth_rate
orderbook_bn_ethbtc = binance.fetch_order_book('ETH/BTC')
orderbook_bn_bnbbtc = binance.fetch_order_book('BNB/BTC')
orderbook_bn_bnbeth = binance.fetch_order_book('BNB/ETH')
# ----ask取得
ask_bn_ethbtc = orderbook_bn_ethbtc['asks'][0][0]
ask_vol_bn_ethbtc = orderbook_bn_ethbtc['asks'][0][1]
ask_bn_bnbbtc = orderbook_bn_bnbbtc['asks'][0][0]
ask_vol_bn_bnbbtc = orderbook_bn_bnbbtc['asks'][0][1]
ask_bn_bnbeth = orderbook_bn_bnbeth['asks'][0][0]
ask_vol_bn_bnbeth = orderbook_bn_bnbeth['asks'][0][1]
# ----bid取得
bid_bn_ethbtc = orderbook_bn_ethbtc['bids'][0][0]
bid_vol_bn_ethbtc = orderbook_bn_ethbtc['bids'][0][1]
bid_bn_bnbbtc = orderbook_bn_bnbbtc['bids'][0][0]
bid_vol_bn_bnbbtc = orderbook_bn_bnbbtc['bids'][0][1]
bid_bn_bnbeth = orderbook_bn_bnbeth['bids'][0][0]
bid_vol_bn_bnbeth = orderbook_bn_bnbeth['bids'][0][1]
eth_btc_rate = bid_bn_ethbtc
bnb_eth_rate = bid_bn_bnbeth
# ----表示
logger.info('----------------------------------------------------------')
logger.info('BNB/BTC : ' + str(bid_bn_bnbbtc) + '\tVOL: ' + str(bid_vol_bn_bnbbtc) + '\tVOL(BTC): ' + str(bid_vol_bn_bnbbtc * bid_bn_bnbbtc))
logger.info('ETH/BTC : ' + str(ask_bn_ethbtc) + '\tVOL: ' + str(ask_vol_bn_ethbtc)+'\tVOL(BTC): ' + str(bid_vol_bn_ethbtc * bid_bn_ethbtc))
logger.info('BNB/ETH : ' + str(ask_bn_bnbeth) + '\tVOL: ' + str(ask_vol_bn_bnbeth) + '\tVOL(BTC): ' + str(ask_vol_bn_bnbeth * ask_bn_bnbbtc))
logger.info('BNB->BTC->ETH->BNB\tEST_PROFIT(%)\t' + str('{0:.3f}'.format((-1*(bid_bn_bnbbtc - ask_bn_ethbtc * ask_bn_bnbeth)/bid_bn_bnbbtc*100)-commission*3)) + '%')
logger.info('BNB->BTC->ETH->BNB\tET_PRF_WOC(%)\t' + str('{0:.3f}'.format((-1*(bid_bn_bnbbtc - ask_bn_ethbtc * ask_bn_bnbeth)/bid_bn_bnbbtc*100))) + '%')
if ((-1*(bid_bn_bnbbtc - ask_bn_ethbtc * ask_bn_bnbeth)/bid_bn_bnbbtc*100)-commission*3) > est_prof_per:
print('Find Arb opotunity...')
arb_flag = 1
vol_list = [(bid_vol_bn_bnbbtc * bid_bn_bnbbtc), (bid_vol_bn_ethbtc * bid_bn_ethbtc), (ask_vol_bn_bnbeth * ask_bn_bnbbtc)]
else:
print('No opotunity...')
arb_flag = 0
vol_list = [0, 0, 0]
# -------------------------------------------
# ★--------------★メイン
while True:
spred_chk()
logger.info ('----------------------------------------------------------')
time.sleep(5)
# -------------------------------------------
動作環境はWindows10 pythonは3.7.0です。(python3.xだと動くと思います)
動作にはccxt(https://github.com/ccxt/ccxt)が必要です。
5秒に1度binanceのask,bidを見に行き裁定取引機会があるか確認しています。実行結果は以下の通り。
この時は0.023%ほどの裁定機会があったようです。(手数料無しで計算した場合は、0.248%)
またコードのest_prof_perの値をいじることで、想定した裁定機会(%)があればFind Arb Oppotunity と表示するようにしています。
Binanceのリファラルリンク使っていただけるとありがたいです。
https://www.binance.com/?ref=11330718
コンテンツはここまでです。ご支援いただける方は購入お願いします。
ここから先は
¥ 100
この記事が気に入ったらチップで応援してみませんか?