PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (1) - 실시간 등록을 기반으로 한 매수 매도 함수의 동작 방법

  • -

이번 게시글에서부터는 실시간으로 등록되어 있는 데이터를 기반으로 매수와 매도 함수가 동작하도록 하는 로직을 구현하는 방법에 대해 살펴볼 예정이다. 특정 종목을 실시간으로 등록하는 방법은 실시간 데이터 얻기 (1) 게시글부터 다루고 있으니, 아직 구현하지 않았다면 해당 게시글을 바탕으로 기능을 구현하고 나서 넘어 오도록 하자.

 

 

실시간 데이터를 기반으로 한 거래의 방법

실시간 데이터를 기반으로 거래를 진행하는 방법은 의외로 단순하다. 현재가 데이터가 발생했을 때, 해당 가격이 기존에 설정한 매수 가격의 범위 내에 들어가 있다면 매수 함수가 동작하도록 하면 된다. 매수 함수는 기본적으로 SendOrder 함수를 통해 동작하게 되는데, 아직은 함수를 구현하지 않은 상태일 것이다.

그렇다면 기존에 설정한 매수 가격의 범위라는 것은 어디서 얻어올 수 있을까? 이는 크게 두 가지 방법이 있다. 첫째는 사전에 데이터프레임으로 매수 예정 가격 범위를 만든 후, 해당 가격 범위 내에 들어오면 매수 함수가 동작하도록 하는 방법이 있을 것이고 둘째는 tableWidget에 데이터를 입력해둔 후 그 데이터와 비교하여 매수 함수가 동작하도록 하는 방법이 있다. 두 가지 방법은 서로 크게 다른 부분이 있지는 않다. 결국 그게 그거니, 본인이 원하는 방법을 사용하면 된다. (물론 본인은 첫 번째 방법을 기반으로 하여 두 번째 방법을 사용하고 있다.)

아직 무슨 말인지 잘 이해가 가지 않을 수 있으니, 예를 들어보자. 우리가 만약 삼성전자[005930] 종목에 대해 50,000원보다 낮은 지점에서 한 번, 그리고 49,000원보다 낮은 지점에서 한 번 매수를 한다고 가정했을 때 매수 함수가 동작하기 위한 로직은 다음과 같다.

if now_price <= 50000:
    self.첫매수함수   ex) SendOrder가 포함된 함수
elif now_price <= 49000:
    self.두매수함수   ex) SendOrder가 포함된 함수

 

 


728x90

 

 

하지만, 의외로 간단하지 않다.

바로 위에서 살펴본 조건문은 잘못 작성되었다. 왜냐하면 만약 삼성전자의 현재 가격이 어느 날 시가 갭하락과 함께 48,000원이 되었을 경우에는 첫 번째 조건문인   now_price <= 50000:  을 먼저 판단하기 때문에,   self.첫매수함수  가 동작하기 때문이다. 다시 말해, 가격적인 범위를 설정해줘야 한다는 것이다.

if 49000 < now_price <= 50000:
    self.첫매수함수
elif now_price <= 49000:
    self.두매수함수

 

하지만 우리는 주식 거래를 하는 데에 있어서 매수만 하지는 않는다. 매수를 했으면 당연히 매도도 해야 한다.
※ Line 5~8

if 49000 < now_price <= 50000:
    self.첫매수함수
elif now_price <= 49000:
    self.두매수함수
elif 55000 < now_price <= 56000:
    self.첫매도함수
elif 56000 < now_price <= 57000:
    self.두매도함수

 

과연 우리는 매수와 매도만 구현해주면 될까? 아직 포함되지 않은 것이 있다. 바로 손절매이다.
※ Line 3, 5~6

if 49000 < now_price <= 50000:
    self.첫매수함수
elif 손절가 < now_price <= 49000:
    self.두매수함수
elif now_price <= 손절가:
    self.손절매함수
elif 55000 < now_price <= 56000:
    self.첫매도함수
elif 56000 < now_price <= 57000:
    self.두매도함수

 

이제 다 끝났을까? 전혀 아니다. 왜냐하면 당신은 하나의 알고리즘만 사용할 리가 없기 때문이다.
※ Line 1, 13~17

if algorithm_name == "알고리즘1":
    if 49000 < now_price <= 50000:
        self.첫매수함수
    elif 손절가 < now_price <= 49000:
        self.두매수함수
    elif now_price <= 손절가:
        self.손절매함수
    elif 55000 < now_price <= 56000:
        self.첫매도함수
    elif 56000 < now_price <= 57000:
        self.두매도함수

elif algorithm_name == "알고리즘2":
          :
          :
          :
          :

 

 

매수 함수와 매도 함수가 어떠한 로직으로 동작하는지에 대해서는 간단하게나마 살펴봤으니, 다음 게시글에서부터는 매수 함수와 매도 함수를 구현하고 그 과정에서 고려해야 하는 부분들에 대해 살펴보도록 하자.

 

 


728x90
반응형
Contents

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

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