Notice
Recent Posts
Recent Comments
Link
유자차의 재테크 공부방
[자산배분] 채권 동적자산배분 - 파이썬으로 직접 백테스팅하기 - (1) 본문
반응형
채권 동적자산배분 전략에 따라 다음과 같이 구현하여 매월말 투자할 종목을 구해보았습니다.
전략 로직
1. 최근 6개월 수익률이 가장 높은 3개(Top3)에 투자
2. Top3 중 0이하인 ETF는 현금(BIL)로 대체
import pandas as pd
import numpy as np
import yfinance as yf # 야후 파이낸스 부르기
ticker = ["SHY", "IEF", "TLT", "TIP", "LQD", "HYG", "BWX", "EMB"]
# 데이터 불러오기
df = yf.download(ticker) # 야후 파이낸스에서 tickers에 해당하는 데이터 모두 불러오기
df = df["Adj Close"] # 불러온 데이터 중 Adj Close 데이터만
df.dropna(inplace=True) # 데이터가 없는 곳이 있는 행은 삭제
# 월말 데이터만 뽑기
rebal_data = pd.DataFrame() # 월말 데이터 저장할 곳
df["year"] = df.index.year # year정보 담긴 year 열 만들기
df["month"] = df.index.month # month 정보 담긴 month 열 만들기
df["day"] = df.index.day # day 정보 담긴 day 열 만들기
days_df = df.groupby(["year","month"])["day"].max() # year, month로 그룹해서 day들 중 최대값만 뽑음
for i in range(len(days_df)): # 위 과정을 통해 뽑힌 데이터 중 day 값이 25일 이상 되면 rebal_data에 저장
if days_df.iloc[i] >= 25:
day = "{}-{}-{}".format(days_df.index[i][0], days_df.index[i][1], days_df.iloc[i])
rebal_data = pd.concat([rebal_data,df[df.index==day]])
rebal_data.head()
for i in range(12, rebal_data.shape[0]):
date = rebal_data.index[i]
print(date)
m6 = rebal_data[ticker].iloc[i]/rebal_data[ticker].iloc[i-6] -1
top3 = m6.nlargest(3)
res = {}
for j in range(3):
if top3.iloc[j] <= 0:
name = "BIL"
else:
name = top3.index[j]
if name in res.keys():
res[name] += 100/3
else:
res[name] = 100/3
print(res)
print("="*50)
강환국님이 올려주신 채권 동적자산배분 투자 종목 (2022.02부터 추가 됨)
2월 - 채권 동적자산배분: SHY 100%
3월 - 채권 동적자산배분: SHY 66.7%, TIP 33.3%
4월 - 채권 동적자산배분: SHY 100%
5월 - 채권 동적자산배분: SHY 100%
6월 - 채권 동적자산배분: SHY 100%
7월 - 채권 동적자산배분: 현금 100%
8월 - 채권 동적자산배분: 현금 100%
10월 - 채권 동적자산배분: 현금 100%
11월 - 채권 동적자산배분: 현금 100%
12월 - 채권 동적자산배분: 현금 100%
SHY가 100%가 어떻게 나오는지 모르겠지만,
(로직상 SHY는 최대 33.3%일텐데....)
SHY가 BIL라고 생각하면 맞게 나온 것 같습니다.
SHY가 100% 나오는 이유 아시는 분이 있다면 알려주시면 감사하겠습니다!!
반응형
'자산배분' 카테고리의 다른 글
[자산분배] 변형(수정) 듀얼 모멘텀 (0) | 2022.12.08 |
---|---|
[자산배분] 채권 동적자산배분 (0) | 2022.12.08 |
[자산분배] 변형(수정) 듀얼 모멘텀 - 파이썬으로 직접 백테스팅하기-(1) (0) | 2022.12.05 |
[자산배분] BAA - 파이썬으로 직접 백테스팅 해보기 - (2) (8) | 2022.09.29 |
[자산배분] BAA - 파이썬으로 직접 백테스팅 해보기 - (1) (2) | 2022.09.05 |
Comments