MarketMakerBOTのソースコード(by magito氏)読解メモ2

 の続きです。
題材は https://note.mu/magimagi1223/n/n5fba7501dcfd です。

# 実効Ask/BidからDELTA離れた位置に指値をおく
DELTA = 1

best bid, best ask からどれだけ離れた場所に指値するかの値です。

#------------------------------------------------------------------------------#
#log設定
import logging
logger = logging.getLogger('LoggingTest')
logger.setLevel(10)
fh = logging.FileHandler('log_mm_bf_' + datetime.datetime.now().strftime('%Y%m%d') + '_' + datetime.datetime.now().strftime('%H%M%S') + '.log')
logger.addHandler(fh)
sh = logging.StreamHandler()
logger.addHandler(sh)
formatter = logging.Formatter('%(asctime)s: %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
fh.setFormatter(formatter)
sh.setFormatter(formatter)

ログ出力設定をします。

# JPY残高を参照する関数
def get_asset():
   while True:
       try:
           value = bitflyer.fetch_balance()
           break
       except Exception as e:
           logger.info(e)
           time.sleep(1)
   return value

資産残高を取得します。
cctx のfetch_balanceメソッドを利用し、例外が飛ばなくなるまで1秒間隔でAPIを参照します。
https://github.com/ccxt/ccxt/blob/master/python/ccxt/bitflyer.py#L136 にある通り、cctxのfetch_balanceはbitflyerのgetbalanceAPIを利用しています。
https://lightning.bitflyer.com/docs?lang=ja#%E8%B3%87%E7%94%A3%E6%AE%8B%E9%AB%98%E3%82%92%E5%8F%96%E5%BE%97

# JPY証拠金を参照する関数
def get_colla():
   while True:
       try:
           value = bitflyer.privateGetGetcollateral()
           break
       except Exception as e:
           logger.info(e)
           time.sleep(1)
   return value

証拠金状態を取得します。
先ほどのメソッドと同様に例外が飛ばなくなるまで1秒間隔でAPI参照します。
bitflyerのgetcollateralAPIを利用しています。
https://lightning.bitflyer.com/docs?lang=ja#%E8%A8%BC%E6%8B%A0%E9%87%91%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E5%8F%96%E5%BE%97

# 板情報から実効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]}

板情報を取得して、指定したサイズや価格に合ったask,bidを求めます。

   while True:
       try:
           value = bitflyer.fetchOrderBook(PAIR)
           break
       except Exception as e:
           logger.info(e)
           time.sleep(2)

例外が飛ばなくなるまで2秒間隔でAPI参照し板情報を取得します。
cctx経由でgetboardAPIを利用します。
https://lightning.bitflyer.com/docs?lang=ja#%E6%9D%BF%E6%83%85%E5%A0%B1

15分経ったので今日はここまで。

↓次


この記事が気に入ったらサポートをしてみませんか?