퀀트

28. 이평선 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우

만 기 2023. 1. 20. 23:06

 

이평선을 이용한 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우

 

이평선 데이터 준비

# 실험할 이평선 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일 이평선 위에서 매수');