모든 프로젝트에서 가장 중요한 것은 프로젝트가 어떻게 시작되어 어떻게 흘러가서 어떻게 마무리될지의 큰 그림을 설계하고 인지하는 것입니다. 따라서 본 칼럼에서는 하나의 완성된 자동매매가 구축되는 과정을 처음부터 끝까지 단계별로 기술해보려고 합니다. 앞으로 자동매매 관련해서 방향성을 잡으실 때 도움되셨으면 좋겠습니다.
Step 01: 전략 설계
가장 먼저 전략을 설계해야 합니다. 쉽게 말하면 어떤 근거로 언제 포지션을 진입하고, 어떤 근거로 언제 포지션을 청산할 것인지를 논리적이고 명시적인 언어로 구성해야 합니다.
아직 코딩까지는 염두에 둘 필요 없고, 손매매하듯이 자신만의 매매 전략을 인간의 언어로 설명할 수 있을 정도로 만들면 됩니다.
전략 설계 시 고려해야 할 중요한 요소는 다음과 같습니다.
✅ 전략이 너무 복잡하지 않은가?
너무 많은 요소를 고려하는 복잡한 전략은 직관성을 떨어뜨립니다. 지표 수십개 사용한다고 해서 좋은 전략이 탄생하는게 아닙니다. 단순하면서 직관적이고 진입과 청산의 근거가 논리적으로 명확한 전략이 성공할 확률이 높습니다.
✅ 포지션 관리 로직이 탄탄한가?
어떤 지표를 사용해서 타점을 잡는지보다는 일단 진입이 되었을 때 익절과 손절을 어떻게 하는지에 관한 '포지션 관리 로직' 부분이 더 중요합니다. 단일청산할지, 분할청산할지, 퍼센트로 TP를 잡을지, SL은 어디에 설정할지, 물타기는 어떻게 할지 등을 고민하여 설계하는 것이 중요합니다.
✅ 전략이 설계자의 '의도'를 잘 반영하는가?
트레이더가 포지션을 진입할 때는 근거와 의도가 있습니다. 왜 진입하였으며, 무엇을 기대하고 진입하는지가 진입 전에 미리 정해져있는 것이죠. 프로그램도 마찬가지가 되어야 합니다. 프로그램이 포지션을 잡는 이유와 기대하는 바, 그리고 기대하는대로 진행되지 않았을 때의 처리 과정이 논리적이고 명확해야 합니다.
위 세 가지 요소를 만족하는지 고려하여서 전략을 설계하면 추후 성공할 가능성이 높아집니다. 물론 전략 설계의 노하우도 어느정도는 시행착오를 거쳐야 터득할 수 있긴 합니다.
Step 02: 전략 코딩
Step 01에서 설계한 전략을 코드로 옮깁니다. 인간의 언어로 설명되어있는 전략을 컴퓨터가 이해할 수 있도록 변환하는 과정입니다.
트레이딩뷰 내에서 사용할 경우에는 Pine Script로, MetaTrader에서 사용할 경우 MQL4나 MQL5, 개별 프로그램에서 사용할 경우 Python 등으로 제작하게 됩니다.
프로그래밍 언어는 사용할 플랫폼에 따라 유연하게 고르면 됩니다.
Step 01에서 설계한 내용 중 코드로 옮기기 어려운 부분은 포기하기도 하며, 프로그램 상 효율적으로 동작할 수 있도록 전략의 설계를 일부 변경하기도 합니다.
어떤 설계 내용이 실현 가능할지 가능하지 않을지를 판단하는 것은 경험치가 없다면 매우 어려우므로 이 부분은 전문가에게 맡기시는 것을 추천드립니다.
코드가 1차적으로 완성되면 백테스팅 기록을 확인하거나 포워드테스팅을 잠깐 진행하며 코드가 설계한 대로 동작하는지를 확인합니다.
만약 코드의 동작이 정상적이면 다음 Step으로 진행하고, 그렇지 않으면 오류가 없어질 때까지 코드를 디버깅해야 합니다.
Step 03: 백테스팅 및 세팅값 최적화
백테스팅은 과거에 특정 전략대로 특정 기간동안 매매했다고 가정했을 때 나타나는 결과를 확인하는 작업입니다.
과거의 차트 패턴과 미래에 나올 차트 패턴에 수학적, 논리적 연결성이 있으며 차트 패턴이 비슷하게 반복된다는 가정이 있다면 과거 데이터에 대해 성공적인 전략이 미래에도 성공적일 가능성이 높습니다.
일반적으로 이 가정은 참이라고 받아들여지기 때문에, Step 02에서 제작한 코드를 가지고 과거 데이터에 대해 매매 시뮬레이션을 해보는 백테스팅을 진행합니다.
전략에 들어가는 특정 수치(Ex. 볼린저밴드 Length)를 바꾸어가면서, 백테스팅 결과와 그 결과를 대표할 수 있는 각 수치들(PNL, ROE, MDD, 승률, 수익팩터 등)을 확인해 최적의 세팅값을 찾습니다.
이 과정에서 수학적인 원리들, 더 나아가서는 머신러닝이 사용됩니다.
만약 이 과정에서 아무리 세팅값을 바꾸어보고 다양한 심볼에 대해 테스트해봐도 좋은 결과를 얻지 못한다면 전략을 폐기하게 됩니다.
Step 01로 돌아가 새로운 전략을 구상해야 합니다.
Step 04: 포워드 테스팅 및 실매매
백테스팅과 세팅값 최적화를 통해 만족할만한 결과를 얻었다면, 이를 미래 데이터에 대해 적용해보는 과정도 필히 필요합니다.
백테스팅 결과가 좋다고 해서 무조건 미래에도 수익을 낼 수 있는 것은 아니니까요.
포워드 테스팅과 실매매를 통해서 이 전략이 실제 수익성이 있는지를 검사해야 합니다.
✅ 포워드 테스팅과 실매매는 뭐가 다른가요?
1. 포워드 테스팅은 실제 자본을 투입하지 않고, 전략을 실행시킨 채로 관찰하는 작업입니다.
미래의 데이터에 대해 테스팅을 진행하기 때문에 자본 투자 없이도 실매매와 비슷한 환경에서 테스트를 진행할 수 있다는 장점이 있습니다.
2. 반대로 실매매는 실제 자본을 투입하여 거래소/증권사/브로커에서 실제 매매가 이루어지도록 하면서 결과를 관찰하는 작업입니다.
실제 거래가 이루어지기때문에 포워드 테스팅보다 더 정확한 데이터를 얻을 수 있으며, 포워드테스팅에서는 고려하지 못하는 요소인 최소계약단위, 슬리피지, 딜레이 등에 대한 세밀한 관찰이 가능합니다.
단, 실제 금액을 가지고 테스트하는 것이기 때문에 테스트 비용으로 사용한 금액에 대한 손실 위험이 존재합니다.
Step 05: 자본투입 및 유지보수
포워드 테스팅과 실매매까지 모두 통과하여 수익성이 어느정도 검증되었다면 실제 자본을 투자하여 실매매를 진행합니다.
이 과정에서는 의미있는 정도의 실제 수익을 기대해 볼 수 있습니다.
단, 전략 코드는 반영구적일지 몰라도 최적의 세팅값은 영구적이지 않다는 점에 주의해야 합니다.
시간이 흐르면서 새로운 데이터가 생성될 때마다 최적 세팅값이 변하기 때문입니다. 따라서 일정 기간마다 한번씩 새로 최적화를 진행해 유지보수를 해주어야 합니다.