기존 매매 흐름 상태도에 추가할 사항이 생겼습니다. 기존에 소개해드린 매매 상태 흐름도입니다. 흐름도와 관련된 자세한 사항은 이전 글을 참고하시기 바랍니다.

 

 

그동안 이 흐름도를 기반으로 개발을 진행하였고, 실 매매도 진행을 하였습니다. 하지만 이번에 시뮬레이터를 만들면서 개발한 간단한 전략을 적용하려고 하니 부족한 부분이 생겼습니다.

 

현재 시뮬레이터의 전략은 아래와 같습니다.

매수 : 특정 x% 이상 오르면 매수

매도 : 매수가 대비하여 특정 y% 이상 오르면 익절매도

   혹은 매수가 대비하여 특정 z% 이상 오르면 손절매도

 

그런데 최초에 특정 x% 이상인 종목은 어떻게 할 것인가? 그리고 익절 후 다시 매매를 하려고 하면 어떻게 할 것인가에 대한 고민이 생겼습니다. 따라서 매매할 대상 중 아직 조건을 만족하지 않는 상태가 필요하게 되었습니다(상태 24번 추가). 이 상태에서는 새로 매매할 조건이 만족하면 상태 11번으로 변경을 하는 부분을 담당하면 될 것 같습니다.

 

새로운 상태 24번은 아래의 경우에 사용됩니다.

 

1.  trader를 처음 만들 때 코인 현재 가격에 따라 x% 이하면 상태 11번 x% 이상이면 상태 24번으로 설정

2. 익절 후인 상태 16번에서도 상태 24번으로 보내면 됩니다. 익절을 하였다는 말은 x% 이상이라는 의미이기 때문입니다. 

3. 중간에 이런 저런 사유로 보유 종목이 없어지는 경우가 있습니다. 그 이유는 여러가지인데요. 프로그램 오류 때문일 수도 있고, 너무 많이 올라서 수동으로 매도했을 수도 있습니다. 혹은 실수로 보유 종목을 hts에서 팔았을 수도 있습니다. 이런 경우에 탈출 감시시 조건을 만족하였을 때 매도 주문을 내게 되는데, 매도 오류가 발생합니다(보유 종목이 없으므로). 이런 경우에도 상태 24번을 보내면 됩니다. 만약 x% 이상인 상태라면 한동안 24번에 머물것이고, x% 이하라면 바로 상태 11번으로 갈 수 있기 때문입니다.

  

 

반응형

설정

트랙백

댓글

현재 개발 중인 자동매매 frame-work을 이용하여 첫 로직을 개발해봅니다.

 

전략은 아래와 같습니다.

 

이름 : 코스닥 상승 종목 타기 : 코스닥돌파1호

대상 : 코스닥 종목 (100종목)

Time Frame : 실시간 체결 정보 사용, 당일 청산

Rule :  코스닥 전 종목을 대상으로 당일 상승중인 종목

  1) 매수 조건 : 전일 상승 종목 중 종가 상승 분 대비 50% 상승하면 매수

                 시초가가 매수 조건보다 높으면 매매 대상에서 제외

  2) 매도 조건 : 매수 후 10% 상승 혹은 종가 청산

  3) 손절 조건 : 매수 가격 대시 3% 하락시 손절

 

이전 글에서 설명한 매매 흐름 다이어그램을 기반으로 매매는 frame-work에 포함되어 있습니다. 이 로직을 적용하기 위해서는 매매 대상, 진입 조건 등에 대한 코딩을 추가하면 됩니다.

 

그 과정을 정리해봅니다.

 

우선 거래 대상 종목 정보를 뽑아야 합니다. 네이버에 있는 코스닥 상승종목을 조회하는 웹페이지 내용을 크롤링합니다. 관련 코드는 아래 github에 있습니다.

https://github.com/multizone-quant/system-trading/commit/2d00a4525fcb16a375e096845203ac1f9c18ff01

 

이 프로그램을 실행하면 아래와 같이 일자명이 붙은 파일이 만들어진다. 여기에는 종목에 대한 기본 정보와 조회 시점의 현재가가 기록되어 있습니다. 따라서 장이 끝난 후 이 프로그램을 실행하면 당일 코스닥 전 종목의 코드와 종가를 구할 수 있습니다.

 

20200612_kosdaq_up_list.txt

 

거래 대상을 만들었으니, 신규 로직 코딩을 할 차례입니다. 

 

TR_STOCK_1이라는 frame-work에 있는 주식매매class를 기반으로 매매 대상을 코딩합니다.

 

1. 거래 대상을 기록한 파일 명이 등록

2. 거래 대상을 저장한 파일의 내부 저장 구조에 따라 필요한 정보를 뽑는다.

3. 매매 대상에서 제외하는 한다.

4. 진입을 위한 매수가가 결정한다.

 

위 내용을 바탕으로 코스닥돌파 1호 class을 위한 코드는 아래와 같습니다.

 

 

 

추가로 익절 %도 조절이 가능한데요. 이 값은 config 파일로 처리합니다.

돌파 1호는 전일 상승 폭의 50%를 넘어야 진입 조건이 되는 것이고, 돌파 2호는 전일 종가에서 3%가 오르면 진입 조건임을 표시하고 있습니다.

 

 

 

현재 개발 중인 자동매매 frame-work을 기반으로 기존 전략과 비슷한 전략을 추가하는 방법에 대하여 간단하게 정리해보았습니다. 

 

새로운 전략을 추가할 때 기존 전략 코드 변경없이 가능하다는 것은 큰 장점이 있습니다.

우선 기존 전략이 잘 동작합니다. 새 전략을 추가하면서 기존 전략에 문제가 생긴다면 새 전략을 추가할 때 마다 기존 전략에 대해서도 문제가 없는지 test를 해 보아야 하기 때문에 개발 부담이 커집니다. 따라서 새 전략 추가시 기존 전략에 미치는 영향은 최소가 되어야 합니다. 

 

하지만 frame-work을 만드는 과정은 시간이 많이 걸립니다. 따라서 기존 전략에 영향을 미치지 않으면서 신규 전략을 개발하는 방법으로 전략 마다 별도 프로그램을 만드는 방법도 있습니다. 하지만 새로운 기능을 추가하게 되면 모든 프로그램을 수정해야 하기 때문에 이 또한 바람직한 방법은 아닙니다.

 

물론 frame-work을 이용하는 방법도 단점이 있습니다. frame-work이 모든 경우를 고려해서 만들 수 없기 때문에 전략에 따라서 frame-work을 변경해야 하는 경우도 생깁니다. 저는 기존에 암호화폐 매매를 위하여 만든 frame-work(여러 거래소를 동시에 이용하기 위하여 만듬)을 주식에 적용하다 보니, 다른 부분이 많아서 80% 이상 수정을 하였습니다. 거의 다시 만든 수준이죠. 완성된 형태의 frame-work이 나오기 전까지는 구조가 변경되는 경우가 많아서 개발 종료하는데 시간이 많이 걸리는 문제를 가지고  있습니다.

 

전략별 파일 혹은 frame-work 어느 것이 맞는지는 개발자에게 주어진 시간과 성향에 따라서 다르기 때문에 정답은 없습니다. 각자 처한 상황에 따라서 선택을 하면 될 것 같습니다. 

 

다음에는 비슷한 로직을 추가하는 과정에 대하여 기술할 예정입니다.

 

반응형

설정

트랙백

댓글

현재 개발 중인 시스템 트레이딩 프레임워크에 대하여 정리합니다.

 

본인이 원하는 프로그램을 작성하는 방법은 다양합니다. 프로그램은 결국 if then else의 조합인데요. 이를 좀 더 쉽게 개발할 수 있는 방법이 state transition diagram을 그린 후 이를 바탕으로 개발하는 것입니다.

 

매매 과정을 단순화 시켜보면 아래와 같습니다.

1. 매매 대상을 지켜보다가

2. 진입조건이 맞으면 진입

3. 진입되었는지 확인(거래가 성사되었는지 확인)

4. 진입 상태에서는 익절과 손절 여부를 계속 모니터링하다가 조건에 맞는 거래

 

이외에도 동호가 처리라던가, 시초가 높은 친구들 제외, 진입 가능 시간 초과한 친구들 처리 등등 다양한 조건이 존재합니다. 이런 조건들을 분석해서 정리한 "매매 상태 흐름도"는 아래와 같습니다.

 

 

11번 진입 감시 상태 이전에 매매할 대상을 정하는 부분은 별도로 표기하지 않았습니다.

 

각 매매 상태가 변할 때 마다 자신의 상태를 저장합니다. 이렇게 상태별로 정리가 되어 있으면 매매가 끝난 후 어떤 종목이 매매 대상이었으며, 어떤 종목이 어떻게 마무리가 되었는지 검토가 가능합니다.

16, 19번은 추가매매를 할지 말지를 판단하는 상태로 아직 개발은 진행하지 않았습니다. 예를들어 특정 종목 손절 후 다시 복수하고 싶으면 19번 상태에서 11번 상태로 변경하면 다시진입대기 상태가 될 수 있습니다. 또한 이런 과정을 몇 번 반복할 지 등에 대한 부분을 코딩할 수 있습니다.

 

 

 

 

반응형

설정

트랙백

댓글