유진파마와 프렌치 교수의 5Star Original 전략을 구현하고 백테스트 하던 중에 10년간 데이터가 한건도 나오지 않아서 문의드립니다.
데이터를 log로 찍어보다가 infinity가 나와서 42~44 line을 추가하였습니다. 그런데 추가하자 마자 데이터가 한건도 안나옵니다ㅠㅠ
42~44 line을 주석처리하면 데이터가 정상적으로 나옵니다. 데이터가 한건도 안나온다는 이야기는 모든 데이터가 무한대 또는 NaN이라는 이야기 인데요....
제가 자바스크립트 초보라 코딩을 잘못한 건지, 아니면 데이터가 잘못된 건지 문의드립니다.
감사합니다.
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 이렇게 뜨는데 의도하신대로 작동하는건가요?함수 호출을 잘 못 하셨습니다. 특히 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)); 수정하시면 됩니다.엇 죄송합니다. 제가 BMT 중이라ㅠㅠ 아래처럼 바꿔도 데이터가 10년간 한건도 안나옵니다 ㅠㅠ 즉 전체 데이터가 무한대이거나 NaN이라는 이야기 인데요. if ( v_bp <= 0 ||v_Proe4 <= 0 ||v_AssetGrowth4 >=0 ||! isNumber(v_bp) ||! isNumber(v_Proe4) ||! isNumber(v_AssetGrowth4) ) { return false; }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)의 결과를 찍어보면 잘 나오고 있긴한데요.