새로만들기 전략에서 단순히 아래의 필터만 추가하였습니다.
if (stock.getFundamentalDividend() === 0) { return false; }
2017년 9월에 신풍제지, 신한, 이녹스, 코리아에스 종목이 뽑히지 않고
뽑힌 30종목 모두 배당액이 있음을 확인했습니다.
혹시, 이렇게 해도 안되신다면 소스를 직접 봐야지 알것 같습니다.
function stockFilter(stock) {
if (stock.market != 1 || stock.isETF) //코스닥 종목과 ETF 종목을 필털링 합니다.
return false;
if (stock.getFundamentalDividend() === 0) { return false; }
var filterMarketCapital = (stock.getMarketCapital() > 0); // 시가총액 500억 이상 기준
var filterTradingValue = (stock.getTradingValue() > 0); // 일거래대금 10억 이상 기준
var filterPER = (per(stock) > 0); // per가 마이너스인 경우 제외
return (filterMarketCapital && filterTradingValue && filterPER);
}
// 필터링 함수 정의 function stockFilter(stock) { if (stock.manage === 1 || stock.manage === 2 || stock.manage === 4) { return false; } if (stock.getMarketCapital() === 0) { return false; } // if (stock.getFundamentalTotalAsset() === 0) { return false; } if (stock.getOpen() === 0) { return false; } if (stock.getClose() === 0) { return false; } // 상폐종목 제외 (Survivorship Bias 제거) if (stock.getTradingValue() === 0) { return false; } // 거래정지 중인 종목 제외 if (stock.isETF) { return false; } // ETF 제외 if (stock.name.substr(stock.name.length -2) === "스팩") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "1호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "2호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "3호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "4호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "5호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "6호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "7호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "8호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -2) === "9호") { return false; } //스팩 제외 if (stock.name.substr(stock.name.length -4) === "SPAC") { return false; } //스팩 제외 if (stock.getFundamentalNetProfit() <= 0) { return false; } // 당기 순이익 0 이하 종목 제외 if (stock.getFundamentalOperatingCashFlow() <= 0) { return false; }// 영업활동으로인한 현금흐름 0 이하 종목 제외 if (stock.getFundamentalTotalEquity <= 0) { return false; } // 당기 자본총계 0 이하 종목 제외 if (stock.getDividendYieldRatio <= 0) { return false; } // 배당수익률 0 이상 if (stock.getPBR() <= 0.1 || stock.getPBR() >= 1) { return false; } // 0.1 < PBR < 1 if (stock.getPER() <= 0 || stock.getPER() >= 10) { return false; } // 0 < PER < 10 stock.loadPrevData(2, 0, 0); if (stock.getFundamentalDividend(0) === 0) { return false; } // if (stock.getDividendYieldRatio(1) <= 0) { return false; } // if (stock.getDividendYieldRatio(2) <= 0) { return false; } // if (stock.getDividendYieldRatio(3) <= 0) { return false; } return true; }레오황님 어디가 문제였었나요? 저도 배당수익률이 안 먹는 것을 발견했네요(그동안 적용되는줄 알았던;). if (stock.getDividendYieldRatio <= 0) { return false; } // 배당수익률 0 이상 요렇게 한줄 넣었습니다.숫자를 "0"이 아니라 "5"를 넣어도 백테스트 결과가 똑같길래 발견하였네요.네~ 저는 필터링 함수에서 if (stock.getDividendYieldRatio <= 0) { return false; } // 배당수익률 0 이상 코드를 사용 했었는데, 푸른주전자님께서 if (stock.getFundamentalDividend(0) === 0) { return false; } 코드로 수정해 주셔서 해봤더니 필터링이 되었습니다. 그런데 백테스팅을 해보니 배당을 안준다고 해서 수익이 낮은건 아니라서 해당 코드는 삭제하고 사용하기로 했습니다.푸른주전자님 고맙습니다^^ 그러면 Ratio는 0.xx로 표현되나요? 예를 들어, if (stock.getDividendYieldRatio < 0.03) { return false; } //배당수익률 3% 이상*100이 된 백분율표시입니다. 3% 이상만 if (stock.getDividendYieldRatio < 3) { return false; } //배당수익률 3% 이상