퀀트

30. 이평선 투자 전략 : 골든크로스 발생 시점에 매수하는 경우

만 기 2023. 1. 26. 20:25

 

이평선을 이용한 투자전략 : 골든크로스 발생 시점에 매수하는 경우

 

이전날 수정 주가와 이평선 데이터 준비

# 하루 전 수정 주가
d['adj_close__l1d'] = d['adj_close'].shift(1, axis=1)

# 하루 전 이평선 가격
for win in sma_winli:
    d[f'adj_close_sma{win}d__l1d'] = d[f'adj_close_sma{win}d'].shift(1, axis=1)

 

 

골든크로스 조건에 해당하는 멀티인덱스로 기간 수익률 데이터 만들기

# 전체 멀티 인덱스
master_midxs = d['adj_close'].stack(dropna=False).index
# MultiIndex([('A000020', '2018-01-02'),
#             ('A000020', '2018-01-03'),
#             ('A000020', '2018-01-04'),
#             ...


for win in sma_winli:
    # 골든크로스에 해당하는 멀티 인덱스
    golden_cross_idxs = master_midxs[((d[f'adj_close__l1d'] < d[f'adj_close_sma{win}d__l1d']) & (d[f'adj_close'] > d[f'adj_close_sma{win}d'])).stack(dropna=False)]
    
    # 기간 수익률 데이터
    exp[f'ret_goldencross_sma{win}d'] = get_all_return_df_by(d, golden_cross_idxs)
  • ((d[f'adj_close__l1d'] < d[f'adj_close_sma{win}d__l1d']) & (d[f'adj_close'] > d[f'adj_close_sma{win}d'])).stack(dropna=False)
    • 시리즈 형태 멀티인덱스로 True & False 값을 반환

 

 

통계, 그래프 보기

describe_and_aggperf(exp['ret_goldencross_sma20d'])

draw_meanmed_boxplot(exp['ret_goldencross_sma20d'], '20일 이평선 골든크로스');