본문 바로가기
Algorithm Trading/ComDon 프로그램 개발이야기

1. ComDon 자동매매 프로그램 계획

by 컴돈AI 2023. 12. 22.

목차

    ComDon 자동매매 프로그램 계획

    • 코인 현물 / 선물 자동매매 프로그램과 주식 현물 거래 자동매매 프로그램을 만들 것입니다.
    • 코인 현물 / 선물
      • TradingView의 alert 기능을 이용할 것입니다.
      • TradingView의 PineScript를 통해 매매신호를 등록해두어, 해당 신호가 발생했을때 자동매매 프로그램으로 Webhook 메시지를 이용하여 매매를 하도록 만들 것입니다.
      • ccxt 라이브러리를 이용할 것입니다.
    • 주식 현물
      • 이베스트투자증권의 Open API를 이용할 것입니다.
    • 코인 현물/선물 프로그램과 주식 현물 프로그램은 분리해서 만들 예정입니다.
      • 코인 현물/선물 프로그램
        • 백테스팅 : TradingView PineScript 이용
        • 매매 : 백테스팅때 진행한 PineScript의 매매신호를 그대로 사용하여 매매신호가 발생할경우 alert기능을 이용한 Webhook을 통해 매매를 진행할것입니다.
      • 주식 현물 프로그램
        • 백테스팅 : 직접 2000여개가 넘는 주식 종목의 1분봉 데이터를 수집하여 백테스팅을 진행하거나, 거래대금 순으로 몇 종목을 추려서 TradingView를 이용해 보다 정확한 백테스팅을 진행할 것입니다. (TradingView를 이용하면 초단위까지도 백테스팅이 가능하여, 보다 실시간 매매에 가까운 백테스팅이 가능해집니다. 하지만 매일 거래대금 상위 종목들에 대해서 일일히 비교를 해봐야하기때문에 다소 번거로운 단점이 있습니다.)
        • 매매 : 이베스트투자증권의 Open API를 이용할 것입니다. 이베스트투자증권의 조건검색이라는 기능을 이용하여 나만의 매매조건을 만족하는 종목들을 선별해 조건검색에서 추출되면 해당 종목들을 매매할 것입니다.

    프로그램을 분리해서 개발하는 이유

    • 처음에는 TradingView의 alert 기능으로 주식과 코인을 모두 거래할 수 있는 프로그램을 만들려고 했습니다. 하지만 TradingView의 alert 기능은 총 400종목 제한이 있어, 총 2000개가 넘은 주식에 대한 alert를 모두 발생시킬수 없기때문에 주식에 대한 프로그램은 증권사의 조건검색 API를 이용하기로 하였습니다.
      • 코인의 경우는 보통 BTC,ETH 등 거래대금이 많은 종목들은 한정되어 있기 때문에 몇 종목만 alert를 등록해서 진행하면 됩니다.
      • 주식의 경우, 당일 변동성을 이용한 단타를 치기위해서는 당일 거래대금 상위 종목을 이용해야합니다. 하지만 당일 거래 대금 상위 종목을 선별하는 TradingView의 PineScript 코드는 존재하지 않습니다. (request.security 코드를 이용하여 모든 종목들에 대한 거래대금을 가져와서 상위 종목을 추려내는 방법을 생각할 수도 있지만, 이것마저도 request.security의 경우 40개 제한이 걸려 있어 불가능하였습니다.) 따라서 증권사의 조건검색식을 이용하여 거래대금 상위 종목을 가져오는 방법을 통해 매매하는 방식을 생각하였습니다.
        • 이베스트투자증권에서는 최근 2024년 1월 15일(월)에 OPEN API 내 조건검색 서비스를 추가하였습니다. (이베스트투자증권 선정 이유)
    • 또한 주식시장의 경우 단일가 매매를 포함하지 않으면 09:00~15:30 까지만 장이 열려있고, 코인의 경우는 24시간 장이 열려있기때문에 따로 프로그램을 만드는 것이 효율적이라고 판단하였습니다.

    백테스팅에서 TradingView를 선택한 이유

    • 수많은 종목들의 데이터를 직접 수집하고 백테스팅을 진행하기에 한계 존재. 
      • 완전히 정확한 백테스팅을 진행하기 위해서는 거의 초단위로 백테스팅이 진행되어야 하기 때문에 초단위로 모든 데이터를 수집한다는 것은 많은 용량을 차지해 비용적으로 어려웠습니다.
      • TradingView는 바돋보기 기능등을 통해서 분봉단위로 백테스팅을 하더라도 초단위까지 검증을 진행해주어 보다 실시간 매매와 비슷한 체결시점을 생성해줍니다.
    • TradingView의 PineScript 언어를 통한 백테스팅을 손쉽게 진행 가능
      • 실제 직접 파이썬에서 하나하나 코드를 매번 짜고 테스트하는 것보다 많은 트레이더들이 사용하는 트레이딩 전문인 TradingView에서 백테스팅전용으로 만들어진 PineScript 언어를 이용해서 백테스팅을 진행하는 것이 더 효율적이라고 판단하였습니다.
    • PineScript를 이용하면은 백테스팅 코드 그대로(또는 조금의 수정을 거치면) 바로 실시간 매매에 적용 가능
      • 기존 파이썬의 경우 백테스팅 코드 따로, 실제 매매 전략 코드 따로 만들어야 하는 번거로움이 존재하였습니다. 하지만 PineScript의 경우, 거의 코드 그대로 또는 조금의 수정만 거친다면 그 신호 그대로 적용하여 실시간 매매에 적용이 가능하도록 만들 수 있습니다.
    • 실제 거래소와 TradingView 사이트의 차트 사이에 딜레이는 거의 없기 때문에, TradingView 사이트에서 데이터를 받아오고 서버에서만 바로바로 코드가 진행된다면 아무런 문제 없이 효율적으로 자동매매 프로그램을 만들 수 있을 것이라고 판단하였습니다.
    •  

    FastAPI를 선택한 이유

    • 비동기 프로그래밍 지원 
      • 매매에 있어서 딜레이는 치명적입니다. 특히 여러 종목을 동시에 처리할 경우 동시에 신호가 발생하게 될경우 동기적으로 프로그램을 작성하면 여러 종목들을 한번에 처리하지 못하고 순서대로 처리가 되어서 딜레이가 발생하게 될것입니다. 
      • FastAPI는 Python의 비동기 프로그래밍 기능을 지원합니다. 이를 이용한다면 이제 매매신호를 받아오고, API를 통해 매매신호를 처리하는 I/O 작업을 딜레이 없이 처리가능하도록 만들 수 있게 됩니다.
      • 정리하면, 딜레이 없이 처리하기 위해 비동기에 특화된 프레임워크인 FastAPI를 선택하였습니다.