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

avatar

드디어 업비트 지정가 자동 매수/매도 프로젝트가 완성이 되었습니다. 실 매매를 하면서 오류 몇 개 수정하였고, 지금은 정상적으로 동작을 합니다.

프로그램 test 하는 방법에 대하여 기술합니다.


최초에 매수한 것이 없다고 가정을 하고 시작을 합니다.
일전에 정의한 자료 구조는 아래 네 가지 값을 이용합니다.
(이전 매수량, 이전 매도량, 현재 매수량, 현재 매도량)

최초에 시작할 때는 이전 매도량에 매도 주문에 해당하는 수를 넣어서 시작을 합니다. 그렇게 되면 현재 매도량을 확인해 보면 0으로 나오기 때문에(실제 매도 주문이 없으므로) 신규 매수 주문이 들어갑니다.

업비트 steem 매매 내역을 보면 의외로 거래가 많이 안됩니다. 그래서 주문이 성사될 때까지 하염없이 기다려야 합니다. 그래서 매수 주문이 되었다는 것을 확인하기 위하여 매수 주문 후 취소를 합니다. 이렇게 되면 매수가 된 상황으로 인식을 합니다. 반대로 매도 주문 후 매도 주문을 취소하면 매도 주문이 이루어진 것으로 인식을 합니다.

이런 식으로 주문/취소를 반복하면서 실제 매매가 된 것과 같은 환경을 만들어서 매매가 잘 이루어지는지 확인을 했습니다.

다음은 unittest에 대한 부분입니다.
매매가 잘 이루어졌는지 test를 위하여 아래과 같이 unittest 함수를 만들었습니다.

이 test 함수에는 아래 기능을 test합니다.

  • 최초 주문이 잘 들어가는지 확인
  • 최소 주문이 들어간 상태에서 매매가 없는 경우 원하는 값으로 돌아오는지 확인
  • 매수 주문이 체결된 후 매도 주문이 들어갔는데, 바로 체결이 된 경우 확인

이와 같이 각 조건에 맞는 값을 설정하면서 check_one_pair_trading() 함수의 결과 값이 원하는 값과 같은지 확인하는 과정을 계속 반복합니다.

    def test_trading(self):
        pair = {'ticker':TRADING_TICKER, 'buy':282, 'sell':301, 'vol':TRADING_VOL, 'tr_info':init_tr_info}

        # 최초 : 매수 주문을 유도하는 조건 설정
        pair['tr_info']['pre_buy'] = 0
        pair['tr_info']['pre_sell'] = 10
        pair['tr_info'] = check_traded(pair)
        
        self.assertEqual(pair['tr_info'], {'pre_buy': 10, 'pre_sell': 0, 'buy': 0, 'sell': 0})

        # pending order info
        pair['tr_info']['buy'] = 10
        pair['tr_info']['sell'] =0
        pair['tr_info'] = check_one_pair_trading(pair)
        # buy 10 유지, 이전상태도 10 nothing changed
        self.assertEqual(pair['tr_info'], {'pre_buy': 10, 'pre_sell': 0, 'buy': 10, 'sell': 0})

        # buy 체결, 
        # pending order info
        pair['tr_info']['buy'] = 0
        pair['tr_info']['sell'] =0
        pair['tr_info'] = check_one_pair_trading(pair)  # sell 주문
        self.assertEqual(pair['tr_info'], {'pre_sell': 10, 'sell': 0, 'buy': 0, 'pre_buy': 0})

        # sell 주문하자마자 바로 매도
        # sell 10 유지, 이전상태도 10 nothing changed
        # pending order info
        pair['tr_info']['buy'] = 0
        pair['tr_info']['sell'] =10
        pair['tr_info'] = check_one_pair_trading(pair)
        self.assertEqual(pair['tr_info'], {'pre_buy': 0, 'pre_sell': 10, 'buy': 0, 'sell': 10})

unittest 덕분에 실제 거래를 하지 않고도 로직이 잘 동작하는지 확인이 가능하였습니다. upbit와 연계가 되면 아무래도 실주문이 들어가기 때문에 실수를 하는 경우에 손실이 발생할 수 있기 때문에 이렇게 unittest를 통해서 로직을 검증하는 것은 필수 과정으로 보입니다.


기본적인 기능은 개발이 되었지만 아직 할 것들이 많이 남아 있습니다. 실제 돈이 걸린 이런 프로그램은 로직이 잘 동작하는 것도 중요하지만 예기치 못한 경우를 (버그로 인한 무한 매수 혹은 무한 매도 등등) 대응하는 별도 로직도 필요합니다. 프로그램이 오동작으로 죽은 후 다시 시작될 때 현재 매매 상태를 확인하여 반영하는 부분도 필요합니다. 이런 부분을 좀 더 보강을 해서 마무리할 예정입니다.



0
0
0.000
8 comments
avatar

jcar토큰,
8월 구독 보팅입니다.
행복한 8월 되세요. ^^

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

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

아~ 이 로직은 가격을 미리 설정해놓고 하는건가요? 볼때마다 신기합니다 @.@

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.419 which ranks you at #2372 across all Steem accounts.
Your rank has improved 187 places in the last three days (old rank 2559).

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

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server

0
0
0.000