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

PER+모멘텀 전략입니다.

등엔트로피 2017.04.21 16:52 조회수  1213 추천 0

안녕하세요. 등엔트로피입니다.

아래 질문에 답변하기에 너무 긴 내용이라 별도의 글을 하나 팠습니다.


바로 아래 보이는 메뉴의 알고리즘을 클릭하시면 자세한 코드를 보실 수 있습니다.

(perMomentumBuilder 함수 참고)


저희가 이 기회에 강조하고 싶은건 모멘텀에서 사용하는 수정주가입니다.

모멘텀을 구하기 위해서는 수정주가를 사용해야 하는것은 누구나 알고 있지요.

그러나 정확한 수정주가를 구하기는 생각보다 어렵습니다.

각종 합병, 분할, 배당등의 이벤트를 모두 트랙킹해야 하거든요.

저희는 정확한 수정주가를 위해 한땀한땀 전수조사를 통해 이 데이터를 만들었습니다.

이태리장인 처럼요. :)


아래 "내 알고리즘에 복사" 버튼을 누르시면 내 알고리즘으로 가져와서 이리저리 변경하면서 테스트 해 볼 수 있습니다.

댓글 3
정성어린 답변 감사드립니다 :)

공부가 부족해서 질문 투성이네요.
추가 질문을 드려보자면 원래 질문의 의도는 
모멘텀을 구해서 0 이하인 종목을 제외하고 basket에 담으려 합니다.

근데 모멘텀 0 이상인 종목만 담았더니
MAX_SIZE의 영향이 남아서 종목당 매수액에 문제가 되더라고요
(ex. 투자금 1000만원 //  모멘텀 필터된 종목은 10종목일경우 = 종목당 100만원씩 매수 의도;
그러나 MAX_SIZE = 20 이라 종목당 50만원씩만 매수됨)

그래서 MAX_SIZE를 수정하려고 stockfilter 에 
    모멘텀 0인 종목을 제외시켜 momentumPort 로 지정하고 다음과 같이 추가했습니다.

    var momentumPort = modelPortfolio.filter(function(stock) { ~~~ 위의 내용들~
    } );
    MAX_SIZE = (momentumPort == null) ? 0 : momentumPort.length;
    return momentumPort;

이렇게 했는데 MAX_SIZE는 그대로더라고요.
그래서 onDayClose 쪽으로
var account = IQAccount.getDefaultAccount();
basket = new Basket(account, MAX_SIZE, IQEnvironment.aum * STOCK_WEIGHT);
basket.setPortfolioBuilder(portfolioBuilder);

이 항목들을 옮겨놨는데 또 에러 ㅠㅠ
어떻게 해야할까요?
Prophit 2017.04.21 19:12
중요한건 onInitialize()에서 아래줄입니다.
basket = new Basket(account, MAX_SIZE, IQEnvironment.aum * STOCK_WEIGHT);
이렇게 basket이 생성될때 종목의 수가 결정됩니다.
일단 결정되면 MAX_SIZE 변수를 바꾼다고 종목의 수가 바뀌지는 않습니다.
수정을 원하신다면 위 샘플의 10번째 줄을 직접 수정하시면 됩니다.

그리고 onDayClose에서 new Basket을 하시면 원하는대로 동작하지 않을 가능성이 큽니다.



등엔트로피 2017.04.25 17:07
그렇네요. new Basket을 하니까 cash를 자꾸 버리는 현상이 발생되네요.
Prophit 2017.04.27 00:53
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글