반응형
F-score
1 수익성 전년 당기순이익: 0 이상
2 수익성 전년 영업현금흐름: 0이상
3 수익성 ROA: 전년 대비 증가
4 수익성 전년 영업현금흐름: 순이익보다 높음
5 재무 건정성 부채비율: 전년 대비 감소
6 재무 건정성 유동비율: 전년 대비 증가
7 재무 건정성 신규 주식 발행(유상증자): 전년 없음
8 효율성 매출총이익률: 전년 대비 증가
9 효율성 자산회전율: 전년 대비 증가
매매전략
- PBR 최저 20% 기업에만 투자 (상장폐지된 종목은 제외)
- F-Score 9개 요소를 검토해 맞으면 1점, 틀리면 0점을 매긴 후, 점수가 높은 20~30개 기업 매수
- 백테스트기간: 2007.5.25 ~ 2017.5.25
- 연 1회 리밸런싱
Code
def 순이익양호(self):
""" 1 수익성 전년 당기순이익: 0 이상
"""
c = self.column
s = self.순이익
순이익sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
selected = self.순이익.loc[순이익sum>0,'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 영업현금흐름양호(self):
""" 2 수익성 전년 영업현금흐름: 0이상
"""
c = self.column
s = self.영업현금흐름
영업현금흐름sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
selected = self.영업현금흐름.loc[영업현금흐름sum>0,'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 수익성ROA증가(self):
""" 3 수익성 ROA: 전년 대비 증가
ROA = 순이익/총자산 (Return on Assets)
"""
c = self.column
pc = self.pcolumn
s = self.영업현금흐름
영업현금흐름sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
p영업현금흐름sum = s[pc[0]] + s[pc[1]] + s[pc[2]] + s[pc[3]]
s = self.순이익
순이익sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
p순이익sum = s[pc[0]] + s[pc[1]] + s[pc[2]] + s[pc[3]]
ROA_py = p순이익sum/p영업현금흐름sum
ROA_ty = 순이익sum/영업현금흐름sum
selected = self.순이익.loc[ROA_ty > ROA_py, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 영업현금흐름순이익비교(self):
""" 4 수익성 전년 영업현금흐름: 순이익보다 높음
"""
c = self.column
pc = self.pcolumn
s = self.영업현금흐름
영업현금흐름sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
s = self.순이익
순이익sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
diff = 영업현금흐름sum - 순이익sum
selected = self.순이익.loc[diff>0, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 부채비율감소(self):
""" 5 재무 건정성 부채비율: 전년 대비 감소
"""
부채비율_py = self.유동부채[self.pcolumn[3]]/self.총자본[self.pcolumn[3]]
부채비율_ty = self.유동부채[self.column[3]]/self.총자본[self.column[3]]
selected = self.순이익.loc[부채비율_py > 부채비율_ty, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 유동비율증가(self):
""" 6 재무 건정성 유동비율: 전년 대비 증가
유동비율 = 유동자산/유동부채
"""
유동비율_py = self.유동자산[self.pcolumn[3]]/self.유동부채[self.pcolumn[3]]
유동비율_ty = self.유동자산[self.column[3]]/self.유동부채[self.column[3]]
selected = self.순이익.loc[유동비율_py < 유동비율_ty, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 신규주식발행여부(self):
""" 7 재무 건정성 신규 주식 발행(유상증자): 전년 없음
"""
pcolumn = '%4d-04'%(self.year,)
column = '%4d-04'%(self.year+1,)
p_stocks = self.시총[pcolumn]/self.수정주가[pcolumn]
c_stocks = self.시총[column]/self.수정주가[column]
selected = self.시총.loc[1.01*p_stocks > c_stocks, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 매출총이익률증가(self):
""" 8 효율성 매출총이익률: 전년 대비 증가
매출총이익률 = 매출총이익/매출액
"""
c = self.column
pc = self.pcolumn
s = self.매출총이익
매출총이익sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
p매출총이익sum = s[pc[0]] + s[pc[1]] + s[pc[2]] + s[pc[3]]
s = self.매출액
매출액sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
p매출액sum = s[pc[0]] + s[pc[1]] + s[pc[2]] + s[pc[3]]
매출총이익률_py = p매출총이익sum/p매출액sum
매출총이익률_ty = 매출총이익sum/매출액sum
selected = self.순이익.loc[매출총이익률_py<매출총이익률_ty, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def 자산회전율증가(self):
""" 9 효율성 자산회전율: 전년 대비 증가
자산회전율 = 매출액/총자산
"""
c = self.column
pc = self.pcolumn
s = self.매출액
매출액sum = s[c[0]] + s[c[1]] + s[c[2]] + s[c[3]]
p매출액sum = s[pc[0]] + s[pc[1]] + s[pc[2]] + s[pc[3]]
자산회전율_py = p매출액sum/self.총자산[self.pcolumn[3]]
자산회전율_ty = 매출액sum/self.총자산[self.column[3]]
selected = self.순이익.loc[자산회전율_py<자산회전율_ty, 'Symbol']
self.fscore.loc[selected] += 1
#print(self.fscore.head(), len(selected))
def adapt_fscore(self):
self.순이익양호()
self.영업현금흐름양호()
self.수익성ROA증가()
self.영업현금흐름순이익비교()
self.부채비율감소()
self.유동비율증가()
self.신규주식발행여부()
self.매출총이익률증가()
self.자산회전율증가()
Result
ReturnCAGRMDDSR
Return | CAGR | MDD | Sharp Ratio |
x6 | 21% | 56% | 1.2 |
https://github.com/didw/quant_trading
반응형
'Trading > 주식' 카테고리의 다른 글
22년 1분기 주식 손익 (0) | 2022.04.06 |
---|---|
주식 2021년 12월 손익 (0) | 2022.01.11 |
주식 2021년 11월 손익 (0) | 2022.01.11 |