MarketMakerBOTのソースコード(by magito氏)読解メモ3
の続きです。
題材は https://note.mu/magimagi1223/n/n5fba7501dcfd です。
get_effective_tickメソッドの続きから。
# 板情報から実効Ask/Bid(=指値を入れる基準値)を計算する関数
def get_effective_tick(size_thru, rate_ask, size_ask, rate_bid, size_bid):
while True:
try:
value = bitflyer.fetchOrderBook(PAIR)
break
except Exception as e:
logger.info(e)
time.sleep(2)
i = 0
s = 0
while s <= size_thru:
if value['bids'][i][0] == rate_bid:
s += value['bids'][i][1] - size_bid
else:
s += value['bids'][i][1]
i += 1
j = 0
t = 0
while t <= size_thru:
if value['asks'][j][0] == rate_ask:
t += value['asks'][j][1] - size_ask
else:
t += value['asks'][j][1]
j += 1
time.sleep(0.5)
return {'bid': value['bids'][i-1][0], 'ask': value['asks'][j-1][0]}
i = 0
s = 0
while s <= size_thru:
if value['bids'][i][0] == rate_bid:
s += value['bids'][i][1] - size_bid
else:
s += value['bids'][i][1]
i += 1
i,sに0を入れて、sがsize_thruで指定された値未満の間はループ処理します。
valueには板情報が下記形式で入っています。
参考: https://lightning.bitflyer.com/docs?lang=ja#%E6%9D%BF%E6%83%85%E5%A0%B1
{
"mid_price": 33320,
"bids": [
{
"price": 30000,
"size": 0.1
},
{
"price": 25570,
"size": 3
}
],
"asks": [
{
"price": 36640,
"size": 5
},
{
"price": 36700,
"size": 1.2
}
]
}
value['bids'][i][0]にはi番目のbids priceが入ります。
value['bids'][i][1]にはi番目のbids sizeが入ります。
i番目のbids priceが指定されたrate_bidと同値であれば、sにi番目のbids sizeから指定されたsize_bidを引いた値を加算します。
同値でない場合は、sにi番目のbids sizeを加算します。
最後にiに1加算します。
j = 0
t = 0
while t <= size_thru:
if value['asks'][j][0] == rate_ask:
t += value['asks'][j][1] - size_ask
else:
t += value['asks'][j][1]
j += 1
askについても同様の処理をします。
time.sleep(0.5)
return {'bid': value['bids'][i-1][0], 'ask': value['asks'][j-1][0]}
0.5秒sleepした後に、bidのi-1番目の価格とaskのi-1番目の価格を返します。
# 成行注文する関数
def market(side, size):
while True:
try:
value = bitflyer.create_order(PAIR, type = 'market', side = side, amount = size)
break
except Exception as e:
logger.info(e)
time.sleep(2)
time.sleep(0.5)
return value
成り行き注文を行います。
sendchildorderAPIを利用しています。
https://lightning.bitflyer.com/docs?lang=ja#%E6%96%B0%E8%A6%8F%E6%B3%A8%E6%96%87%E3%82%92%E5%87%BA%E3%81%99
他のAPIと違って処理後に0.5sのsleepを入れています。
ある程度間を取って注文したいかAPIの参照上限に達さないための工夫と思われます。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?