본문 바로가기
AutoBot

업비트 자동매매 - Upbit Auto Trading No.12 (Final..그리고 후기)

by zemba 2022. 2. 13.
반응형
SMALL

안녕하세요~Zemba입니다~ㅎ 드디어 마지막 포스팅에 오게 되었네요 ㅎㅎ 뭐..... 좋은 글은 아니었다고 생각하지만 그래도 읽어주시는 분들이 계시다는 것만으로도 만족합니다 ㅎ 이렇게 저도 하나하나 배워가는 부분도 만족스럽고 결과가 좋으면 더 좋겠지만 지금 코인 시장이 반등을 준비 할랑 말랑 하는 단계라서 우선은 지켜봐야 할 것 같아 보이네요 ㅎㅎ 그래도 백테스팅을 한대로 1년 정도는 지켜봐야 하지 않을까요? ㅎㅎ 그래서 1년 동안 지켜보면서 수익을 한번 보려고 합니다. 또한 차트를 계속 확인하면서 문제가 없는지 또한 모니터링하면서 좀 더 좋은 설정 등은 없는지를 조금씩 변경해가면서 적용해볼 예정입니다.

아무튼 지난번 포스팅에서는 서버 세팅까지 완료하여 최종 24시간 돌아가는 자동매매를 만들었지만 여기서 좀더 수정하여 본인의 전략 등을 적용하는 방법과 설정 등을 어떻게 편하게 변경할 수 있을지 등등에 대해서 한번 고민해본 내용을 포스팅해보겠습니다~ ㅎ


자 우선 제일 핵심이 되는 부분이라고 한다면 실제 거래 알고리즘이 있는 부분이겠죠? 거래를 담당하는 부분의 방법을 다르게 하거나 변형하고 싶을때 이 부분을 수정하시면 됩니다. 그래서 구성한 프로젝트의 구조를 한번 설명드릴게요.

이미지에서 보시는 것과 같이 저는 indicator라는 패키지와 trade라는 패키지를 분리하였습니다. 지표에 관한 정보를 얻는 코드의 모음은 indicator에 모아둡니다. rsi, macd, sma, ema 등의 지표겠죠? 이러한 지표들은 본인이 사용하시는 차트를 구현해서 추가해주시면 해당 지표 정보를 얻을 수 있을 것입니다. 그렇기 때문에 각각의 지표들을 분리하여 관리한다면 예상되시겠지만 trade시에 각 지표들을 조합하여 사용할 수 있으실 겁니다 ㅎㅎ

이어서 trade의 구조도 말씀 드리면 전에 코드를 작성했을 때 티커 별로 적용할 전략의 코드 위치를 보셨을 겁니다. 기억이 나지 않을 수 있기 때문에 한 번 더 공유드리면....ㅎ 아래 코드를 보시면 됩니다.

for ticker in target_ticker:
    ticker_msg.append(f"# {ticker} process start !\n")
    rsi1428_trader(upbit=upbit, ticker=ticker, ticker_map=ticker_map, period='minute60',
                   minimum_buy_price=minimum_buy_price, ticker_msg=ticker_msg)
    # macd_rsi1428_trader(upbit=upbit, ticker=ticker, ticker_map=ticker_map, period='minute60',
    #                     minimum_buy_price=minimum_buy_price, ticker_msg=ticker_msg)
    ticker_msg.append(f"# {ticker} process End !\n")

패키지 구조에 있는 rsi1428_trader를 호출하고 있지만 아래 주석처럼 다른 전략을 적용하고 싶을 경우에는 자신만의 trader를 생성하여 내부에 자신만의 알고리즘 전략을 구현하여(매수, 매도 포인트 구현) 이 부분을 교체하신다면 본인만의 전략을 더 구현할 수 있다고 생각합니다. 그래서 이렇게 자신만의 전략을 만들고 적용해 나가는 방식으로 변경해 나간다면 더 좋은 수익을 얻을 수 있을 것이라고 생각합니다.
또한 지금 제가 포스팅한 방식은 특정 티커를 지정하여 거래 알고리즘을 수행하도록 구성해두었지만 Python을 조금만 더 공부하셔서 전체 티커를 기준으로 각 지표에 맞는 전략의 대상들을 추출하고 난 다음에 매매 전략을 적용시킨다면 더 좋겠죠?! ㅎㅎ 여러 가지 방법이 있으니 이후부터는 이런 응용들이 가능합니다~ ㅎㅎ


자 그리고 또 한 가지 방법이 있습니다. 지금 작성된 포스팅이 텔레그램을 이용하여 거래 사항을 모니터링하고 Config를 이용하여 거래를 진행하는 방식이지만 매번 Config를 변경할 때마다 코드를 수정하고 서버에서 다시 수행을 하는 과정이 반복되게 되면 매우 불편할 것입니다. 이를 보완하기 위해서 별도의 코드를 작성하여 우리가 만든 main.py를 실행과 별도로 한대의 python코드를 추가로 실행하여 처리하면 텔레그램을 통해서 Config를 수정할 수 있습니다. 간략히 설명을 드리면 ( 이미 아시는 분도 계시겠지만....ㅎ )

from telegram import InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import ConversationHandler, Updater, CommandHandler, CallbackQueryHandler

conv_handler = ConversationHandler(entry_points=[CommandHandler('config', config)],
                       states={ACTION: [CallbackQueryHandler(action)],
                               PERIOD: [CallbackQueryHandler(period)],
                               OVER_RATE: [CallbackQueryHandler(over_rate)],
                               UNDER_RATE: [CallbackQueryHandler(under_rate)],
                               TICKER_COUNT: [CallbackQueryHandler(ticker_count)],
                               UP_RSI_OVER: [CallbackQueryHandler(up_rsi_max)],
                               UP_RSI_UNDER: [CallbackQueryHandler(up_rsi_min)],
                               UP_RSI_CHASE_UNDER: [CallbackQueryHandler(up_rsi_chase_min)],
                               UP_RSI_MIN_OVER_RATE: [CallbackQueryHandler(up_rsi_min_over_rate)],
                               DOWN_RSI_OVER: [CallbackQueryHandler(down_rsi_max)],
                               DOWN_RSI_UNDER: [CallbackQueryHandler(down_rsi_min)],
                               DOWN_RSI_CHASE_UNDER: [CallbackQueryHandler(down_rsi_chase_min)],
                               DOWN_RSI_MIN_OVER_RATE: [CallbackQueryHandler(down_rsi_min_over_rate)],
                               SHOW_CONFIG: [CallbackQueryHandler(show_config)]
                               },
                       fallbacks=[CommandHandler('config', config)])
updater.dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()

Telegram의 ext 패키지에 ConversationHandler라는 기능이 존재합니다. 이 기능을 코드로 구현하면 어떤 설정을 어떻게 변경할지에 대해서 정의를 해두고 텔레그램에서 아래와 같이 설정 명령을 입력해주면 옵션들이 등장하면서 터치를 통해서 설정을 변경할 수 있습니다.

이런 식으로 텔레그램 Bot에 버튼을 통해 설정을 변경할 수 있도록 대화형 질문이 나오고 응답에 대한 부분들을 구현해주고 후처리를 구현해주시면 설정부분을 변경할수 있습니다. (사실 이 부분은 의도대로 만들기 위해서는 약간의 막일이 필요합니다..)
또한 유의해야 할 점은 아까도 언급했지만 기존 자동매매 코드에서 해당 코드를 작성하는 것이 아니라 별도의 파일로 실행해야 한다고 말씀드렸던 부분이 가장 중요합니다. 이 ConversationHandler의 기능은 이 텔레그램 Bot을 모니터링하면서 입력이 들어오는지 계속해서 체크를 하고 있기 때문에 별도로 수행되지 않으면 안 됩니다. 대화를 하기 위해서 계속 기다리고 있다고 생각하시면 됩니다. 자세한 구현에 대한 부분은 저도 구글을 찾아보면서 했기 때문에 많은 자료가 있을 것이라고 생각됩니다. ( 혹시나 궁금하거나 하시면 말씀 주셔도 됩니다~ )

이 정도로 우선 활용하는 방법에 대해서 정리를 해보았습니다. 사실 아이디어만 있으면 어떠한 자동거래 매매의 환경을 구축하는 부분은 다양하고 더 좋은 방법들이 많이 있을 것 같습니다. 저는 우선 이 작업을 진행하면서 느낀 점을 좀 공유드려볼까 합니다.

우선 자동매매에 대한 부분을 전혀 몰랐기 때문에 책도 구입해서 읽어보았습니다. 다만 주식 자동거래 시스템에 대한 책이었긴 했습니다만 결국에 내용을 살펴보니 책 내용의 거의 대부분이 python을 활용하여 거래 시스템에 대한 환경 구축에 대한 내용이었고 1% 정도에 매매 거래 기준에 전략에 대해서 설명이 되어있었습니다. 그래서 사실 책이 도움이 많이 되지는 않았습니다. 또한 코인과 주식은 또 다른 부분이 있기 때문에 이 부분에서 약간 혼란이 오기도 했었고요 ㅎㅎ 결국 시스템 환경을 구축하는 부분은 이렇게 포스팅하면서 정리를 하였지만 실제로 지금 전략을 만들고 적용해도 가장 큰 문제는 어떠한 기준으로 매매를 할 것인지에 대한 부분이 아직도 제가 정리가 잘되지 않은 것 같습니다. rsi1428이라는 전략을 만들긴 했지만 최근에 비트코인의 40$가 깨지면서 다른 알트 코인들도 전체적인 대 하락을 겪고 나서 최근에 다시 추세가 상승하면서 rsi의 과매수가 발생하면서 겨우 회복한 코인들을 10%씩 팔기 시작했습니다. 여기서도 흠..... 여기부터는 더 기다려야 하는 거 아닌가라는 그런 생각들이 많아지면서 점점 제가 세운 전략에 확신이 점점 없어지기 시작했습니다.

왜 자꾸 이런 생각이 드는지에 대해서 고민하다가 차트를 좀 더 공부해 보기로 결심했습니다. 주변에 주식이나 코인을 거래하는 분들도 만나서 물어보고 여기저기 많이 찾아 보았지만 결론은 하나로 좁혀지는것 같았습니다. 일반적으로 개미들은 뇌동매매를 하지만 재무재표등이나 이런 기업의 가치들을 분석하고 투자하는것이라고 얘기들을 합니다. 그러나 실제로 수익이 얼마나 발생했냐고 물어보면 큰 이익을 가져간신 분들을 많이 보지 못했습니다. 그러나 또 다른분은 차트를 기준으로 거래하여 수익으로 차도 바꾸고 자본금도 계속 늘려간다는 분의 얘기도 들어봤습니다. 결국 저도 생각을 해보고 내린 결론은 재무재표등의 기업정보는 이미 누구나 전부 접근할수 있는 정보이기 때문에 기본분석으로만 주식을 투자하는것은 대부분의 사람들이 가능할것이라고 생각되었습니다. 하지만 차트에 대해서만은 유투브, 블로그등을 찾아볼때마다 나오는 얘기들이 최종적으로는 차트공부를 해야한다, 차트에 대해서 이해를 해야한다 라는 내용들을 많이 볼수있었습니다. 그러고나서 또 곰곰히 생각을 해보고내린 결론은 공부를 해야할 양을 생각해 보았습니다. 일반적인 기업의 정보를 분석하는것은 공부하는게 비교적 차트보다는 적을 것이라고 생각 되었습니다. 깊이를 알아가고 시장의 흐름을 이해하고 세력에 대한 움직임등을 알수 있는 부분은 차트라고 생각 되었습니다. 


이러한 이유로 저는 차트를 좀 더 공부해 보기로 결심을 하였습니다. 지금은 RSI와 MACD에만 의존하지만 다른 지표들에 대해서도 좀더 알아보면서 각가의 지표들을 공부하다보면 각각의 매수, 매도 포인트가 있을것이고 그것이 어떤 흐름의 시장에 적용되었을때 좋은 성과를 낼수 있는지 등등을 알아보고 최종적으로 나중에 이를 통하여 최종 전략을 구현해 내면 다시 나만의 알고리즘을 만들수 있다고 생각하였습니다. 그렇다고 제가 기본분석(재무재표등 기업가치 분석)을 하시는 분들을 부정하는것은 아닙니다. 제가 생각하는것이 잘못된 것일수도 있고 맞을수도있지만 저는 제 경험에 따르면 공부하기 쉬운것보다는 어려운게 좀더 득이 된다는 느낌을 많이 받아왔던 사람인지라...ㅎㅎ 좀더 어려운 분야를 공부해보려고 합니다. 그래서 각각의 지표들을 통한 백테스팅을 다시 해보면서 저의 전략을 구축하는 과정을 해야할것 같습니다. 지금 만들어둔 이 자동매매가 1년정도 수행되고 수익률 결과를 포스팅할때까지 틈틈히 블로그에 각각의 지표를 공부하여 백테스팅을 한 포스팅을 작성할까 합니다.

그동안 봐주셔서 감사합니다. 좀더 성장한 다음에 돌아오겠습니다!
궁금하신부분은 별도로 문의하셔도 됩니다. 감사합니다!!

저는 전문 투자자도 아니고 그냥 일개 개미에 불과하면 그냥 개발자이기 때문에 전문적인 지식이 없어 실제 투자의 결정은 본인에게 있습니다.

반응형
LIST

댓글