http://suma_maple.blog.me/221006132300
해당 글의 내용을 구현해보고 싶었습니다.
결과적으로 다른 결과가 나와 좀 당황스럽습니다. ㅎㅎ
어디서 잘못된 것인지 고수님들 검토 부탁드립니다.
구현한 해당전략은 case3와 case4입니다.
유니버스: 스탁필터를 보시면 아시겠지만, 12개의 섹터ETF로 하였습니다. (16년 9월 KRX는 섹터 개편이 이뤄집니다.)
백테스트 기간: 13년 1월~16년 12월, 총 48개월
상대모멘텀 : 3/6/9/12의 수익률 상위 3개ETF(해당 글에서는 5개이나, 5개는 더더욱 성과가 안 좋습니다).
절대모멘텀 : 상대모멘텀 < 1 이하 제외
코스피보다 나은 성과는 헬스케어ETF 때문인 것으로 파악됩니다.
어찌보면 해당기간 박스피였기 때문에 섹터ETF도 크게 성과를 보지 못한 부분일 수도 있고,
주도 섹터는 어느정도는 모멘텀 효과를 본다고 볼 수도 있을 것 같습니다.
향후 과제로는,
각 섹터ETF의 모멘텀(스코어)으로 비중조절을 어떻게 해야 할 것인지?
자산배분전략 (최소변동성전략 등) 을 어떻게 구현할 것인지?
문의)
//IQEnvironment.etfCommission = 0.05; // ETF 수수료
이 코드가 먹히지 않습니다. 어떻게 해야 슬리피지를 더할 수 있을까요?
function sma_di(stock) { stock.loadPrevData(2,0,0); var sumMV = 0; for(var i=0; i < 240; i++) { sumMV = sumMV + stock.getAdjClose(i); } return sumMV / 240; <-- 리턴됐기때문에 이 아래 두줄은 작동 안합니다 var sma_di = (( (sumMV / 10) / sumMV ) -1 ); return sma_di ; }universe.forEach( function(stock) { stock.setScore('rank_sum', //+ sortedBySMA_di.indexOf(stock) //+ sortedByM_score.indexOf(stock) + sortedByM12_score.indexOf(stock) <== 맨앞에 '+' 있으면 오류 안나나요? ); });var moment = universe.slice().sort( function(a, b) { return a.getScore('rank_sum') - b.getScore('rank_sum'); }); a (작은) - b(큰) 순 정렬입니다 = 오름차순 b (큰) - a(작은) 순 정렬입니다 = 내림차순네. 그렇게 해보겠습니다. function sma_di(stock) { stock.loadPrevData(2,0,0); var sumMV = 0; for(var i=0; i < 240; i++) { sumMV = sumMV + stock.getAdjClose(i); } var sma = sumMV / 240; var sma_di = (( (sma / 10) / sma ) -1 ); return sma_di ; } 이렇게 고치면 되겠죠? 프로핏님 혹시 ETF갖고 백테스트 해보셨나요?