이평선을 이용한 투자전략 : 정배열 또는 역배열에 매수하는 경우
이평선 데이터들을 데이터프레임으로 합치기
# 이평선 데이터들을 데이터프레임으로 합치기
allsma_df = pd.DataFrame({f'adj_close_sma{win}d': d[f'adj_close_sma{win}d'].stack(dropna=False) for win in sma_winli})
# 맨 앞 열에 수정주가 데이터 추가
allsma_df.insert(0, 'adj_close', d['adj_close'].stack(dropna=False))
- for문으로 딕셔너리 생성해서 데이터프레임으로 만든다.
정배열, 역배열 조건 쿼리 만들기
_cn_li = allsma_df.columns # 수정종가 ~ 120이평선
_qrli = list() # 정배열 리스트
_inv_qrli = list() # 역배열 리스트
for i, cn in enumerate(_cn_li):
if i > 0:
_qrli.append(f"{_cn_li[i-1]} >= {_cn_li[i]}") # 정배열 조건
_inv_qrli.append(f"{_cn_li[i-1]} <= {_cn_li[i]}") # 역배열 조건
_qr = ' and '.join(_qrli)
_inv_qr = ' and '.join(_inv_qrli)
print(_qr)
# adj_close >= adj_close_sma5d and adj_close_sma5d >= adj_close_sma10d
# and adj_close_sma10d >= adj_close_sma20d and adj_close_sma20d >= adj_close_sma40d
# and adj_close_sma40d >= adj_close_sma60d and adj_close_sma60d >= adj_close_sma120d
이평선 데이터프레임에서 조건(쿼리)에 맞는 인덱스 저장
# 정배열
aligned_midxs = allsma_df.query(_qr).index
# 역배열
inv_aligned_midxs = allsma_df.query(_inv_qr).index
# 나머지 경우
other_midxs = set(allsma_df.index) - set(aligned_midxs) - set(inv_aligned_midxs)
정배열, 역배열 조건에 해당하는 기간별 수익 데이터
exp['ret_sma_aligned'] = get_all_return_df_by(d, aligned_midxs)
exp['ret_sma_inverse_aligned'] = get_all_return_df_by(d, inv_aligned_midxs)
exp['ret_sma_not_aligned'] = get_all_return_df_by(d, other_midxs)
집계, 데이터 보기
# 이평선 정배열에서 매수할 경우
describe_and_aggperf(exp['ret_sma_aligned'])
draw_meanmed_boxplot(exp['ret_sma_aligned'], f'정배열 상황에서 매수');
# 이평선 역배열에서 매수할 경우
describe_and_aggperf(exp['ret_sma_inverse_aligned'])
draw_meanmed_boxplot(exp['ret_sma_inverse_aligned'], f'역배열 상황에서 매수');
'퀀트' 카테고리의 다른 글
31. 볼린저 밴드를 이용한 투자 전략 : 볼린저 밴드의 폭 너비에 따라 매수하는 경우 (1) | 2023.01.27 |
---|---|
30. 이평선 투자 전략 : 골든크로스 발생 시점에 매수하는 경우 (1) | 2023.01.26 |
28. 이평선 투자 전략 : 이평선의 위 또는 아래에서 매수하는 경우 (0) | 2023.01.20 |
27. 모든 주식에 대해 보유 기간별 수익률 검증하기 (1) | 2023.01.19 |
26. 해리 마코위츠의 포트폴리오 이론(분산투자의 필요성) (1) | 2023.01.16 |