AI를 활용한 재밌는 것들을 개발합니다

2021년 9월 24일 금요일

방구석지니 퀀트 자동 분할 매매 기능 추가(1/3) - 종목교체 없는 비중 리밸런싱 개발

분기별 종목 리밸런싱을 하는 날에는 이전에는 종가 시간 근처에서 매도와 매수를 하였으나 이제 투자 금액이 커지다보니 한번에 큰 금액을 일시 매도, 매수 하는 부담이 생기기 시작했다. 그 후 매도할 때도 30분 간격으로 분할 매도를 하고 매수도 30분 혹은 1시간 간격으로 분할 매수를 했었는데 이게 방구석지니 프로그램 앞에 계속 앉아서 매수 시간 설정과 동일비중 %를 계속 변경 입력 해줘야 하는 번거로움이 있었다. 명색이 퀀트 자동매매 프로그램인데... 분할매매도 자동으로 되게 해야하는거 아닌감?


오늘처럼 한가한 날 한번 만들어 보기로 했다.


[현재 방구석지니 자동 매매 옵션 설정 화면]

Ver2를 개발하면서 자동매매 설정 화면들을 독립적으로 따로 배치하면서 기능들을 더 추가할 경우에도 배치할 수 있는 공간에 여유가 생겼다. 여기에다 분할 매매 기능 UI를 추가해보자.

필요한 입력 변수들을 생각해보자면,

시작 시간, 종료 시간, 분할 매매 횟수, 시작 동일비중, 종료 동일비중

요정도 입력 하면 매매 스케줄링을 자동 계산 할 수 있을 것 같다.



위와 같이 UI에 필요 입력 변수들을 추가하였다. 스케줄 확인 버튼은 입력 설정에 따라 몇시 몇분에 얼마나 매도, 매수 되는지를 시간대별로 정리한 결과를 볼 수 있게 할 것이다.



전제 UI는 위와 같이 구성하고 오른쪽에 매매 스케줄 목록을 확인할 수 있고, 매도,매수 종목들의 현재 현황(주문이 나갔는지, 체결,미체결 등)을 볼 수 있는 테이블도 추가했다.


일단 UI는 변경이 완료 됐고... 이제 스케줄 계산 로직을 만들어야 한다...

우선 설정 제약 사항부터 정의가 필요하다.

1. 현재 시간이 09:00 ~15:20 사이라면
  1-1. 현재시간 < 시작시간

2. 현재 시간이 09:00 ~15:20 아니라면
  2-1. 시작시간 < 종료시간
  2-2. 매도 시작종료 시간과 매수 시작종료 시간 안겹치게
  2-3. 매도시간 < 매수시간 
  2-4. 매도시 시작비중 > 종료비중
  2-5. 매수시 시작비중 < 종료비중
  2-6. 분할횟수 1 이상

위 제약 사항이 다 만족했다 치고 스케줄링 로직을 개발해보자.


일단 스케줄링은 계산 로직은 다 완성. 이 기능 개발하면서 TimeSpan 관련해서 아래 블로그 참고하였다.



이제 스케줄링 된 시간에 따라 자동 매매가 나가도록 개발해야 하는데... 


현재시간을 스케줄링 표 시간과 비교해서.. 해당 설정에 맞게 매매를 하면 되겠고... 매매가 완료 되었는지 여부 확인 위해 컬럼 하나를 더 추가해야겠구나... 근데 분할 매매 같은 경우 전 시간 매매가 완료되지 않더라도 누적해서 매매 주문이 나가면 되기 때문에 그냥 해당 시간 설정에 따라 매매주문이 나가기만 하면 될거 같네. 혹시 미체결 주문이 있으면 일괄 주문취소 하는 기능도 넣어야겠다.

지금 분할매매를 하는 이유가 리밸런싱에 목적이 있기때문에 기존 보유 종목 중 전량 매도될 종목(교체)이 있고, 동일비중금액을 초과한 금액만 매도(유지)하는 경우가 있다. 매수같은 경우도 전량 매수가 있고 부분추가매수 부분이 있고...

전량매도 경우는 스케줄링에 따라 하면 되고, 동일비중 초과부분매도는... 기존과 같이 한번에 초과부분만 매도하는 걸로 하자..

생각해보니 기존 리밸런싱 로직을 스케줄링의 해당시간 동일비중금액에 맞게 매도만 되게 하면 될거 같다.. 어렵게 생각했는데 기존 로직을 약간만 수정하면 될 듯...

근데 또 언제 다 만드냐...


* 본 방구석지니 프로그램은 자동매매 및 퀀트 투자를 위한 자동 리밸런싱 기능이 있는 무료 프로그램입니다. 단, 크몽에서 전자책 구매시 무료로 제공해 드리고 있습니다. 관심 있는 분은 아래 링크 참고해 주세요.


댓글 없음:

댓글 쓰기

가장 많이 본 글