指値(メイカー)で売り、成行(テイカー)で買ったときの損益計算をするプログラムを作りました

こちらの記事で板情報を取得して成行注文時の約定価格を計算するプログラムを作りましたが、今回はそれにアービトラージのための差額計算を加えたプログラムを作りました。

最終的には下記ロジックで自動売買を行いたいのですが、まずは差額がいくらになるかを計算するプログラムを作りました。

画像

それでは今回作成したプログラムのソースコードはこちらです。

import ccxt
import time
from pprint import pprint
import requests
import json
endPoint = 'https://api.coin.z.com/public'
path     = '/v1/orderbooks?symbol=BTC'
order_amount = 1 #注文数量
#GMO
def BuyPriceOrder():
	response = requests.get(endPoint + path)
	json_data = response.json()
	i = 0
	size_sum = 0
	price_sum = 0
	taker_price = 0
	while size_sum < order_amount:
		size_sum = size_sum + float(json_data["data"]["asks"][i]["size"])
		price_sum = price_sum + float(json_data["data"]["asks"][i]["price"])
		taker_price = taker_price + float(json_data["data"]["asks"][i]["price"]) * (float(json_data["data"]["asks"][i]["size"]))
		i = i + 1
	delta = size_sum - order_amount
	return taker_price - float(json_data["data"]["asks"][i-1]["price"]) * delta
#bitbank
def SellLimitOrder():
	exchange = eval('ccxt.' + 'bitbank' + '()')
	orderbook = exchange.fetch_order_book ('BTC/JPY')
	return order_amount * orderbook['asks'][0][0]     #指値でMaker取引をするためbidではなくask(売り注文)の値を取得
while 1:
	buy_price_order = BuyPriceOrder()
	sell_limit_order = SellLimitOrder()
	price_fee = buy_price_order * 0.0005 #GMO taker fee
	limit_fee = sell_limit_order * -0.0002 #bitbank maker fee
	print('テイカー手数料は',price_fee,'円')
	print('メイカー手数料は',limit_fee,'円')
	print(buy_price_order,'円で買って(テイカー)')
	print(sell_limit_order,'円で売れば(メイカー)')
	print(sell_limit_order - buy_price_order - price_fee - limit_fee,'円の利益!')
	time.sleep(5)

実際にプログラムを実行してみた結果がこちらです。

あとは差額を見て実際に発注するプログラムを組めば半自動売買と言えるまではいけそうです。少しずつですがなんとか前進できている気がします。。


ゼロ送金時間アービトラージ手法の紹介はこちら↓
https://tsurezure.info/arbitrage/index.php/2020/01/26/post-326/