관리 메뉴

Leo's Garage

smtm #1 - TDD 맛보기 본문

Study/AutoTradingBot

smtm #1 - TDD 맛보기

LeoBehindK 2023. 1. 6. 23:15
728x90
반응형

AutoTradingBot을 공부하기로 했다.

기존에 따로 만들고 있고 운영하고 있는 Bot이 있긴 한데, Bot을 업데이트하기 전에 다른 분들이 만들어 놓은 여러가지 자동 매매 프로그램을 공부해보고자 한다. 

첫번째 SW는 smtm이다.

https://github.com/msaltnet/smtm

 

GitHub - msaltnet/smtm: It's a game to get money

It's a game to get money. Contribute to msaltnet/smtm development by creating an account on GitHub.

github.com

필명 맛소금님이 개발하신 smtm(show me the money)이다.

이 분의 약력을 얼핏 살펴보았는데 정확하게 잘 알지는 못하지만 임베디드 베이스를 가지고 계신 것과 같고 앱, 웹 개발도 하신 것 같다. 

자동차 임베디드 베이스에 앱을 취미로 만들고 있는 내 입장에서는 약간의 동질감을 느꼈다랄까...ㅎㅎ

이 분이 해당 SW를 개발하시면서 지필하신 책을 바탕으로 SW를 분석하면서 공부를 해볼까 한다.

 

smtm은 파이썬으로 작성된 코드이다.

우선 python이 워낙에 다양한 package들이 존재하고, 아무래도 다루기가 쉽기? 때문에 많은 자동매매 프로그램들이 python으로 작성되지 않나 싶다.

역시 다년간의 경험을 가진 개발자라는게 느껴지는게 책의 초반부터 TDD를 언급하시면서 테스트의 중요성을 강조하신다.

이 말에 백번 동감하는 바이다. 

이른 시점의 Test보다 더 값싼 Rework은 없는 것 같다. (최근에 아주 혹독하게 경험 중..ㅠㅠ)

아무튼 앞 장에 요구사항이나 이런 부분은 물론 중요하지만 블로그에는 따로 작성하도록 하고 쭉 넘어가서 Simulator 개발에 unit test 부터 정리해보도록 하겠다.

 

사실 unit test를 현업에서만 활용해봤지, 이렇게 사이드 프로젝트에 적용해본 적은 사실 없다.

특히나 자동매매 프로그램을 만들 때는 성능을 얼른 확인하고 싶어서 사실 디버깅 조차 꼼꼼하게 하지 않은게 사실이다.

저자 분은 이런 부분까지 세심하게 작성한게 참 대단한 것 같다. 

 

unittest module을 사용하여 테스트 항목을 생성하였는데 

가령 이런 식이다. 

import unittest

class TestMethods(unittest.TestCase):
	
    def test_isupper(self):
    	foo = "FOO"
        self.asserFalse(foo.isupper())

기본적으로 test method는 test_로 prefix를 가져가야 테스트가 수행된다. 

test 실행 시의 명령어는 

python -m unittest discover ./tests *test.py -v

이런식인데, ./tests는 예시이고, test method가 파일이 있는 위치를 작성하고, *test.py는 실제 python file 이름을 적어주면 된다.

-v 옵션은 테스트 내용이 출력되게 하는 부분이다.

이런 명령어는 vscode에서 task.json에 task로 등록해서 사용하면 더 편리할 수 있다.

 

TDD(Test Driven Development)의 핵심은 개발 이전에 테스트를 작성하는 것이다.

그럼 테스트는 어떤 것을 가지고 작성할 수 있을까? 바로 요구사항이다.

저자가 든 예시를 가지고 연습해보자

 

Data Provider라는 모듈을 만든다고 하자.

이 모듈의 요구사항은 다음과 같다.

거래소의 REST API로 과거 거래 데이터를 수집할 수 있어야 한다.

 

업비트 개발자 사이트에 접속하면 과거 거래 데이터를 가져올 수 있는 REST API 예시를 친절하게 제공하고 있다. 

예시처럼 HTTP GET request를 하게 되면, 그에 해당하는 과거 데이터를 받을 수 있는 것이다.

curl --request GET \
     --url 'https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=50' \
     --header 'accept: application/json'

위의 예시는 업비트에서 제공된 예시이다.

해당 예시 내에 url 부분을 브라우저에 입력하면 아래와 같은 결과가 브라우저 창을 통해 나오게 된다.

해당 결과는 호출 시점에서 가장 최근 50개의 비트코인 원화 마켓의 1분봉 데이터이다.

다음에는 해당 REST API를 호출하는 부분에 대하여 TDD로 구현하는 부분을 리뷰하도록 하겠다. 

 

이 리뷰는 아래 책을 바탕으로 작성되었습니다.

http://www.yes24.com/Product/Goods/107635612

 

암호화폐 자동매매 시스템 만들기 with 파이썬 - YES24

이 책은 암호화폐 자동거래 프로그램의 설계부터 개발 후 활용까지 모든 과정을 다루고 있다. 파이썬의 기본적인 문법부터 설명하고 있지만 대부분은 실제 코드를 개발하는 과정과 함께 파이썬

www.yes24.com

 

728x90
반응형

'Study > AutoTradingBot' 카테고리의 다른 글

smtm #3 - mock  (0) 2023.01.15
smtm #2 - TDD 예시  (0) 2023.01.15
Comments