FIREして市場に落ちている金を拾うブログ

30代でFIREし、プログラムを勉強して米国株式と仮想通貨で落ちている金をせっせと拾う記録。

Websocket実装に向けて非同期処理を勉強する(WebSocket)その4

前回に引き続き、まちゅけんさん記事を見ながら勉強。

結論としては、何個かバグ取りをした結果、動くようになった。
以下メモ。

place orderのresponseでresultの中身のないものが返ってくる

例えば既に出している指値をmodify orderしたときに、すでに指値が約定してしまっていることがある。
その場合、resultの中身が入ってないので、ハンドラで返ってきたデータにあわせて挙動を調整することとした。

    async def handler(self, obj):
        try:
            data = await obj.json()
        except ValueError:
            logger.debug('Value Error')
            raise
        else:
            if not data['success']:
                logger.debug(f'{data["error"]}')
            return data['result']            

FTXからResponseが返ってこないときにTimeout Errorが出る

よくある話。
以前、自分でクライアントを設定していたときはRequestにHTTPAdapterを設定しRetryしていたが、今回はpybottersのClientを使っているので中身を確認。
aiohttpのClientを使っていたので、aiohttp.ClientTimeoutを設定し一定時間でTimeoutするようにして、
Try Exceptでエラーを吐いてループを続行するように変更した。

結果

まだ駄目だめだと思われるが、Maker注文約定から、ヘッジのためのTaker注文発注約定まで、
RESTでは0.7~1.3秒くらいかかっていたところが、0.4~1秒くらいに短縮された。微妙?笑
まぁ、まだできたばかりで最適化余地がいっぱいあると思うのでこれからちょびちょびやってこうと思います。