Pythonでアービトラージ自動売買に挑戦④

1月 18, 2020

前回はこちら→bitFlyerでアービトラージ自動売買に挑戦③
第4弾ですがタイトルを修正しました。こっちの方が良さそう。
前回は、どこで買ってどこで売れば何円の利益になるかを指定秒数毎に出力するプログラムを作ってみました。仮想通貨初心者なので後からわかったのですが、取引所間の送金には30分前後かかってしまうため送金中に差額がなくなったりBTC価格が下落してしまうと逆に損してしまいます。

そこで、長時間差額がキープされる状態が発生する頻度やその時の価格変動を調査するために前回のプログラムにcsv出力をする処理を加え、csv化後に直接分析することにしました。そのプログラムが下記になります。

import ccxt
import time
import datetime		#追加箇所
import csv		#追加箇所
from pprint import pprint
while 1:
	exchange_list = ['bitflyer', 'coincheck', 'bitbank', 'liquid']
	ask_exchange = ''
	ask_price = 99999999
	bid_exchange = ''
	bid_price = 0
	for exchange_id in exchange_list:
	    exchange = eval('ccxt.' + exchange_id + '()')
	    orderbook = exchange.fetch_order_book ('BTC/JPY')
	    bid = orderbook['bids'][0][0] if len (orderbook['bids']) > 0 else None
	    ask = orderbook['asks'][0][0] if len (orderbook['asks']) > 0 else None
	    if ask < ask_price:
	        ask_exchange = exchange_id
	        ask_price = ask
	    if bid > bid_price:
	        bid_exchange = exchange_id
	        bid_price = bid
	dt = datetime.datetime.now()		#追加箇所
	print(dt)				#追加箇所
	print (ask_exchange, 'で', ask_price, '円で買って')
	print (bid_exchange, 'で', bid_price, '円で売れば')
	print (bid_price - ask_price, '円の利益!')
	with open('arbitrage.csv', 'a', newline="") as f:	#追加箇所。newline=""を入れないと無駄に1行多く改行される
		writer = csv.writer(f)				#追加箇所
		writer.writerow([dt, ask_exchange, ask_price, bid_exchange, bid_price, bid_price - ask_price])#追加箇所
	time.sleep(5)

追加箇所は該当行にコメントを入れてあります。参考のために時刻表示も追加しました。
あと、こまかいですがexchange_listは現在実際にアービトラージをしようと考えている取引所にしました。
実際の出力結果が以下のような感じです。1行目の項目名はあらかじめcsvファイルに手作業で入力しておきました。