트레이딩 봇 개발 일기 - 1

2 min

language: ja de fr ko

안녕하세요, 무능입니다.
작년쯤부터 계속 이것저것 하고 있는 봇 이야기입니다.


서론

지금까지 백테스트는 여러 가지 해봤지만 그 과정에서 여러 시행착오를 겪었습니다만, 결국 실제로 봇을 만들기 시작하는 것이 이야기가 빠를 것 같다고 생각하기 시작해서 해봤습니다.
백테스트의 어려움은 긴 시간 축으로 백테스트를 하면 기술 지표의 파라미터를 변화시켰을 때 결국 시도로 인해 최대 수익 결과에 데이터 편향이 발생하므로, 일정 기간으로 OHLCV를 잘라내야 합니다. 그게 귀찮네요.

파일 구조

작년부터 계속 단일 파일main.py에 마구 써 내려갔지만, 좀 개선했습니다.
시그널 계열이 상당히 중복될 수 있어서 각각 분리하도록 했습니다.

Image

실제로는, signals 하위에서는 각각
bull/bear, go/stop을 반환하기만 하고, 그 반환값을 받은 후에 main.py 측에서 주문을 실행하기만 합니다.

  • 매매
    • bull/bear의 반환값이 모두 갖춰지면 방향성에 진입
  • 거래 조건
    • go/stop으로 판단하여 stop의 반환값이 하나라도 돌아오면 진입하지 않음

현재 프로세스 자체는 데몬화하지 않고 cron으로 실행하고 있습니다.

주문량

가장 큰 과제점이지만, 원금의 몇 %로 매수한다고 하고 있습니다.
이 점을 ATR 등으로 가변식으로 하지 않으면 상승 후 횡보장 진입 시 상당한 자본을 감소시키는 요인이 될 수 있습니다.
그 외에도, 어떻게든 한 번 자금이 늘어난 후에 저장하는 방법을 모색 중이지만 근본적인 해결책은 나오지 않고 있습니다.

시그널 모듈화

가장 잘한 부분이지만, 이 구조 덕분에 중복을 방지할 수 있었던 것은 상당히 큽니다.
또한 LLM에 던질 때도 순식간에 생성하기 쉬운 상황이 되었습니다.
예를 들어, 어느 정도 샘플 코드를 하나 던지고 최종적으로 반환값으로 돌아오는 함수 구현만 하면 됩니다.

과제점

  • 주문량 동적 조정
  • 이익 확정/손절매 동적 조정
  • 거래 종목 선정

특히 마지막 거래 종목 선정에 관해서는 단기적으로 트렌드가 나타나는 종목이 있다면 그것을 따라야 하지만, 그것을 감지하여 주문까지 실행하려면 애초에 단기 트렌드로서 거래해야 할 종목으로 판단하는 조건을 어떻게 해야 할지가 또다시 골치를 썩입니다.

언어에 관해서는 애초에 속도 중시의 아비트라지 봇과는 다르므로 Python 외에 다른 언어로 이행할 이유도 없지만, 이번과 같은 구조라면 함수 임포트 자체의 설계로는 Go가 다음 선택지로 좋을지도 모르겠네요.

그래서 차익거래 봇과는 다른 접근 방식으로, 거래 봇 자체를 쓰는 사람이 별로 없어서 써봤습니다.
그럼 또 뵙겠습니다. 잘 부탁드립니다.

Related Posts