News & Events
[알고리즘트레이딩/전략편] 03. 알고리즘 트레이딩 – Naked 매매 (1)
- 2019년 1월 4일
- Posted by: 인사이트캠퍼스
- Category: 금융/AI/IT 기사
알고리즘 트레이딩 (Algorithmic Trading) – 전략 (3)
알고리즘 트레이딩 – Naked 매매 (1)
고수플러스의 API를 통한 자동매매 프로그램을 구현해 보는 첫 단계로 기술적 분석에 의한 Naked 매매 전략을 시연해 보기로 한다. 기술적 분석을 통한 자동매매 기법을 전략이라고 하기에는 빈약하지만 개발툴을 익히는 차원에서 여기서부터 시작해 보기로 한다. 참고로 본 블로그에서는 금융 기법, 전략 그리고 분석에 초점을 맞추고 있으므로, 프로그램 제작 과정은 언급하지 않기로 한다 (이걸 언급하려면 양도 많아지고, 원래 목적인 금융 기법의 궤도를 벗어날 가능성이 있어 생략합니다).
사실, 기술적 분석을 통한 자동매매는 성공하기가 어렵다. 그 이유는 주가의 흐름이 랜덤워크 (Random Walk) 과정이므로, 매매 횟수가 증가할수록 기대 수익은 0 에 수렴하기 때문이다 (마팅게일 성질). 게다가 거래 비용까지 고려하면 기대 수익은 0 보다 작아지게 된다. 기술적 분석의 지표는 과거 패턴을 해석하고 이해하는 데는 도움이 되지만, 미래를 예측하는 도구가 되기는 어려우므로, 이것을 통한 자동매매로는 수익을 내기가 어렵다 (주-1). 여기서는 이것을 확인해 보는 차원에서 시연해 보는 것으로 한다 (Random Walk와 마팅게일 성질에 대해서는 금융수학에서 별도의 주제로 다루어 볼 예정임).
위의 그림은 어느 콜-옵션의 1분봉 차트이다. 이와 같은 차트에 볼린저 밴드를 대입하여 하한선에서 매수하고, 상한선에서 매도하는 매매를 자동으로 수행하면 어떻게 될지 시험해 본다. 세부 전략은 아래와 같다.
Naked 매매 전략 시나리오
1) 모든 분석은 실시간 분석을 위해 옵션의 틱 (Tick) 데이터를 이용한다.
2) 틱 데이터로 분석한 볼린저 밴드의 하한선에서 매수하여, 상한선에서 매도한다.
3) 매수 주문은 현재가로 하되, 미체결 상태에서 3호가 차이가 발생하면 주문을 취소한다.
4) 매도 신호가 발생하는 즉시 청산하기 위해 매도 주문은 시장가로 한다.
5) 당일 체결한 주문은 당일 모두 청산한다.
6) 매수 후 일정 수준 이상의 손실이 발생하면 즉시 손절한다.
7) 손절 후에는 일정 시간이 경과한 후에 다시 매매를 시작한다 (안정화 기간 필요).
8) 장시작 직후 10분간, 장마감 직전 10분간은 매매에서 제외한다.
위의 매매 시나리오를 위해 프로그램 화면을 아래와 같이 디자인 하였으며, 조건을 바꿔가면서 시험하기 위해 각 항목은 최대한 변경 가능하도록 하였다.
프로그램 기능 설명
1) 종목명
종목명은 콜-옵션이나 풋-옵션의 종목 코드를 의미한다. 프로그램은 API로부터 입력된 종목의 시세 정보를 실시간으로 전달 받는다.
2) 현재가 : 고수플러스 API로부터 해당 종목의 현재가를 전달 받아 분석한다.
3) 등락 : 해당 종목의 전일 대비 등락폭을 표시한다.
4), 7) 볼린저 인덱스 및 볼린저 상한/하한
볼린저 밴드의 상황을 수치로 표시한 것이다. 현재가가 이동평균선 상에 있을 때를 0 으로 표시하고, 볼린저 밴드의 상한선에 있을 때를 100, 하한선에 있을 때를 -100 으로 표시한다. 만약 이 수치가 -50 이라면 현재가가 이동평균선과 하한선의 중간 지점에 (50% 지점) 위치하고 있다는 의미이고, +80 이라면 이동평균선에서 상한선까지의 80% 지점에 위치하고 있다는 의미이다. 볼린저 인덱스가 -100보다 작으면 매수 신호가 되고, +100 보다 크면 매도 신호가 된다.
볼리저 밴드를 계산하기 위해서는 현재가가 바뀔 때 마다 이동평균 및 표준편차를 구해야하는데, 현재가가 빈번히 바뀌면 계산하는데 시간이 걸려 실시간으로 바뀌는 현재가를 놓칠 가능성이 있으므로, 실시간 이동평균 및 실시간 표준편차를 구하는 방식으로 구현하였다. 실시간 이동평균이란 새로운 현재가가 들어 왔을 때 이동평균 값을 새로 계산하는 것이 아니라, 바로 직전의 이동평균 값을 보정하는 방식으로 계산해 나간다. 실시간 표준편차 계산 방식도 동일하다. 이렇게 하면 100 틱의 표준편차를 구하는 시간이나, 10,000틱의 표준편차를 구하는 시간이 동일하여 프로그램의 Performance가 향상되고, 현재가를 실시간으로 모두 반영할 수 있다.
5) 손절 적용
입력된 손절 라인 (그림에서는 -20%) 이하로 손실이 발생하면, 즉시 청산하고 이동평균 틱수 [(6)번 항목] 만큼 기다렸다가, 다시 매매를 시작한다. 손실이 발생하면 계속 하락 추세에 있을 가능성이 크므로, 패턴이 안정될 때까지 기다렸다가 다시 매매를 재개하기 위함이다.
6) 이동평균 틱수
볼린저 밴드를 계산할 이동평균의 틱수 이다. 이 값이 500 이라면 500 개 틱에 대한 이동평균과 표준편차를 계산하여 볼린저 인덱스를 계산한다. 이 값이 짧으면 단기 패턴으로 매매 신호를 계산하므로, 매매가 빈번히 발생하고, 이 값이 길면 반대의 경우로 매매가 가끔 발생한다. 이 값을 바꾸어 가면서 시험해 본다.
8) 거래수 : 거래 횟수를 표시한다. 매수-매도 거래를 1회로 표시하였다.
9) 손익 : 직전 거래에 대한 손익을 표시한다 (거래 비용 포함).
10) 누적 손익 : 총 거래에 대한 누적 손익을 표시한다 (거래 비용 포함).
11) 롱/숏
매수, 매도를 의미한다. 종목이 콜-옵션이고 “L” 에 체크되어 있으면 볼린저 밴드 하단에서 진입 신호가 발생한다. 즉, 하단에서 해당 콜-옵션을 매수하고, 상단에서 매도한다. “S” 에 체크되어 있으면 상단에서 진입 신호가 발생한다. 즉, 상단에서 해당 콜-옵션을 매도하고, 하단에서 매수 청산한다.
12) 옵션/선물
볼린저 밴드를 계산할 때 옵션의 현재가로 분석할 것인지, 선물의 현재가로 분석할 것인지 선택한다. “O” 에 체크되어 있으면 옵션의 현재가를 분석하고, “F” 에 체크되어 있으면 선물의 현재가를 분석한다.
13) 틱 수
분석할 틱의 개수이다. 1 이면 매 틱마다 볼린저 밴드를 새로 계산하고, 10 이면 10 틱의 평균값을 1 틱으로 하여 볼린저 밴드를 계산한다.
14) 총 틱수 : API로부터 전달 받은 현재가의 총 수이다.
위와 같은 매매 시나리오로 제작된 프로그램 로봇 6 대를 동시에 돌려 보기로 한다. 3 대는 콜-옵션을 매매하고, 3 대는 풋-옵션을 매매한다. 콜과 풋을 섞어서 돌리는 이유는 당일의 주가가 상승할 수도 있고, 하락할 수도 있기 때문에 시험의 정확도를 높이기 위해 양 방향 매매로 하였다. 아래 그림은 6대의 로봇이 돌아가고 있는 모습이다. 볼린저 틱수는 각각 다르게 설정하였다.
가상 계좌를 이용하여, 이 전략으로 2~3 일간 실험해 보고 그 결과는 이후 포스트에서 설명해 보기로 한다.
주-1) 기술적 분석을 통한 자동 매매로는 수익을 내기 어렵다는 것에 대해 많은 이견이 있을 수 있습니다. 단지 필자의 주관적 생각임을 밝힙니다.
[출처]3. 알고리즘 트레이딩 – Naked 매매 (1)|작성자아마퀀트