[암호화폐] 잘 돌던 자동매매 프로그램이 오류

어제 SBD이 폭등을 했었는데요. SBD가 8900-10,000원 선에서 왔다 갔다를 많이 했습니다. 덕분에 자동매매도 무려 14번이나 매매가 되었습니다. 덕분에 매매 차익이 상당했었는데요. 그런데 SBD가 폭등을 하는 바람에 그냥 들고 있는게 더 좋았을뻔 했습니다. 미래는 알 수 없으니, 나름 변동성이 높았던 구간에서 매매 수익이 많이 나온 것에 만족을 합니다.

SBD 뿐 아니라 STEEM도 자동매매 중이었는데요. 그동안 잘 동작하고 있던 박스권 자동매매 프로그램이 오동작을 하였습니다. 그 원인을 찾아보니 업빗에서 주문을 거절하는 상황을 고려하지 않았기 때문이더군요. 아래는 log에 저장된 당시 상황입니다.

[STEEM]2021/05/19T20:32:31:: order: b[890,1000] s[1090,1000] 2342.0
일시적인 거래량 급증으로 먼저 접수된 주문을 처리중입니다. 잠시 후 주문을 시도해 주세요.

거래가 체결되면 매수/매도 주문을 동시에 내는데, 이 경우에는 한 개만 주문이 들어가지 않은 경우입니다. 다른 로그를 보니 둘 다 안된 경우도 있더군요. 주문 오류 나는 경우가 거의 없어서 그냥 오류 로그만 남기도록 해놓았었는데 결국 이에 대한 대응을 해야할 것 같습니다.

그래서 또 수정했습니다.

주문이 정상적으로 들어가면 아래와 같은 형태로 주문정보를 저장합니다.

    "uuids": {
        "61cf3e70-4dcd-4e82-8eb0-fef7050a363a": {
            "side": "ask",
            "status": 1,
            "org_qty": 1000,
            "done_qty": "0.0",
            "price": 1490
        },
        "13aca763-9a02-4d16-ba71-2d6b883f4110": {
            "side": "bid",
            "status": 1,
            "org_qty": 1000,
            "done_qty": "0.0",
            "price": 1190
        }
    },

주문이 정상적으로 들어가지 않았으면 거래 id가 존재하지 않습니다. 따라서 만약 주문이 실패하면 주문 id 대신에 "retry_buy", "retry_sell" key로 등록을 하고, 매번 주문 체결여부를 확인하는 부분에서 실패한 주문이 있는지 확인하는 함수를 추가하였습니다. 이 함수에서 하는 일은 미처리된 주문이 있다면 다시 주문을 내는 함수입니다.

    def handle_unprocessed_orders(self) :
        # 일시적인 거래량 급증으로 주문 연기에 대하여 처리
        do_sell = 0
        do_buy = 0
        s = {}
        b = {}
        for uuid, each in self.order_status['uuids'].items() :
            if uuid == 'retry_sell' :
                info = self.order_status['uuids']['retry_sell']
                s = {'price':info['price'], 'vol':info['org_qty']}
                do_sell = 1

            elif uuid == 'retry_buy' :
                info = self.order_status['uuids']['retry_buy']
                b = {'price':info['price'], 'vol':info['org_qty']}
                do_buy = 1

        if (do_sell + do_buy) > 0 :
            if do_sell :
                del self.order_status['uuids']['retry_sell']
            if do_buy :
                del self.order_status['uuids']['retry_buy']
            self.do_new_orders_act(s, b, do_sell, do_buy, 1) # do_sell = 1
            return 1
        else :
            return 0

이렇게 변경을 하고 나니 일단은 잘 동작합니다. 또 주문이 들어가지 않는 상황이 왔을 때 잘 동작하기를 기대합니다.

이제 SBD는 딴 나라로 갔으니, STEEM도 따라 가기를 기대해봅니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[US$49.00](▼14%)[Nespresso]스타벅스 네스프레소 호환 캡슐 7종 / 120 캡슐 골라담기 / 20개씩 총 6종류 교차 선택 가능 / 중복 선택 가능 / 재고 확보 / 무료배송 / 개당 약 486원 최저가★

WWW.QOO10.COM

자동 매매프로그램은 어떻게 만드신건가요 ? ㅎ

자동 매매 프로그램 개발의 신이십니다.

역시 대단하십니다 형님