커뮤니티
내가 만든 전략들과 지식을 공유하고 토론합니다.

섹터(KRX) ETF + 모멘텀

칸트 2018.03.05 16:31 조회수  1124 추천 0


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 수수료

이 코드가 먹히지 않습니다. 어떻게 해야 슬리피지를 더할 수 있을까요?

댓글 8
//IQEnvironment.etfCommission = 0.05; // ETF 수수료

'//' <- 이걸 삭제하셔야 합니다 ( // = 주석처리 기능 = 동작안함)
Prophit 2018.03.06 16:53
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 ;
  }
Prophit 2018.03.06 17:00
   universe.forEach( function(stock) { stock.setScore('rank_sum',
                                       //+ sortedBySMA_di.indexOf(stock) 
                                       //+ sortedByM_score.indexOf(stock)
                                       + sortedByM12_score.indexOf(stock)   <==  맨앞에 '+' 있으면 오류 안나나요?
                                       ); 
});
Prophit 2018.03.06 17:02
var moment = universe.slice().sort( function(a, b) {
        return a.getScore('rank_sum') - b.getScore('rank_sum');  }); 

a (작은) - b(큰) 순 정렬입니다 = 오름차순
b (큰) - a(작은) 순 정렬입니다 = 내림차순
Prophit 2018.03.06 17:03
프로핏님 안녕하세요^^
1. 주석기능을 적용해봤었습니다. 결과는 같아서 그냥 // 해놓고 게시하였어요.
2. 리턴! 자꾸 잊어버리네요;; var로 고쳐야겠네요. 고맙습니다.
3. 네. 두 번 다 해봤는데, 오류/결과가 다르지 않아 저렇게 해놓고 노가다로 돌려보고 있습니다. (제 선에서는 그나마 좀 편하더군요;;; ㅎㅎ ㅠ)
4.일단 sortedByM12를 b-a(모멘텀이 강한 순-높은 순)를 정렬하여 셋스코어 하였고, 겟스코어는 a-b를 해야, 모멘텀 강한 1위가 낮은 순번에 위치하는 것이라 생각했는데요. 혹시 아닌가요?

고맙습니다 ^^
칸트 2018.03.06 17:34
4. 그럼 맞네요. 자세히 본건 아니어서 ㅎㅎ. 
굳이 겟스코어 안해도 되고 바로
sortedByM12_score 를 슬라이스 하면 코드가 더 깔끔합니다
Prophit 2018.03.06 17:49
네. 그렇게 해보겠습니다.

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갖고 백테스트 해보셨나요?
칸트 2018.03.06 18:11
아니요
시계열이 너무 짧아서 안했어요
Prophit 2018.03.07 10:21
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글