BeeBot 자동매매 프로그램 개발_3단계 CoinData에 실시간 자료 담기

BeeBot 자동매매 프로그램 개발_3단계 CoinData에 실시간 자료 담기

 

2편에서 다룬 CoinData 컨테이너는 websocket으로 유입되는 실시간 거래 정보를 코인별로 분류하여 담는 장치입니다.

각각의 코인은 초당 2회의 캔들 업데이트 정보가 유입되며, 또 티커 정보는 초당 10회가 수신됩니다. 따라서 10개의 코인에 대한 거래 데이터를 수신한다고 해도, 초당 120회(2 * 10 + 10 * 10 = 120)의 데이터가 수신됩니다.

 

마치 데이터의 폭우가 내리는 듯 합니다.

그러나 우리는 그것들을 CoinData에 잘 분류하여 저장할 것이기 때문에 걱정하실 필요가 없습니다.

바로 지금 이 순간 비트코인의 거래 정보를 보고싶다면 CoinData[“BTCUSDT”] 의 내용을 확인하면 되도록 해야합니다.

자 그럼 가 볼까요?

 

1. CoinData의 기능 구현

CoinData라는 컨테이너는 이미 만들어 놓았지만, 아직은 아무런 기능이 없는 깡통에 불과합니다.

이 깡통이 어떤 기능(function), 즉 websocket으로 부터 유입되는 랜덤 데이타를 각각의 코인별로 주기하여(레이블링) 담는 기능을 구현해야합니다.

 

그렇다면 요구사항이 아래와 같이 정리됩니다.

  1. CoinData가 데이터 분류 기능을 하는 function을 가지고 있다
  2. 해당 function 실행 → 데이터가 각각의 코인에 분류
  3. CoinData[“BTCUSDT”] → 비트코인의 거래정보 확보

 

이러한 내용으로 테스트 코드를 작성하면 다음과 같습니다.

 

데이터 분류 기능을 하는 function은 CoinData의 method로 구현될 것이고, method의 이름은 AddData입니다.

이름표에 적을 코인이름과 웹소켓(websocket)에서 수신한 캔들스틱(여기서는 static sample data)을 인자로 받습니다.

그 함수를 실행시켜준 다음에 그 속에 잘 들어가 있나 확인해 보고 안들어가 있으면 테스트가 FAIL하도록 만든겁니다.

 

아무것도 없으니까 이 테스트는 당연히 FAIL입니다. 그러나 컴이 뱉어내는 FAIL 사유가 우리에게는 필요한 거니깐요.

어떤 이유를 댈까요? 한번 맞춰보세요.

 

일단은 AddData라는 함수를 가정하고 run했기 때문에, 해당 함수가 없다는 FAIL 메세지가 나와야합니다.

그러나 개발과정_2단계에서 CoinData는 AddData라는 method는 인공지능이 구현하였습니다. 따라서 AddData라는 함수가 없다는 오류(FAIL)는 아닐 것입니다.

 

새롭게 등장한 타입들 Ohlcv와 CandleSticks에 대한 메세지가 출력되겠군요.

FAIL 메세지가 알려주는대로 데이타 타입을 CandleStick과 Ohlcv로 변경하는 작업을 해 주면 테스트가 통과될 겁니다.

여기서는 실제로 우리가 원하는 데이타를 한번 담아 보고, 또 잘 꺼낼 수 있는지 확인하는 작업입니다.

테스트가 통과되면 CoinData란 오브젝트는 자기의 역할을 수행하는데 아무런 문제가 없는 겁니다.

또 한가지 중요한 점은 사족을 달아서는 안됩니다. CoinData는 컨테이너 역할만 잘 하면 되는 것이지 다른 기능을 가져서는 부작용이 큽니다.

나중에 알게되겠지만, 어디까지나 미니말하게 구현해야 뒤탈이 없습니다.

 

2. CoinData에 자료 담기

이 글을 쭉 따라오신 분들은 이제 이 코드만 봐도 스토리텔링이 떠오를테지요.

컴퓨터를 버리고 산책을 하면서 지금까지의 내용을 머리속에서 시뮬레이션해 보세요.

우리의 코딩작업이 어떻게 실마리를 잡아서 작업에 착수했고, 어떻게 다음 작업을 콕집어냈는지에 대해 집중해 보세요.

이 코드의 내용은 다음과 같습니다.

  • CoinData의 instance를 준비한다.
  • MarketData의 instance를 준비한다.
  • MarketData의 메소드 StartDataProvider를 실행한다.
  • 5초동안 기다리면서 coinData의 UpdateInst channel을 listen해서 무엇이 수신되는지 프린트해 보고,
  • 최종적으로 coinData.data의 갯수가 0 이면 테스트 오류를 발생시킨다.

이 테스트를 통과하도록 하는 과정에서 해결해야할 과제가 확인됩니다.

이것도 지면이 부족한 관계로 비약이 많습니다.

대여섯개 테스트로 분할해서

하나씩 아주 조금씩 기어가면 그다지 어렵지 않습니다.

그러면 다음 단계에서는 자료가 담겨있는 CoinData를 이용해서 매매신호를 발생시키는 기능을 구현해야겠습니다.

기능을 구현하려면 그 기능을 갖는 오브젝트를 먼저 가정하고 그 오브젝트의 메소드로 기능을 부여하는 것이 소위 객체지향 개발 방법입니다.

그 오브젝트는 바로바로 매매전략이 되겠습니다.

소프트웨어는 손에 잡히지 않는 물건이기때문에 머리 속에서 쉽게 비쥬얼라이즈하기 위해서는 이 방법이 적합합니다.

 

잘 이해가 안되는 부분은 댓글로 질문 남겨주세요.

그럼 이만…

✔️ 함께 읽으면 좋은 글

BeeBot 개발과정 1편

BeeBot 개발과정 2편

자동매매 프로그램 제작 의뢰하기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다