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

슈퍼가치전략에 부스터를 달아보자.

Prophit 2017.09.28 11:57 조회수  2788 추천 5

강환국님의 슈퍼가치전략에 가치가중을 추가해봤습니다.


서진원님의 슈퍼스타K 전략이 슈퍼가치전략에서 평균모멘텀스코어로 가치가중을 했다면

이번엔 PCR과 PSR로 테스트해보겠습니다


- 수수료(0.015%), 세금(0.3%)

- 전량 매도 후 재매수 방식테스트라서 약간의 슬리피지가 포함됨


[전략설명]

1. 슈퍼가치전략(PER+PBR+PCR+PSR+소형주) 20종목을 뽑는다.

2. 각 종목의 팩터 역산값을 구한다.(팩터/시총)

3. 2번항목을 제곱한다.

4. 각 종목의 3번값을 모두 더한다.

5. 종목 매수시 종목 비중을 [3번값 / 4번값 x 예산]으로 계산하여 매수한다.


성과가 어마어마하네요.

성과가 대폭 늘어났지만 MDD는 생각보다 많이 안늘어나네요

 절대모멘텀이나 Risk parity 를 결합한다면 좋을거 같습니다.

3번 단계에서 제곱 대신 3제곱으로 늘린다면 그에 맞춰 더욱 변동성이 커집니다


추가적으로 주의점은 최근 3년간은(2014.01~) PSR가중이 오히려 더 좋고

PCR은 평균모멘텀과 성과가 거의 비슷했습니다.


즉, 구간에 따라 경향이 다르니 꼭 검증 후에!

댓글 19
와우...이건 신세계네요ㅎ언제나 위험에 대비해야겠어요
쭌쓰 2017.09.28 13:41
var final_port에 stock.loadPrevData는 필요 없는 건가요?
칸트 2017.09.28 18:31
@칸트.
앞서 상장미만 1년 제외할때 각종목의 지난 데이터를 불러왔기 때문에 없어도 무방합니다
혹시나해서  stock.loadPrevData를 넣고 다시 돌려봤는데 동일한 결과가 나왔습니다
Prophit 2017.09.28 20:42
@쭌쓰 근데 MDD가 높아서 그냥은 간떨려서 못쓰겠네요
Prophit 2017.09.28 20:44
prophit님은 대단하시네요.
점점 진화하고 계시네요.
melodica7 2017.09.28 20:48
@melodica7
아닙니다. 그냥 여기저기서 주워들은거 끼워맞춰보고 있습니다
Prophit 2017.09.28 22:19
좋은 스크립트 공유 감사합니다~ 
프로그래밍 초보라 한가지 질문드립니다. 포트폴리오 빌더함수에서 소팅시 universe.slice().sort() 구문의 중간에 slice가 꼭 필요한건가요? slice의 역할이 잘 이해가 안되네요^^;;
thrufore 2017.09.29 07:08
@thrufore
필요없습니다. 기존껄 복사하다보니 딸려왔는데 귀찮아서 안지웠어요
Prophit 2017.09.29 07:50
@ Prophit
아.. 역시! 열공해야겠습니다. 고맙습니다.
칸트 2017.09.29 10:26
@thrufore
slice는 일종의 복사 개념인거죠. universe.sort() 하면 universe 배열 자체를 sort하게 되고, slice를 넣어서 하면 universe가 아닌 다른 배열객체를 복사해서 만든 다음 그 복사된 배열을 sort하게 됩니다.
그래서, 하나의 universe에서 여러 지표별로 sort된 배열 객체를 만들어서 쓰려면 slice를 하시는게 바람직할 거 같습니다.
Joseph 2017.09.29 13:18
@Joseph
아 그런거군요. 감사합니다
Prophit 2017.09.29 14:11
@ Joseph
고맙습니다. 초보지만 열심히 잘 쓰고 있습니다.
제가 이해가 덜 되어서 그런데, 그러면 universe.slice().sort() 명령문만 넣어도인지,
가령 100종목 소팅 한다면, 차순 정열 후  .slice(0, 100); 를 뒤에 붙이는 것 까지 넣는 것이
바람직하단 말씀이신지.. 궁금합니다.
예)
var sortedByPER = universe.slice().sort( function(a, b) { return ep(b) - ep(a); });
var sortedByPER = universe.slice().sort( function(a, b) { return ep(b) - ep(a); }).slice(0, 100);
칸트 2017.09.29 15:18
slice에 100을 사용하면 sort후에 100위까지만 남고 나머지는 버려집니다. universe는 모든 데이터가 그대로 남아있고요. slice에 숫자를 사용하지 않으면 sort만 됩니다.
소포클레스 2017.09.29 19:06
위에 조셉님께서 말씀하신것 처럼 slice는 자르는 용도 이외에 새로운 배열을 생성하는 기능이 있습니다. slice를 사용하지 않으면 변수에 배열을 대입해도 새로운 배열이 생성되지 않습니다. 다시말해 slice를 사용하지
않는다면 sortedbyPER 변수에 univerce 배열을 대입한후에 sortedbtPER에 배열요소를 추가하면 universe에도 똑같이 추가됩니다. 
소포클레스 2017.09.29 19:33
프로히빗님 전략을 없그레이드 하셨네요. 감사드립니다
소포클레스 2017.09.29 19:35
프로핏님 스크립트 공유해 주셔서 감사합니다. 그런데 잔고 보유 내역에 아무것도 안 나오는데 어떻게 하면 볼수 있을까요? 
James 2017.09.30 16:39
@소포클레스
칭찬 감사합니다^^
@권봉철
잔고 보유내역은 계좌 선택하면 나올겁니다
Prophit 2017.09.30 22:15
좋은 분석 공유 감사드립니다. 여쭤보고 싶은게 있는데
팩터역산에서 팩터/시총은 어떤 방식으로 구하시는 건가요? 
Matthew Kim 2017.12.01 16:01
@Matthew Kim
문의하신 내용은 공유된 알고리즘에 포함되어있습니다
Prophit 2018.02.19 16:44
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글