[암호화폐] 프로젝트#1 : 업비트 지정가 자동 매수/매도하기[2]

avatar
(Edited)

업비트 지정자 자동 매수/매도 프로그램을 개발 중입니다. 오늘은 두 번째 이야기입니다.

지정가 자동매수/매도를 하기 위해서는 미체결 주문을 바탕으로 매수를 해야할지 매도를 해야할지를 결정해야 합니다. 계속 고민 중인데 고려해야할 경우의 수가 많아서 시간이 많이 걸리는 군요.

매매는 돈이 걸려있기 때문에 실수를 하면 손해가 발생합니다. 이런 경우에는 개발한 프로그램에 대한 test를 충분히 해야합니다. 그런데 실거래를 하면서 test를 할 수는 없으니 가상으로 test를 해 보아야 합니다.

개발한 소프트웨어이 문제가 없음을 test하는 방법은 여러가지가 있지만 요즘 많이 사용하는 것이 unittest를 이용하는 것입니다. 그래서 이번 프로젝트에는 unittest를 이용하여 test를 하면서 개발을 진행하도록 할 예정입니다.


우선 unittest를 어떻게 사용하는지 배워봅니다.

[1]번에 나오는 문서를 기반으로 unittest사용법을 설명합니다.

  • unittest
    setUp(self): 테스트 시작되기 전 불리는 함수
    tearDown(self): 테스트 종료 후 불리는 함수
    test_XXX : test하고자하는 함수명. 항상 test_로 시작한다.

우선 예제 코드를 봅시다.
아래 예제는 입력한 두 숫자를 더하는 함수와 절대값을 구하는 함수입니다. unittest가 정상적으로 동작하는지 확인하기 위하여 절대값을 구하는 함수에 음수인 경우에 대응을 하지 않은 상태입니다.

import unittest

def add(a, b) :
    return a+b

def sub_absolute(a, b) :
    return a-b

# TestCase를 작성
class CustomTests(unittest.TestCase): 
    def setUp(self):    # 테스트 시작되기 전
        pass
    def tearDown(self): # 테스트 종료 후 
        pass

    def test_sum(self):
        c = add(5, 10)
        self.assertEqual(c, 15)

    def test_abs(self):
        c = sub_absolute(5, 10)
        self.assertEqual(c, 5)

# unittest를 실행
if __name__ == '__main__':  
    unittest.main()

이 프로그램을 실행시켜보면 아래와 같이 오류가 있다는 결과가 나옵니다.

즉 test_abs라는 함수에서 (5-10)을 했는데 -5가 결과가 나와서 test 실패하여다는 내용입니다.

sub_absolute() 함수를 아래와 같이 수정한 후 다시 돌려보겠습니다.

def sub_absolute(a, b) :
    c = a-b
    if (c  < 0 ) :
          c *= -1
    return c

작성한 두 함수 모두 잘 동작한다고 하는군요.

이쯤되면 test하기 참 쉽다는 생각이 들 것입니다. 그런데 이렇게 test할 수 있는 함수를 만드는 것이 쉬운 일은 아닙니다. 이런 식으로 test를 하기 위해서는 함수가 독립적으로 실행이 될 수 있도록 잘 쪼개져 있어야 합니다. 일반적으로 프로그램들은 서로 얽혀있어서 특정 한 함수만 실행할 수 있도록 개발하기가 쉽지 않습니다.

하지만 요즘 추세는 unittest를 고려하여 프로그램 구조를 새롭게 설계하는 추세입니다. 그 이유는 test를 하는데 너무 많은 시간과 비용이 들기 때문입니다.

스팀엔진에 어떤 기능이 추가되면 최소 몇 시간씩은 다운되는 것을 경험하셨을 것입니다. 또한 버그도 많이 생기고요. 이런 문제를 줄이기 위해서는 test 기간과 인원을 늘려야 하는데, 이 모든 것이 비용이죠. 그래서 unittest는 어렵지만 함께 가야할 파트너라고 볼 수 있습니다.

본 프로젝트에서 unitest를 사용하여 자동으로 test가 될 수 있도록 개발을진행할 예정입니다. 이렇게 되면 개발 기간이 길어지겠지만 문제점을 빨리 발견할 수 있을 것으로 기대합니다.


[1] https://python-guide-kr.readthedocs.io/ko/latest/writing/tests.html



0
0
0.000
6 comments
avatar

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

0
0
0.000
avatar

jcar토큰 7월 구독 보팅입니다. 삼복 무더위, 건강하게 이겨나가세요. ^^

0
0
0.000
avatar

To listen to the audio version of this article click on the play image.

Brought to you by @tts. If you find it useful please consider upvoting this reply.

0
0
0.000
avatar

관심이 많은 분야입니다. 개발이 잘 진행되기를 바랍니다.

0
0
0.000
avatar

Hi @tradingideas!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.367 which ranks you at #2558 across all Steem accounts.
Your rank has improved 23 places in the last three days (old rank 2581).

In our last Algorithmic Curation Round, consisting of 135 contributions, your post is ranked at #58.

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers appreciate your great work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server

0
0
0.000