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

운영자님 데이터 검증 부탁드립니다.

소포클레스 2017.09.24 22:19 조회수  640 추천 0

유진파마와 프렌치 교수의 5Star Original 전략을 구현하고 백테스트 하던 중에 10년간 데이터가 한건도 나오지 않아서 문의드립니다.

데이터를 log로 찍어보다가 infinity가 나와서  42~44 line을 추가하였습니다. 그런데 추가하자 마자 데이터가 한건도 안나옵니다ㅠㅠ

42~44 line을 주석처리하면 데이터가 정상적으로 나옵니다. 데이터가 한건도 안나온다는 이야기는 모든 데이터가 무한대 또는 NaN이라는 이야기 인데요....


제가 자바스크립트 초보라 코딩을 잘못한 건지, 아니면 데이터가 잘못된 건지 문의드립니다.

감사합니다.  

댓글 6
36~45 라인을 
    if (stock.bp <= 0  || stock.gpa4 <= 0 || stock.AssetGrowth4 >= 0 ) { return false; }    
로 바꿨더니
[2008-01-02] universe count:1666, modelPortfolio count:334
[2008-02-01] universe count:1679, modelPortfolio count:336
[2008-03-03] universe count:1669, modelPortfolio count:334
[2008-04-01] universe count:1650, modelPortfolio count:331
[2008-05-02] universe count:1638, modelPortfolio count:328

이렇게 뜨는데 의도하신대로 작동하는건가요?
Prophit 2017.09.25 10:11
함수 호출을 잘 못 하셨습니다. 
특히 37번 라인에 gpa4는 없는 함수인데 아마도 Proe4인것 같습니다.

36~38번 라인
    var v_bp = Number(stock.bp);                                                                                                                          
    var v_gpa4 = Number(stock.gpa4);                                                                                                                      
    var v_AssetGrowth4 = Number(stock.AssetGrowth4);
에러입니다.

위 문장을
    var v_bp = Number(bp(stock));                                                                                                                          
    var v_gpa4 = Number(Proe4(stock));                                                                                                                      
    var v_AssetGrowth4 = Number(AssetGrowth4(stock)); 
수정하시면 됩니다.
푸른주전자 2017.09.25 10:12
엇 죄송합니다. 제가 BMT 중이라ㅠㅠ
아래처럼 바꿔도 데이터가 10년간 한건도 안나옵니다 ㅠㅠ
즉 전체 데이터가 무한대이거나 NaN이라는 이야기 인데요. 
    if (  v_bp <= 0                                                                                                                                       
        ||v_Proe4 <= 0                                                                                                                                     
        ||v_AssetGrowth4 >=0                                                                                                                             
        ||! isNumber(v_bp)                                                                                                                               
        ||! isNumber(v_Proe4)                                                                                                                            
        ||! isNumber(v_AssetGrowth4)                                                                                                                    
       ) { return false; } 
소포클레스 2017.09.26 03:05
아래부분을 빼면 나오긴 하는데 제 의도는 무한대나 NaN은 오류데이터 임으로 순위에서 빼고자 합니다.
||! isNumber(v_bp)           
||! isNumber(v_Proe4)        
||! isNumber(v_AssetGrowth4) 
소포클레스 2017.09.26 03:07
bp 함수를 이렇게 정의하셨는데요.
function bp(stock) { return stock.getFundamentalTotalEquity() / stock.getMarketCapital(); }

logger.debug('stock.bp:' + stock.bp);
위에처럼 로그를 찍어보시면 아시겠지만
bp는 글로벌 함수이지 stock의 멤버함수가 아닙니다.
그래서 stock.bp 는 undefined가 되고, 여기에 Number() 로 씌우면 NaN 이 됩니다.
NaN을 만드신 isNumber() 함수에 넣으면 false가 리턴되네요.
한줄로 써보면 isNumber(Number(stock.bp)) 는 결국 false가 됩니다.

그래서 위에 푸른주전자님 댓글처럼 
var v_bp = Number(bp(stock));  <- 요렇게 호출하셔야 의도대로 동작할거 같은데요?
혹시 그렇게 해도 데이터가 한건도 안나오는건가요?
제가 bp(stock)의 결과를 찍어보면 잘 나오고 있긴한데요.
등엔트로피 2017.09.26 17:37
등엔트로피님 감사드립니다^^  그렇게 해보게습니다
소포클레스 2017.09.26 21:45
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글