BeeBot 자동매매 프로그램 개발_5단계: 봇 구현
BeeBot 자동매매 프로그램 개발_5단계: 봇 구현
이번 시간에는 지금까지 만든 부품(CoinData, MarketData, Strategy 등)을 이용하여 BeeBot을 구동시켜 볼 것 입니다.
주문이 제대로 체결되는지 확인하기 위해 RSI값이 60이상이면 매수신호가 발생하도록 설정했습니다.
*오브젝 MixOrderClient는 비트겟 SDK에 주문처리 스트럭트(struct)입니다.
$ go test -run TestBot -v
=== RUN TestBot2023-02-05T07:55:12.002+0900 INFO WebSocket connecting…2023-02-05T07:55:12.172+0900 INFO WebSocket connected2023-02-05T07:55:12.172+0900 INFO login in …
2023-02-05T07:55:12.172+0900 INFO sendMessage:{“op”:”login”,”args”:[{“apiKey”:”비밀입니다”,”passphrase”:”이것도”,”timestamp”:”이것도”,”sign”:”이것도”}]}
2023-02-05T07:55:12.214+0900 INFO login msg:{“event”:”login”,”code”:0}
2023-02-05T07:55:12.214+0900 INFO login in … success
2023-02-05T07:55:12.214+0900 INFO sendMessage:{“op”:”subscribe”,”args”:[{“instType”:”MC”,”channel”:”candle1m”,”instId”:”BTCUSDT”},{“instType”:”MC”,”channel”:”candle1m”,”instId”:”BTCUSDT”}
,{“instType”:”MC”,”channel”:”candle1m”,”instId”:”ETHUSDT”},{“instType”:”MC”,”channel”:”candle1m”,”instId”:”ETHUSDT”}]}
2023-02-05T07:55:12.214+0900 INFO tickerLoop started
default:{“event”:”subscribe”,”arg”:{“instType”:”mc”,”channel”:”candle1m”,”instId”:”ETHUSDT”}}
default:{“event”:”subscribe”,”arg”:{“instType”:”mc”,”channel”:”candle1m”,”instId”:”ETHUSDT”}}
default:{“event”:”subscribe”,”arg”:{“instType”:”mc”,”channel”:”candle1m”,”instId”:”BTCUSDT”}}
default:{“event”:”subscribe”,”arg”:{“instType”:”mc”,”channel”:”candle1m”,”instId”:”BTCUSDT”}}
RSI of ETHUSDT is 61.609187
61.60918688948859
{“code”:”40762″,”msg”:”The order size is greater than the max open size”,”requestTime”:1675551312471,”data”:null}
{“code”:”40762″,”msg”:”The order size is greater than the max open size”,”requestTime”:1675551312471,”data”:null}
RSI of BTCUSDT is 62.031531
RSI of ETHUSDT is 61.579043
61.57904314489083
{“code”:”40762″,”msg”:”The order size is greater than the max open size”,”requestTime”:1675551313241,”data”:null}
{“code”:”40762″,”msg”:”The order size is greater than the max open size”,”requestTime”:1675551313241,”data”:null}
허걱~ 이 뭐꼬?
겁나 당황하면서(이러면 안되지만) 뭔지 찾아보니 우리의 테스트 코드가 주문을 여러개 날린 것이었습니다.
코드에 따르면 캔들이 업데이트 될때마다 주문을 낸 것이지요 비트코인을 1000테더에 사라고 했기에 망정이지 체결됐더라면 큰일 날 뻔 했습니다.
비트겟은 sandbox를 제공하지 않나요? 찾을 수가 없네요. 실제로 거래소에 주문을 내려니 고려사항이 많네요.
일단은 우리 코드가 다음과 같은 요구사항을 만족해야 합니다.
BeeBot 구현 시 요구사항
- 주문을 낸 다음 처리결과를 기다려서 주문이 잘 접수 되었는 지 확인한다.
- 접수 되었다면 해당 코인에 대해서는 신호가 발생하더라도 더이상 주문을 내서는 안된다.
- 체결여부를 추적 확인해야한다(주문 물량이 한꺼번에 모두 체결되지 않으므로)
- 체결 결과에 따라서 주문을 취소하거나
- 체결된 포지션에 대해서는 다음 액션을 하기 위해 추적 감시해야 한다.
갈수록 산이군요. 돈이 얽힌 문제라 복잡합니다.
우리의 비봇이 이정도로는 스마트해야 자산을 불려 줄 테니까요.
산이 높고 험하더라도 한걸음씩 가면 되니까 걱정은 말아야지 하면서도 나오는 한숨 한번 푹~ 쉬어주고 다시 달립니다.
이제 봇만 만들면 되는 줄 알고 덤볐는데
우리가 알게된 사실은 봇을 돌리기 위해 필요한 것들이 더 있다는 것입니다.
마저 준비를 해야겠죠.