매매로직을 만들었습니다
S&P 또는 나스닥 지수 스윙매매
장마감 시 종가근처에 한번 매매하는 거라 코딩까진 필요없고, (보통 2~3일 마다 한번 매매, 롱과 숏 왔다갔다 스위치)
엑셀에 장마감 무렵 가격 입력해서 매도매수 시그널 표시합니다
실거래는 ETF나 지수선물을 이용할 계획이구요
기본모델이 있고요
이 모델에 세팅값을 사전입력해 놓고, 당일 당일 종가를 입력해서 매도 매수 시그널을 뽑아냅니다
세팅값은 과거 일정기간 동안의 가격데이터를 입력해서 추출합니다
과거 가격데이터 입력 --> 세팅값 추출 --> 모델에 세팅값 입력 --> 모델에 그날 그날 종가 입력하여 매도매수 시그널 생성
이런 프로세스
세팅값을 요리조리 맛사지 하면 45도 기울기의 우상향으로 쫙 뻗는 수익률 그래프가 멋지게 나오죠

아이고 의미 없다 ㅋ 그런걸 "과최적화"라고 하고, 그런거 인터넷에 널렸다요
과최적화 문제를 어떻게 해소할까 고민고민 하다가
백테스트를 한달 단위로 잘게 잘라서 해봤습니다
주목할 점은,
과거 데이터로 과거 기간을 테스트한것이 아니라
과거 데이터로 이후 미래 기간을 테스트 한 것입니다
(예)
2019.12.31 시점 가정
과거 3개월 (2019년 10월,11월,12월) 가격데이터를 입력하여 세팅값을 추출하고, 이를 모델에 입력.
2020.1월 한달간 테스트
결과: 수익 또는 손실
2020.1.31 시점 가정
과거 3개월 (11월,12월,1월) 가격데이터를 입력하여 세팅값을 추출하고, 이를 모델에 입력.
2020.2월 한달간 테스트
결과: 수익 또는 손실
2020.2.28 시점 가정
과거 3개월 (12월,1월,2월) 가격데이터를 입력하여 세팅값을 추출하고, 이를 모델에 입력.
2020.3월 한달간 테스트
결과: 수익 또는 손실
이런 식으로 2020.1 ~ 2026.4 까지 76개월 간 76번의 테스트
이전 3개월 가격데이터로 모델을 세팅하여, 다음 1개월에 적용.
이런 방법이 과최적화 문제를 해결한건가?
데이터를 뽑아쓰는 이전 3개월 기간은 "최적화" 대상 기간이지만,
테스트 적용기간인 이후 1개월은 "최적화" 대상기간이 아니다.
라고 주장한다면 맞는 말일까요?
결과값이 위 챠트와 크게 다르지 않았는데,
저는 당사자라 확신편향 듬뿍 껴있는 상태라 쓴소리도 들어보고 싶습니다
현재는 (2월, 3월, 4월) 가격데이터로 추출한 세팅값으로 5월 현재 페이퍼 트레이딩 진행중입니다.
해당 전략의 단점은 일반적으로 1년 수익률을 결정하는 순간을 온전히 누리기에 어려울 수 있다는 점에 있습니다.
수주, 수개월, 혹은 몇일 단위로 크게 펌핑이 될때가 있는데 이걸 모두 놓치게 되는 불상사가 생기게 되는 경우가 있지요.
+ 최적화에 대한 세금 및 오매매(실수 매매 및 리밸런싱)에 대한 리스크도 존재합니다.
해서 저는 그냥 일반적인 인덱스 투자로 돌아왔...습니다 ㅎ
이게 비정상적으로 위아래로 크게 움직여도 그렇고요.
시장을 예측하고 내가 원하는 방향으로 움직여야 한다는 기반이 되어야 하는거라...
성투 기원드립니다.
결과를 알고 있기때문에 현재의 최적화가 나온건데 이걸 미래에도 맞는 최적화로 만드려면 미래를 알아야할 것 같습니다.
성투하십시욤
영상이 길어, 문서로 보고 싶으시면 다음링크에 발표자료나 관련 읽을 꺼리가 있습니다.
https://github.com/restful3/ml4t/blob/main/source/Chan%20E.%20Quantitative%20Trading...Build...Trading%20Business%202ed%202021/chapter_3_backtesting/ch3_slides.pdf
관련해서 제 의견을 세줄로 요약하면
1. 각종 편향 (생존, 선행, 데이터 스누핑) 및 배당락, 액면 분할, 슬리피지, 수수료 등을 반영하여 백테스팅을 설계 해야 한다.
2. 이를 다 반영하여 구현 및 검증 하는 것이 부담스러우면 퀀트커넥트 같은 서비스를 이용하는 방법도 있다.
3. 다만 퀀트커넥트를 원활하게 사용하기 위해선 뭘 이용료(최소 10달러)를 내야하고, AI 로 자동화 시키기 위해선 추가적인 궁리가 필요하다는 문제가 있다.
입니다.
문제는 추출하신 세팅값이 얼마나 안정적이냐하는 것이구요. 예를 들어 윈도우를 전진하면서 세팅값이 어떻게 변하느냐. 여기서 과적합이 발생합니다.
제 경험에 의하면 알고리즘 트레이딩에서 백테스트보다 중요한게 로직입니다. 쓰시는 로직이 시장에 맞아야하구요. 그 로직을 튜닝하는것이 백테스트입니다. 백테스트 만으로 훌륭한 알고리즘을 만들수는 없습니다.
세팅값이 안정적 --> 세팅값에 변화가 없어야 한다. 라는 말씀으로 이해됩니다
근데 로직의 특성 상 그럴수 없고 세팅값은 윈도우 전진하면서 계속 변합니다. 시장상황이 변하기 때문에요
예를 들어 설명 드리면,
이평선 크로스 매매라고 가정할께요 (실제 이평선을 사용하지 않습니다만)
"이평선 크로스 매매"라는 로직이 있고, 여기에 "이동평균의 기간"이라는 세팅값을 정하게 됩니다.
대체로 추세구간에서는 장기이평선이 맞고, 횡보구간에서는 단기 이평선이 맞습니다
만약 과거 3개월 가격흐름이 추세구간 성격이었다면, 비교적 장기인 100MA 라는 세팅값이 추출됩니다. 그래서 100MA로 미래 1개월 forward walk을 합니다
그 다음 3개월은 추세가 약해지고 횡보 초입단계 움직임을 보여 이전보다는 단기인 50MA 라는 세팅값이 추출됩니다.
그 다음은 추세는 완전히 사라지고 본격횡보 구간에 진입하여 훨씬 단기인 20MA 세팅값이 추출됩니다.
이런식으로 세팅값은 시장환경에 따라 변하게 됩니다.
결론적으로,
과거 3개월의 가격 흐름에 따라 세팅값이 변경되고, 그 변경된 세팅값으로 그 후 미래 1개월을 forward walk 한 것입니다.
제가 최초 백테스트에서 6년치 장기 가격데이터를 다 때려박아 세팅값을 정했는데
이러면 과최적화, 과적합이 잔뜩 껴있는 상태겠죠
그러면 당장 내일부터 로직이 유효할지 아닐지 확신이 없지만
한달 단위로 끊어서 76개월 (76번) forward walk 하여 76번의 확신이 주어졌다면
그때 그때 시장상황을 반영하여 세팅값을 추출하는 방법은, 과적합 문제가 어느정도 해소된게 아닌가?
하는 궁금증 입니다.
향후 실거래에 적용할 때도,
과거 3개월 가격데이터로 세팅값을 업데이트하고
1달 단위로 세팅값을 계속 조정하면서 할 예정입니다
감사합니다.