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

타 사이트와의 데이터 차이 관련 질문

Chris Yoo 2017.08.15 18:34 조회수  927 추천 0

안녕하세요,


Snek에 있는 PER/PBR 전략(https://m.snek.ai/alpha/article/108070?utm_content=buffer47212&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer)을 인텔리퀀트에서 테스트 해보고자 아래와 같이 짰습니다.


전략의 골자는

- PER이 2.5~10인 주식 중에서 PBR이 가장 낮은 30개 주식을 매수(단, PBR<0.1 인 주식은 제외)

입니다.


그런데 인텔리퀀트에서 얻어낸 리스트하고, Fnguide 대우 스크리너(?? 아무튼 이 링크에 있는 http://comp.fnguide.com/svo/Kdbdw/screener.asp?u=xxx#tabPaging ) 에서 같은 조건으로 얻어낸 리스트가 많이 다르더라고요.

(여기서는 PER 2.5~10 및 PBR 최소값 0.1 로 설정 후 PBR 최대값을 움직이면서 30개로 맞추어 리스트를 얻었습니다)


종목도 반도 안겹치고, 겹치는 종목도 PER, PBR 값이 많이 다릅니다.


제 생각에 선별 방식은 동일한데, 결과가 다르니까 서로 데이터 자체가 다른게 아닐까 싶은데요, 원래 그럴 수 있는건가요? 아니면 제가 코드를 잘못 짠건지.. 


감사합니다.

Created with Highcharts 4.2.7AlgorithmKOSPI2017-07-312017-08-012017-08-022017-08-032017-08-042017-08-052017-08-062017-08-072017-08-082017-08-092017-08-102017-08-112017-08-122017-08-132017-08-14-6%-4%-2%0%2%powered by IntelliQuant
Algorithmpowered by IntelliQuant
초기투자금액
10000000
수익률
-4.43%
월평균 수익률
-4.43%
표준편차
0.64%
베타
0.61
Sharpe Ratio
-11.48
(젠센) 알파
-1.61
최대 손실폭
4.75%
x
56
 
1
/*
2
뼈대 전략
3
1. PER 2.5~10.0 & PBR 0.1 이상인 주식 중 PBR 이 낮은 30개 종목을 매수(강환국님 초등학생 전략)
4
(https://m.snek.ai/alpha/article/108070?utm_content=buffer47212&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer)
5
2. 매년 2월 초 리밸런싱
6
*/
7
8
9
//프로젝트에 필요한 변수들을 선언합니다.
10
var stock_basket;               //주식 종목들을 담을 Basket 객체입니다.
11
12
// 이 전략이 초기화되면 Initialize 함수가 호출됩니다.
13
function initialize() {
14
15
    //필요한 바스켓을 선언합니다. 이 바스켓을 통해 종목을 선정하고 주문을 수행합니다.
16
    //주식 종목을 담을 Basket객체입니다. targetSize 개의 종목을 담을 예정
17
    
18
    stock_basket = new Basket(IQAccount.getDefaultAccount(), 30, IQEnvironment.aum);
19
    
20
    //빌더 함수를 정의합니다.
21
    stock_basket.setPortfolioBuilder(stockPortfolioBuilder);
22
23
}
24
25
//아래 stockPortfolioBuilder 함수에서 사용할 필터링 함수를 정의합니다.
26
//이 필터링 함수는 주식 종목 stock을 인자로 하여 종목 숫자만큼 호출됩니다.
27
//true를 리턴하면 배열에 포함되고, false를 리턴하면 필터링 됩니다.
28
function stockFilter(stock) {
29
/*    if (stock.getMarketCapital() === 0) { return false; }
30
    if (stock.getFundamentalTotalAsset() === 0) { return false; } 
31
    if (stock.getOpen() === 0) { return false; }
32
    if (stock.getClose() === 0) { return false; }                      // 상장폐지 주식 제외
33
    if (stock.getTradingValue() === 0) { return false; }               // 거래정지 중인 종목 제외
34
    if (stock.isETF) { return false; }                                 // ETF 제외
35
    if (stock.getFundamentalNetProfit() <= 0) { return false; }        // 당기 순이익 0 이하 종목 제외
36
    if (stock.getFundamentalTotalEquity <= 0) { return false; }        // 당기 자본총계 0 이하 종목 제외
37
*/    
38
    if (stock.getPBR() < 0.1) { return false; }  // PBR이 0.1 이상
39
    if (stock.getPER() < 2.5 || stock.getPER() > 10) { return false; }  // PER 2.5~10
40
       
41
    return true;
42
}
43
44
45
// stock_basket 포트폴리오를 어떻게 구성할지를 정의합니다.
46
// Basket.buildPortfolio() 함수를 호출하면 이 함수가 호출됩니다.
47
// 이 함수의 결과값은
48
function stockPortfolioBuilder(targetSize) {
49
    var universe = IQStock.filter(stockFilter);
50
    
51
    var sortedByPBR = universe.slice().sort( function(a, b) { return a.getPBR() - b.getPBR(); });    
52
    
53
    //PBR이 낮은 상위 30개 종
54
...
55
(코드는 일부만 보여지며 전체 코드는 "내 알고리즘에 복사" 버튼을 클릭하여 복사할  있습니다. 
56
알고리즘 복사  일정한 포인트가 차감되어 게시자에게 보상해 드립니다.)
댓글 3
스탭은 아니지만 댓글달아봅니다
결과값이 다른 이유로 대표적인게
PER, PBR 구하는 방식이 달라서 그럴수도 있습니다. (분기 or 연율화 or 트레일링)
Prophit 2017.08.15 21:23
기존에 운영진에서 달아주신 답변입니다
https://www.intelliquant.co.kr/article/94
Prophit 2017.08.16 08:51
앗 감사합니다 Prophit 님 ^^
Chris Yoo 2017.08.17 11:29
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글