PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 알고리즘 구축하기 (5) - 알고리즘 파일 생성하기

  • -

여태까지 조건검색식에 저장되어 있는 종목코드 리스트를 불러와서 해당 종목의 차트 데이터를 조회하는 부분까지 기능을 구현하였으니, 이제는 차트 데이터를 기반으로 알고리즘에 전달해서 우리가 원하는 매수 가격과 매도 가격을 계산해줄 차례이다. 어디까지나 방법론에 대해 설명하고 있을 뿐, 여기서 소개하는 알고리즘은 실제 거래에 사용하는 알고리즘이 아니며 수익이 발생할 것으로 검증된 알고리즘도 아님을 사전에 고지하고자 한다.

 

 

알고리즘 폴더·파일 생성하기

폴더의 이름은 Algorithm으로, 파일의 이름은 algorithm_1으로 하여 생성하도록 하자.

생성 방법과 생성 후 파일 리스트 모습

이제 algorithm_1.py 파일 내에서는 전달받은 데이터를 기반으로 하여 매수 가격과 매도 가격을 전달받아 하나의 데이터프레임으로 저장하고, 매일 장 시작 전에 사전에 계산해둔 데이터프레임을 기반으로 하여 tableWidget 내에 매수 가격과 매도 가격 정보를 입력하고 그 데이터를 기반으로 거래가 이루어지도록 하는 기능을 구현할 예정이다. 일단 algorithm_1.py 파일 내에는 가장 기본적인 코드만 만들어놓도록 하자.
※ 새로운 클래스 및 함수 생성

"""algorithm_1.py"""
class algo1:

    def __init__(self):
        pass

 

그렇다면 이제 algorithm_1 파일 내에서 매수 가격과 매도 가격을 계산하는 algo1 클래스를 실행할 때, 전달받아야 하는 데이터는 무엇이 있는지 생각해봐야 한다. 현재까지 우리는 아직 5분봉 차트 데이터만을 조회한 상태이므로, 5분봉 차트 데이터만 받아와보도록 하자.
※ Line : 4

"""algorithm_1.py"""
class algo1:

    def __init__(self, min5_data):
        pass

 

이제 min5_data라는 5분봉 차트를 얻어왔으니 class algo1: 내에서 min5_data를 어디서든 이용할 수 있도록 해줘야 하는데, 이는 변수 앞에 self.만 붙인 채로 재정의해주면 된다.

이처럼 self.를 붙여서 정의해주는 이유에 대해 궁금할 수 있다. 이유에 대해 설명하자면, def __init__(self): 함수는 해당 클래스가 호출되는 동시에 실행되는 구간이기 때문에, 별도의 다른 작업을 수행하지 않더라도 반드시 진행하게 되는 부분이기 때문이다. 지금은 다소 어렵게 느껴질 수도 있지만, 그냥 특정 클래스 내에서 사용할 변수는 self.를 붙여 모든 구간에서 사용할 수 있도록 해준다고 생각하면 편하다.
※ Line : 5

"""algorithm_1.py"""
class algo1:

    def __init__(self, min5_data):
        self.min5_data = min5_data
        pass

 

 

이제 뭘 해야 할까?

이제부터 막막하게 느껴질 것이다. Open API를 활용해서 영웅문 내 조건검색식에 의해 집계된 종목코드를 얻어왔고, 해당 종목코드의 차트 데이터를 조회해서 알고리즘 파일에 데이터를 전달해주었다. 현 시점에서 해줘야 할 것은 무엇인가? 이 부분에 대한 지식이 없다면 주식에 대한 지식이 없다는 것과 마찬가지이다. 다시 말해, 본인이 구현하고자 하는 거래 전략을 테스트(주식에서는 이를 백테스트라고 한다.)해보고 싶었다거나 하는 전략이 있어야 지금 당장 뭐부터 구현해야 할지가 머릿속에 떠오르는데, 그게 아니라면 어떤 기능을 구현해야 할지 모르는 것이다. 다시 말해, 지금은 전략을 수립해야 하는 시점이다.

아직 별 다른 전략이 없는 분들은 테스트 용으로 수립하는 전략을 직접 만들면서 실험해보시길 바라고, 구현하고자 하는 알고리즘이 있는 분들의 경우에도 이 게시글에서 제작하는 알고리즘의 내용을 따라 만들면서 알고리즘을 구현할 때 주의해야 할 사항으로는 어떤 것들이 있는지에 대한 지식을 얻어갔으면 한다.

 

 


728x90

 

 

구현할 전략은?

이 게시글에서 만들어 낼 알고리즘 전략은 바로 조건검색식의 조건에 어울리는 전략을 수립할 것이다. 사전에 설정했던 조건검색식의 조건은 일정 거래량과 거래대금 기준을 충족시키는 동시에 5일 이동평균선과 20일 이동평균선이 교차되는 종목을 잡아내라는 것이었다. 그렇기 때문에 알고리즘 내에서 매수 가격과 매도 가격을 계산할 때에도 이동평균선의 변화를 기반으로 한 매수 매도 전략을 수립해야 할 것이다. 여기서 구현할 전략은 아래와 같다.

  • 5일 이동평균선이 20일 이동평균선을 상향 돌파(골든 크로스)한 시점에서 매수
  • 5일 이동평균선이 10일 이동평균선을 하향 돌파(데드 크로스)한 시점에서 손절
  • 매수가 대비 5% 지점에서 수익 실현

그럼 키움증권 Open API 파일(main.py)로부터 전달받은 차트 데이터를 가공해서 예정 매수 가격과 예정 매도 가격 데이터를 구현하면 된다. 매도가와 매수가를 계산하는 과정에 있어서 반드시 고려해야 하는 점으로는 무엇이 있을까?

  • 사전에 거래가 이루어진 차트인가?

이 내용을 조금 풀어서 이야기하자면, '차트 흐름 상 이미 매수가 되었던 종목인가'부터 '이미 한 차례 매도가 진행된 종목인가' 내지는 '손절매가 진행된 종목인가' 등의 정보까지 모두 확인을 해봐야 한다는 것이다. 다시 말해, 해당 종목에 대해 적용하고자 하는 알고리즘이 여전히 유효성을 가지고 있는 알고리즘인지를 함께 확인해줘야 한다는 것이다.

이 내용에 대해서는 다음 게시글에서 살펴보도록 하자.

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.