요즘엔 증권사에서 자동매매 프로그램(키움 캐치)을 제공해주다 보니 점점 자동매매, 프로그램 매매에 대한 관심이 높아져가는 듯하다.
내가 자동매매에 관심을 갖게 된 게 언제부터일까.
2~3년 전쯤, 코인 열풍에 휩쓸려 투자했다가 손실만 가득 안은 채 존버 하던 시절이 있었고, 평범한 개발자였던 나는 24시간 대응할 수 있는 코인 자동매매 프로그램을 만들어보려고 시도했었다. 이때는 매수와 매도 모두 자동으로 하는 프로그램을 만들어보려고 애를 썼다.
하지만 코인판에서 손실만 맛보다가 지금은 주식으로 넘어와 다시 한번 자동매매 시스템을 만들어보려고 노력 중이다.
이러한 과정 속에서 깨닫게 된 몇 가지 이야기들을 풀어보고자 한다. 자동매매를 만들기 위해 머리를 싸매고 있는 분들에게 아주 조금이라도 도움이 될 수 있기를 바라며 적어보겠다.
최고의 매수 타이밍을 찾아서
자동매매를 만들어보기 시작하면서 가장 먼저 부딪힌 벽은 '매수' 전략이다. 누구나 그렇듯 저점에 사서 고점에 팔고 싶지 않은가? 그러기 위해서 '저점'을 포착해서 아주 좋은 타이밍에 매수를 하면 참 좋겠다는 생각을 가지고 저점을 찾기 위한 이런저런 전략을 만들어보기 시작한다.
거래량, 이평선, RSI, CCI, MACD, MFI, 스토캐스틱.. 정말 수많은 보조지표들을 찾아본 것 같다. 분봉과 일봉에 적용해보면서 쓸모 있는지 아닌 지 수많은 검증을 했었다. 운이 좋으면 매수 시점 이후에 날아가는 종목들도 있었지만, 반대로 예상과 달리 고꾸라지기도 했다.
바로 여기서 나의 잘못된 여정이 시작되었다. 승률이 100%인 전략을 찾고자 하는 바보 같은 함정에 빠지고야 만 것이다. 그리고 모든 보조지표는 결국 '과거' 데이터를 기반으로 한 것이기 때문에, 완벽한 예측이란 불가능한 영역이다.
지금 돌이켜보면 정말 말도 안 되는 생각을 한 것인데, 그때는 왜 몰랐을까. 손절이라는 것을 엄청난 손실로 생각했던 것 같다. 그래서 손절 없이 어떻게든 물타기 해서 익절로 끝내겠다는 생각으로 전략을 만들다 보니 자금관리 꽝에, 하락장에서 어마어마한 손실만 맞게 되는 엉망인 전략만 만들고 있었다.
내가 만약 저 때 익절과 손절, 승률과 손익비, 투자 비중이라는 개념을 먼저 알고 시작했다면 괜찮은 전략을 한 두 개 정도는 만들지 않았을까 하는 생각이 든다. 매매에 있어서 손절은 필수적인 부분이고, 적당한 승률에 높은 손익비만 보장된다면 꾸준히 수익이 날 텐데 이걸 너무 늦게서야 깨달았다.
2022.07.05 - [주식 자동매매] - 주식매매 승률과 손익비, 투자 비중(켈리공식) 엑셀
결론은.. '매수는 적당한 타이밍이면 된다'. 내가 만든 전략에 포착된 종목들 중 반 이상만 상승해줘도 이는 성공한 전략이다. (사실 손익비가 3 이상 된다면 성공률은 50% 이하여도 괜찮다..) 하락하는 종목까지 어떻게든 필터링해보려고 노력하는 건 좋지만, 이렇게 되면 매매 횟수 자체가 너무 적어질 수 있어서 오히려 매매는 안 하고 차트 분석만 하는 프로그램을 만들어버리게 될 수도 있다. 적당한 기준에서 적당한 수의 종목을 뽑아낼 수 있는 전략이면 충분하다는 뜻이다. 매수 전략이 아무리 좋더라도 매도를 제때 하지 못하면 그것 역시 꽝이다. 매수 이후에 수익을 내는 건 '매도' 전략에 달려있다.
내 경우, 주식 자동매매에서 당일 오전 중에 매수할만한 종목을 20개 내외로 찾아낼 수 있는 '조건식(검색식)'을 사용하고 있다. 그렇다고 검색된 모든 종목을 다 매수하는 것은 아니고, 자금 및 투자 리스크 관리를 위해 하루 1~2개 정도만 매수하고 있다. 자동매매이기에 먼저 포착되는 종목 두 개만 매수한다. 물론, 어는 날은 먼저 포착된 두 종목보다 뒤에 포착된 종목의 상승률이 더 좋을 수는 있지만 이것도 결국 확률 게임이라.. 놓친 것에 미련은 갖지 않는다.
여기까지 매수에 대해서 두서없이 적어봤지만 간단히 요약하자면..
- 보조지표에 너무 매달리지 말아라
- 최저점을 포착하는 건 절대 쉬운 일이 아니다
- 적당한 매수 타이밍이면 충분하다
- 포착되는 종목 수가 어느 정도 있어야 하고, 이 중 절반만 상승해줘도 좋다
- 너무 많은 매수는 독이 될 수 있다 (자금, 리스크 관리)
- 손실 가능성을 받아들여라
매도 전략은 어떻게 만들어야 할까
투자에 있어서 매수 타이밍도 중요하지만, 이것만큼 중요한 것이 바로 매도 타이밍이다. 매도 방법에는 크게 세 가지가 있을 듯하다.
- 익절(take profit)
- 트레일링 스탑(trailing stop)
- 손절(stop loss)
익절 (take profit)
익절이란, 매수 후 특정 수익 지점에 도달했을 때 매도하는 것을 말한다. 2% 상승했을 때 매도, 5% 상승했을 때 매도와 같이 말이다. 이때 전량을 모두 한 타이밍에 매도할 필요는 없다. '분할 매도' 전략이 항상 필요하다. 수익 목표가를 5%로 정했는데, 팔고 나니 10~20% 상승하는 경우도 자주 있기 때문이다. 만약 내 전략의 목표 수익이 5%라고 한다면, 5%에 도달했을 때 절반 정도를 매도하고 나머지는 추가 상승을 기대하는 전략을 세우는 것이 손익비를 올리는 데 유리한 것 같다.
익절 전략 예시
- +5% 도달: 절반 매도
- +10% 도달: 남은 수량 중 절반 매도
- +20% 도달: 전량 매도
트레일링 스탑 (trailing stop)
트레일링 스탑이란, 고점에 도달한 후 일정 기준 이상 하락할 때 매도하는 전략이다. 익절의 경우 특정 %에 도달하면 즉시 매도하기 때문에 계속해서 상승하는 종목에 있어서는 수익을 극대화하기 어렵다. 하지만 트레일링 스탑은 고점을 찍고 하락 시, 즉 어깨에서 매도할 수 있기 때문에 상승률이 좋은 종목에서는 수익을 극대화할 수 있다.
간단한 예시를 통해 익절과 트레일링 스탑의 차이를 느껴보자. A라는 사람은 3%, 5%, 10%에서 균등하게 익절 하도록 설정했고 B라는 사람은 고점 대비 3% 하락 시 매도하도록 설정했다고 가정해본다. 이 경우, 아래와 같이 상승하는 차트에서 어떤 차이가 있을까?
이 종목은 매수 후 15%까지 상승한 뒤 하락했다. 이때 15%까지 상승하는 동안 A는 평균 6.5%의 수익을 얻을 수 있다. 하지만 B는 15%까지 상승한 뒤 3% 하락한 지점은 12% 부근에서 매도를 하게 되어 총 12%의 수익을 얻게 된다.
이렇게 트레일링 스탑을 이용하면 고점과 근접한 위치에서 매도를 할 수 있다는 장점이 있다. 물론 당일 최고점에 도달하기 전 중간에서 3% 이상 하락하는 지점이 발생하면 그 부분에서 매도를 하게 되는 단점도 있다. 하지만 상승과 하락을 100% 예측할 수 없는 시장에서는 트레일링 스탑 전략이 나름 중요하다고 본다.
트레일링 스탑 또한 한 번에 100% 매도하지 않고, 익절과 같이 분할 매도하도록 설정하면 자동매매에 있어서 좋은 전략이 될 듯하다. (2% 하락 시 절반 매도, 3% 하락 시 절반 매도 등..)
트레일링 스탑 로직에 대한 자세한 내용은 아래 포스팅을 더 참고해보기 바란다.
2022.07.29 - [주식 자동매매] - 자동매매 트레일링 스탑 개발 (Trailing Stop, TS)
손절 (stop loss)
자동매매에 있어서 손절은 필수적인 것이라고 생각한다. 왜냐하면 100%라는 건 없다고 생각하기 때문. 그리고 굳이 자동매매, 프로그램 매매를 하려는 이유도 바로 이 '손절' 때문이기도 하다. 내가 직접 매매를 하면 분명히 기존에 생각한 손절 시점이 왔는데도 혹시나 다시 오르지 않을까 하는 기대를 안고 그냥 보유하게 된다. 그런데 만약 이게 -20%, -30%까지 하락해버리면 이때는 손절을 하고 싶어도 할 수 없는 지경을 맞이하게 된다. 게다가 그동안 수익을 낸 것까지 다 깎아먹을 수도 있다. 손절은 손실을 만든다고 생각하는 게 아니라 계좌와 실현 수익을 보호한다는 생각으로 접근하는 게 좋을 것 같다.
백테스트와 실전 투자 간 괴리
백테스트로 해보면 엄청난 수익을 내는데, 실전으로 돌려보면 그렇지 않은 경우가 많다. 백테스트로는 장 중에 발생하는 실시간 등락이 표현되지 않기 때문인데.. 예를 들어, 한 종목의 당일 시가는 9000원, 당일 고점은 10000원이고 당일 저점은 8000원이라고 가정해보자. 백테스트에서는 고점을 먼저 도달했는지, 아니면 저점을 먼저 도달했는지와 같은 모든 변동 흐름을 알기가 어렵다.
그래서 시가 매수 후 고점에 먼저 도달한 것으로 백테스트를 하면 당연히 수익이 나오게 된다. 하지만 실제 시장에서 저점을 먼저 터치했다면 이는 손실이었을 것이다.
따라서 백테스트 결과만 보고 바로 풀 배팅을 하면 절대로 안된다. 그냥 망하는 지름길로 가는 것일 뿐.. 반드시 소액으로 2주~한 달 정도는 해봐야 좀 더 정확한 검증이 가능하므로 반드시 소액 투자 또는 모의 매매로 시작하기를 당부한다.
자동매매 프로그램 소개 - TTN
제가 현재 사용 중인 자동매매 프로그램을 소개해볼게요. TTN (Today Trading) 이라는 유료 프로그램입니다. 키움증권 매매를 지원하고, 조건검색식을 기반으로 하는 자동매매가 가능합니다. 물론, 영웅문으로 수동 매수한 종목에 대해서도 자동 매도 기능을 제공합니다.
매매 현황판 및 제공되는 기능들을 간단히 소개해보겠습니다. 기간제(베이직), 스탠다드, 전문가용 버전으로 나뉘어있으며 제가 사용 중인 버전은 스탠다드 버전입니다.
체험판을 무료로 사용해볼 수 있고, 기간제 상품도 있기 때문에 관심 있으신분들은 아래 홈페이지도 한 번 방문해보시길 바랍니다.
거래현황판
당일 매매에 대한 손익금과 손익률을 보여주고, 보유하고 있는 종목에 대해서는 기본적인 매매 내역과 현재가, 거래대금, 체결강도, 등락률 정보를 실시간으로 표시해줍니다.
조건검색식 설정
한 번에 최대 5개까지의 검색식을 구동할 수 있습니다. 조건검색식은 키움증권 영웅문에서 만들어둔 검색식을 사용하고, 각 검색식별 매수 및 매도 설정을 할 수 있습니다. 또한 검색식마다 용도를 지정할 수 있는데요. 매수조건식, 매도조건식은 기본이고 편입 종목 데이터만 수집하고 싶은 경우 검증 모드로도 구동이 가능합니다. 검증 데이터는 별도로 제공되는 검증마스타 프로그램을 통해 종목을 분석해볼 수 있습니다.
매수할 땐 두 개 이상의 조건식을 조합해서 매수하는 것도 가능합니다. 키움증권 조건식에 넣을 수 있는 조건 개수가 한정되어있기 때문에 더 많은 조건식을 활용하고자 한다면 이와 같은 기능을 사용해볼 수 있습니다.
매수 기능
기본 매수 설정 기능입니다. 조건식에 편입 시 매수 주문을 넣을 가격을 지정할 수 있고, 9차까지 분할 매수가 가능합니다. 지정한 가격에 매수가 되지 않았을 때 정정 주문 또는 주문 취소 등의 동작도 설정할 수 있습니다. 이 외에도 정말 다양한 기능이 제공되고 있어서 자동 매매에 정말 딱 맞는 프로그램이라는 생각이 듭니다.
매도 기능
매수 설정보다 훨씬 더 많은 기능을 가진 매도 설정입니다. 7차 분할 매도 및 3차 트레일링 스탑 기능을 사용할 수 있습니다. 이익보존이라는 기능도 있어서 적절히 사용하면 큰 도움이 됩니다.
손절 설정도 여러가지 옵션을 선택할 수 있습니다. 3차 분할 손절은 기본이고 저점대비 N% 상승시 매도한다거나 고가 대비 N% 하락 시 매도하는 등 시장에 대응할 수 있는 여러가지 설정이 있습니다. 손절의 경우 각 차수 별 비중을 설정하는 것뿐만 아니라 각 차수 조건이 N초 이상 지속시에만 매도하는 등의 추가 옵션도 설정이 가능합니다.
검증마스타
앞에서 잠깐 언급했던 '검증마스타'라는 프로그램입니다. 날짜 별 각 검색식에 수집된 종목들을 표시해줍니다. 아래는 제가 사용하는 한 검색식의 종목 데이터입니다. 기본적으로 편입 시점의 가격과 등락률, 거래량, 체결 강도, 거래회전률 정보를 보여줍니다. 그리고 편입 이후 최고가 및 최저가, 그리고 최고가에 도달하기 전 최저가 등 여러 가격 정보를 기록해서 보여주기 때문에 어떤 매수/매도 전략을 정할 때 상당히 큰 도움을 줍니다.
추가로 각 조건식 별로 하루 N개 매수 시 최고가/최저가/종가 기준 수익률도 계산해서 보여줍니다. 편입 종목에 대한 데이터는 엑셀 파일로 저장도 가능하기 때문에 엑셀 수식을 이용해 좀 더 다양하게 계산해 볼 수 있습니다.
자동매매 실전 누적 수익
현재 TTN 프로그램으로 운영 중인 자동매매 누적 수익이 궁금하다면 아래 포스팅도 읽어봐주세요.