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

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

get_effective_tickメソッド再確認の続きから。

   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

取得した先物板情報が下記の場合、sに0.33495286が加算されます。

bids":[
    {"price":708227.0,"size":0.33495286},
    {"price":708226.0,"size":0.48},
    ...

sに0.33495286が加算されると、size_thruは0のため、whileループが終了します。
このときi=1です。

    return {'bid': value['bids'][i - 1][0], 'ask': value['asks'][j - 1][0]}

returnされるbidは `value['bids'][i-1][0]` となるため、買い板情報の0番目価格である `708227.0` が入ります。

メインループに戻ります。

       # 板情報を取得、実効ask/bid(指値を入れる基準値)を決定する
       tick = get_effective_tick(size_thru=AMOUNT_THRU, rate_ask=0, size_ask=0,
                                 rate_bid=0, size_bid=0)
       ask = float(tick['ask'])
       bid = float(tick['bid'])

`pos == 'none'` の場合、askとbidにはそれぞれ売り板の0番目の価格と買い板の0番目の価格が入ります。

        # 実効スプレッドを計算する
        spread = (ask - bid) / bid

実効スプレッドを計算します。
askとbidがそれぞれ板の0番目なので、
`pos=='none'`の場合はスプレッドそのもの(bitflyerに表示されている値)となります。

        logger.info('--------------------------')
        logger.info('ask:{0}, bid:{1}, spread:{2}%'.format(int(ask * 100) / 100,
                                                           int(bid * 100) / 100,
                                                           int(
                                                               spread * 10000) / 100))

ask, bid, spreadをログ出力します。
ask, bidに100を掛けた上でintにしてから100で割っているのはask, bidがAPIから小数で返ってくるので浮動小数点問題を気にしているのかもしれません。

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

↓次


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