볼린저 밴드를 이용한 투자전략 : 상한선 위에서 매수 또는 하한선 아래에서 매수하는 경우
볼린저 밴드 상한선, 하한선 데이터 만들기
# 상한선 = 20일 이평선 값 + ( 20일 동안의 주가 표준편차 값 ) * 2
d['bbh_20d_2std'] = d['adj_close_sma20d'] + 2*d['adj_close'].rolling(20, axis=1).std()
# 하한선 = 20일 이평선 값 - ( 20일 동안의 주가 표준편차 값 ) * 2
d['bbl_20d_2std'] = d['adj_close_sma20d'] - 2*d['adj_close'].rolling(20, axis=1).std()
조건에 해당하는 종목과 날짜 필터링
# 폭이 좁을 때, 상한선 돌파한 경우 종목과 날짜
over_narrow_bbh_midxs = master_midxs[((d['bbw_20d_4std__adj_close'] < 0.1) & (d['adj_close'] > d['bbh_20d_2std'])).stack(dropna=False)]
# 폭이 좁을 때, 하한선 아래의 경우 종목과 날짜
under_narrow_bbl_midxs = master_midxs[((d['bbw_20d_4std__adj_close'] < 0.1) & (d['adj_close'] < d['bbl_20d_2std'])).stack(dropna=False)]
# 폭이 넓을 때, 상한선 돌파한 경우 종목과 날짜
over_wide_bbh_midxs = master_midxs[((d['bbw_20d_4std__adj_close'] > 0.25) & (d['adj_close'] > d['bbh_20d_2std'])).stack(dropna=False)]
# 폭이 넓을 때, 하한선 아래의 경우 종목과 날짜
under_wide_bbl_midxs = master_midxs[((d['bbw_20d_4std__adj_close'] > 0.25) & (d['adj_close'] < d['bbl_20d_2std'])).stack(dropna=False)]
기간별 수익률 데이터 저장
exp['ret_over_narrow_bbh'] = get_all_return_df_by(d, over_narrow_bbh_midxs)
exp['ret_under_narrow_bbl'] = get_all_return_df_by(d, under_narrow_bbl_midxs)
exp['ret_over_wide_bbh'] = get_all_return_df_by(d, over_wide_bbh_midxs)
exp['ret_under_wide_bbl'] = get_all_return_df_by(d, under_wide_bbl_midxs)
통계, 그래프 보기
describe_and_aggperf(exp['ret_under_wide_bbl'])
draw_meanmed_boxplot(exp['ret_under_wide_bbl'], _title='볼린저밴드 폭이 넓을 때, 주가가 하한선 아래에 위치한 경우, 보유기간별 수익률 통계 (%)');
'퀀트' 카테고리의 다른 글
31. 볼린저 밴드를 이용한 투자 전략 : 볼린저 밴드의 폭 너비에 따라 매수하는 경우 (0) | 2023.01.27 |
---|---|
30. 이평선 투자 전략 : 골든크로스 발생 시점에 매수하는 경우 (1) | 2023.01.26 |
29. 이평선 투자 전략 : 정배열 또는 역배열에 매수하는 경우 (0) | 2023.01.25 |
28. 이평선 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우 (0) | 2023.01.20 |
27. 모든 주식에 대해 보유 기간별 수익률 검증하기 (1) | 2023.01.19 |