이평선을 이용한 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우
이평선 데이터 준비
# 실험할 이평선 N일
sma_winli = [5, 10, 20, 40, 60, 120]
# 이평선 데이터
for win in sma_winli:
d[f'adj_close_sma{win}d'] = adj_close.rolling(win, axis=1, min_periods=win//2).mean()
- min_period=win//2 : 필요한 최소 데이터 갯수
기간 수익률 데이터 준비
# 기간 수익률 데이터
for hold_day in [1,2,3,5,10,20,40,60,120]:
d[f'close_return_{hold_day}d'] = d['adj_close'].pct_change(periods=hold_day, axis=1, fill_method=None).shift(-hold_day, axis=1)
print(f'close_return_{hold_day}d', d[f'close_return_{hold_day}d'].shape)
- pct_change는 이전 periods와의 변동률을 나타내는 값이므로
- .shift(-periods) 를 사용하여 왼쪽으로 periods만큼 이동시키면
- 해당 날짜부터 periods동안 투자했을시 수익률을 나타낸다.
이평선 위와 아래에서 매수했을때의 수익률 데이터
adj_close_df = d['adj_close']
for win in sma_winli:
adj_close_sma_df = d[f'adj_close_sma{win}d']
# 주가와 이평선 비교하여 해당 멀티인덱스 저장
lt_midxs = adj_close_df.stack(dropna=False) < adj_close_sma_df.stack(dropna=False) #이평선 아래
gt_midxs = adj_close_df.stack(dropna=False) > adj_close_sma_df.stack(dropna=False) #이평선 위
# 해당 날짜와 종목(멀티인덱스)에 대한 기간 수익률
_lt_retdf = get_all_return_df_by(d, lt_midxs)
_gt_retdf = get_all_return_df_by(d, gt_midxs)
exp[f'ret_lt_sma{win}d'] = _lt_retdf
exp[f'ret_gt_sma{win}d'] = _gt_retdf
20일 이평선 기준 결과보기
# 20일 이평선 아래에서 매수
# 집계 결과(승률)
describe_and_aggperf(exp['ret_lt_sma20d'])
# 그래프 보기
draw_meanmed_boxplot(exp['ret_lt_sma20d'], f'20일 이평선 아래에서 매수');
# 20일 이평선 위에서 매수
# 집계 결과(승률)
describe_and_aggperf(exp['ret_gt_sma20d'])
# 그래프 보기
draw_meanmed_boxplot(exp['ret_gt_sma20d'], f'20일 이평선 위에서 매수');
'퀀트' 카테고리의 다른 글
30. 이평선 투자 전략 : 골든크로스 발생 시점에 매수하는 경우 (1) | 2023.01.26 |
---|---|
29. 이평선 투자 전략 : 정배열 또는 역배열에 매수하는 경우 (0) | 2023.01.25 |
27. 모든 주식에 대해 보유 기간별 수익률 검증하기 (1) | 2023.01.19 |
26. 해리 마코위츠의 포트폴리오 이론(분산투자의 필요성) (0) | 2023.01.16 |
25. 레이 달리오의 올웨더 전략 (0) | 2023.01.15 |