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

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

メインループの  if trade_ask['status'] == 'open' and trade_ask['price'] != ask - DELTA: ブロックの続きから。

            # Ask指値が最良位置に存在しないとき、指値を更新する
            if trade_ask['status'] == 'open' and trade_ask[
                'price'] != ask - DELTA:

                # 指値を一旦キャンセル
                cancel_ask = cancel(trade_ask['id'])

                # 注文数が最小注文数より大きいとき、指値を更新する
                if trade_ask['remaining'] >= AMOUNT_MIN:
                    trade_ask = limit('sell', trade_ask['remaining'],
                                      ask - DELTA)
                    trade_ask['status'] = 'open'
                # 注文数が最小注文数より小さく0でないとき、未約定量を記録してCLOSEDとする
                elif AMOUNT_MIN > trade_ask['remaining'] > 0:
                    trade_ask['status'] = 'closed'
                    remaining_ask = float(trade_ask['remaining'])
                    remaining_ask_flag = 1
                # 注文数が最小注文数より小さく0のとき、CLOSEDとする
                else:
                    trade_ask['status'] = 'closed'
                # 注文数が最小注文数より小さく0でないとき、未約定量を記録してCLOSEDとする
                elif AMOUNT_MIN > trade_ask['remaining'] > 0:
                    trade_ask['status'] = 'closed'
                    remaining_ask = float(trade_ask['remaining'])
                    remaining_ask_flag = 1

売り注文残数がAMOUNT_MINよりも小さくかつ0ではない(ほんの少し残っている)場合の処理です。
trade_ask変数のstatusにclosedを入れ、
remaining_askに売り注文残数を入れ、
remaining_ask_flagを立てます。

                # 注文数が最小注文数より小さく0のとき、CLOSEDとする
                else:
                    trade_ask['status'] = 'closed'

売り注文残数が0のときはstatusにclosedを入れるだけです。

            # Bid指値が最良位置に存在しないとき、指値を更新する
            if trade_bid['status'] == 'open' and trade_bid[
                'price'] != bid + DELTA:

                # 指値を一旦キャンセル
                cancel_bid = cancel(trade_bid['id'])

                # 注文数が最小注文数より大きいとき、指値を更新する
                if trade_bid['remaining'] >= AMOUNT_MIN:
                    trade_bid = limit('buy', trade_bid['remaining'],
                                      bid + DELTA)
                    trade_bid['status'] = 'open'
                # 注文数が最小注文数より小さく0でないとき、未約定量を記録してCLOSEDとする
                elif AMOUNT_MIN > trade_bid['remaining'] > 0:
                    trade_bid['status'] = 'closed'
                    remaining_bid = float(trade_bid['remaining'])
                    remaining_bid_flag = 1
                # 注文数が最小注文数より小さく0のとき、CLOSEDとする
                else:
                    trade_bid['status'] = 'closed'

買い指値についても同様の処理を行います。

        # Ask/Bid両方の指値が約定したとき、1サイクル終了、最初の処理に戻る
        if trade_ask['status'] == 'closed' and trade_bid['status'] == 'closed':
            pos = 'none'

            logger.info('--------------------------')
            logger.info('completed.')

売り・買い両方のstatusがclosedの場合はposにnoneを入れ、ログ出力します。

    time.sleep(5)

最後に5秒sleepします。

これで全て読んだことになります。処理の流れを振り返ります。

pos変数の働きを把握します。

pos変数にはnoneまたはentryという文字列が入り得ます。
noneが入っている場合はbitflyerに指値注文は残っていません。
entryが入っている場合はbitflyerに指値注文が残っています。

none, entryどちらの場合も指値注文を行います。
noneの場合は新規にLOTで指定された値に前回entry時に残ったremaining_bid, remaining_ask分を加算した値を発注します。
entryの場合は残存注文量分だけ発注しますが、価格はそのタイミングに合ったものに訂正されます。

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

↓次


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