다른이가 매매 로직을 만드는 과정을 본적도 없고 들은적도 없기 때문에 필자는 그 누구로부터도 배움을 청할 수 없었고 그 과정에서 수 많은 시행착오를 겪을 수 밖에 없었는데요.
독자분들은 그런 시행착오를 조금이나마 줄일 수 있었으면 하는 바람에서 글을 적습니다.
우선 시장에서 발생하는 데이터는 시계열 데이터라고 합니다.
모든 데이터에 시간 혹은 날짜값이 매겨지기 때문이고 이 순서를 무시해서는 절대 안되는 데이터이기도 합니다.
시간순으로 정리된 데이터를 살펴보다보면 지수나 주가의 등락에 영향력을 주거나 하는 것으로 보이는 인자값들이 보일것입니다.
아직은 명확하게 보이는 단계는 아니고 "어?! 이게 연관성이 있는것 같은데?" 정도로 시작하는게 정상이고 맞습니다.
그렇다면 그런 인자값을 가지고 매매의 진입과 청산을 판단한다면 성과가 어떻게 나올지 궁금해지겠지요?
정확하지는 않더라도 대략적으로 해당 지표(주가, 거래량, 각종 보조지표, 이평선 등 모든 것을 지표로 통칭.)를 이용했을 때 어느정도의 성과가 나올 수 있는지에 대해 간단하게 시뮬레이션 해볼 수 있는 시뮬레이터 프로그램을 만어서 구동하는데 만약 직접 프로그램을 만들 능력이 안된다면 Yes-Trader 등을 이용해보기를 권합니다.
사용자가 직접 시뮬레이터 프로그램을 만들게 되면 생각하는 모든것을 프로그램으로 구현하여 시뮬레이션이나 실거래를 할 수 있다는 장점이 있으나 이를 위해 프로그래밍 언어를 배우기에는 시간과 비용이 너무 많이 드는 등의 진입장벽이 매우 X 100 높다는 단점이 있습니다.
Yes-Trader (예스 트레이더)는 이를 사용하고 편리하게 서비스를 제공하고 있는 장점을 가지고 제공되지 않는 지표가 있거나 복잡한 구조의 시뮬레이션이나 아주 정밀한 시뮬레이션은 할 수 없다는 단점도 가지고 있습니다.
(그래도 어느 정도는 쓸만하고 정확한 값을 찾는 단계가 아니므로 그럭저럭 괜찮을 것으로 생각됩니다.)
해당 인자값을 사용했을때 대략 어느정도의 손익이 나오겠다는 감이 올테고 그것으로 충분하거나 개선하면 괜찮아질 가능성이 있는것은 그대로 진행하고 성과가 형편 없거나 개선의 여지가 보이지 않으면 여기에서 STOP 하고 다시 각종 지표를 살펴보는 과정으로 돌아가야 합니다.
(일단 STOP이 아니라 GO를 외친분은 아래를 더 읽어 주세요.)
이제 어떤 데이터를 이용하면 괜찮은 성과가 나올 수 있을지 어렴풋하게나마 알게 되었으니 조금 더 면밀히 해당 지표를 뜯어 보기로 하겠습니다.
하나의 지표가 가질 수 있는 값은 상당히 많은데요.
예를 들어, 주가라고 하면 몇백원부터 몇백만원까지 아주 많은 경우의 수를 포함하고 있고 거래량은 0부터 몇십억까지 더 많은 경우의 수를 포함하고 있습니다.
상대적으로 경우의 수가 조금 적은 또 다른 지표라고 한다면 어떤 보조지표가 0.00부터 99.99까지의 값을 가진다면 경우의 수가 대략 만개쯤 밖에(?) 안되네요.
이런 지표들을 각 각 어떤 값으로 설정 했을 때 어떤 결과를 도출할 수 있는것인가를 시뮬레이션 해보는 과정이 필요합니다.
또 다른 시뮬레이션 프로그램을 만들어야 되겠지요?
1차 시뮬레이션은 간단하게 해본것이라 금방 결과가 나오겠지만 이번에는 한층 처리 해야 될 정보의 양과 경우의 수가 많기 때문에 시간이 제법 걸릴것입니다.
짧게는 몇분에서 길게는 몇달이 걸릴 수 있기 때문에 시뮬레이터의 내부 처리 알고리즘이 아주 정교해야 하며 실수가 없어야 귀한 시간을 허비하지 않을 수 있습니다.
실제로 필자의 경우 시뮬레이션이 완료 되기까지 4주를 예상하고 3주쯤 실행중인 상황에서 필자의 오타(Typo)로 인해 프로그램의 코드 일부가 잘못 처리되고 있다는 것을 뒤늦게 인지하고 모든 시뮬레이션의 실행을 중단하고 프로그램 코드내 오타를 수정하여 다시 구동한 적도 있습니다.
결과적으로 4주면 될 일을 7주 조금 넘게 걸려서 끝낸 셈인데요.
1시간짜리 작업을 망쳐서 1시간이 더 늘어 2시간이 되거나, 하루짜리가 이틀이 되는것은 큰 타격이 아닐 수 있지만 거의 한달에 가까운 시간을 허비했다고 생각하면 아쉬울 수 밖에 없습니다.
시간은 곧 비용이기도 하니까요.
2차 시뮬레이션은 지표의 세밀한 값 변화에 따라 최종 성과가 어떻게 변화하는가와 추후 개선의 여지가 있다면 어떤것을 더하거나 빼야 할 지 자세히 알 수 있는 시뮬레이션이 진행되어야 합니다.
이 아이디어는 (혹은 지표는) 잘 될것 같은데?라는 생각으로 첫번째 시뮬레이션을 건너띄고 두번째 시뮬레이션을 했을 시 성과가 좋으면 상관없지만 그렇지 않다면 더 많은 시간을 허비했다는 생각에 허망하기까지 할 수 있으므로 꼭 단계별 시뮬레이션 수행이 중요합니다.
필자의 경우 대체로 시장의 구성 요소중 가장 기초적인 데이터인 "가격"을 중점적으로 보는데요.
가격을 처리하는 부분의 알고리즘을 동일하다 하더라도 그 가격에 얼만큼의 주문을 넣을 것이고 시뮬레이션 상에서 얼마나 체결될 수 있을것인가의 수량 또는 운용자금 대비 비율값을 별도의 조건으로써 추가 합니다.
이렇게 처리 하면 해당 매매 로직을 실제 운용함에 있어서 어느정도의 금액을 투입하는것이 가장 좋을지에 대한 데이터도 같이 알 수 있기 때문입니다.
2차 시뮬레이션이 끝나면 일련의 로직의 결과값들이 데이터베이스에 저장 될텐데요.
이 결과를 그대로 사용하면 좋겠지만 조금 더 나은 성과를 얻기 위해서는 손실이 많이 발생할 수 있는 경우들에 대해 필터링을 하는 등의 검수 과정이 필요합니다.
2차 시뮬레이션의 결과가 몇개 되지 않는다거나 일일이 수동으로 분석해보겠다는 용자분이라면 상관없지만 2차 시뮬레이션의 특성상 지표의 세밀한 값 변화의 갯수만큼이나 결과물은 아주 많은 양인게 정상입니다.
때문에 2차 시뮬레이션의 결과에서 어떤값을 빼거나 어떤 기준으로 빼기 위해서는 3차 시뮬레이션을 진행해야 합니다.
2차 시뮬레이션의 결과값이 "아주 많은"이었다면 3차 시뮬레이션은 경우의 수가 훨씬 더 많아졌기 때문에 어마 어마 X 1000 하게 많은 양이 나와야 지극히 정상입니다.
3차 시뮬레이션이 끝나면 다른것 볼 필요 없고 개선의 여지를 찾을 필요도 없습니다.
이미 충분한 경우의 수를 대입하여 1, 2, 3차 시뮬레이션을 진행했기 때문에 해당 지표에 대해서는 박사급이 된 것이고 단순히 최정 성과(손익) 순으로 정렬해서 보고 최상위 성과를 낸 로직만 선택하면 될 일입니다.
예를 들어 A라는 지표를 선택했고 그 지표를 이용해서 해볼 수 있는 모든것을 해보았다면 두번 다시는 그 지표를 쳐다보지 않아도 됩니다.
여기에서 지표 A는 시장에서 널리 통용되고 있는 주지표 또는 보조지표일수도 있고 사용자가 임의로 여러개의 지표들을 조합하거나 한 것 모두를 포함하므로 시뮬레이션 해 볼만한 지표들은 널리고 널렸다고 할 수 있겠죠?
물론 경험이 많고 시장을 폭 넓게 이해하고 있다면 많고 많은 지표들중 성과가 좋을 것으로 기대되는 것들을 어느정도 추려내고 범위를 좁혀서 시뮬레이션을 통한 성과 분석을 할 수 있다는 장점이 있고 (장점을 이야기 했으니 단점도 이야기 해야 되겠죠?), 아는게 많은 만큼 해보고 싶은것도 더 늘어나서 일을 멈추지 못하는게 단점이라면 단점이고 필자의 상황이 현재 그런 상황입니다.
이미 다수의 시스템을 완성하여 실거래를 하고 있고 또 성과도 보고 있으며 별도로 시뮬레이션 해보고 있는 것들이 있지만 또 언젠가 아이디어가 갑자기 툭 튀어나오면 안해보고는 못 배길겁니다.
아마 잠도 못자고 늘 그 생각만 하게 될테니 차라리 며칠 고생해서 시뮬레이션 해보고 의혹을 풀어버리는게 낫지요.
3차 시뮬레이션까지 끝나고 나면 정말 시장에서 통용될 수 있는것인가와 직접 만든 자동매매 프로그램상에 오류는 없는지 점검 해보기 위해 소액으로 실거래를 시작해보세요.
프로그램의 안정성 개선과 오류 수정 그리고 추가 시뮬레이션 과정 등이 합쳐져서 약 6개월 정도는 해보셔야 합니다.
성과도 괜찮고 프로그램상의 문제도 없다면 메인 계좌로 옮겨서 운용하면 됩니다.
한가지 당부드리고 싶은 것은,
시뮬레이션은 최대한 많은 데이터를 대상으로 할 수록 상승구간, 하락구간, 횡보구간 등에 대해 공평하게 성과 분석을 할 수 있기에 유의미한 데이터를 도출할 수 있기에 시뮬레이션을 하기 위해서는 필요한 데이터를 확보하는게 급선무이고 1차 시뮬레이션 이후 2차, 3차 시뮬레이션은 Yes-Trader 등으로 할 수 없는 경우가 가능한 경우보다 훨씬 더 많기 때문에 가급적이면 정식으로 프로그래밍 언어를 공부하시라고 말씀 드리고 싶습니다.
호가창에서 뵙겠습니다.