가상화폐 투자마법 공식 발췌 (전체코드는 아래 파일에 있습니다)
오버나잇(오전매도) 전략(00시 매수, 12시 매도)
2017년 1월 1일부터 12월 31일까지 비트코인에 투자했다면 1,457%이다. 그런데 만약, 오후에만 투자했다면 -36.8%이다.
반대로 자정에 사서 정오 점심시간이 시작되면 파는 전략, 즉 오전에만 비트코인을 보유하는 전략은 +3,228.4%라고 한다.
해당 전략을 구현해보았다.
#필요한 데이터를 불러온다
import pybithumb
import pandas as pd
import numpy as np
비트코인 데이터를 현재시점까지 가져온다. 데이터를 가져올때, 자정 12시, 오전 12시의 종가를 알아야 되므로, 시간별 가격정보를 가져오는 get_candlestick 함수를 사용한다.
price_df = pybithumb.get_candlestick("BTC", chart_intervals="12h")
자정에 사서 정오 점심시간이 시작되면 파는 전략이므로, 즉 2015년 4월 6일 00:00시에 사서, 2015년 4월 6일 12:00에 파는 전략이다
일단, 년도를 가져와보자.
years_list = sorted(list(set(price_df.index.year)))
years_list
12시간기준으로 데이터를 불러왔기 때문에 2015년부터 데이터가 있다.
[2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022]
수수료는 0.05%, 0.1%, 0.2%이다. 수수료로 돌아가면서 수익률을 구해봤다. 그리고, 여기서 주의해야 할 점이 00시에 사서 12시에 파는 것이므로, 12시일때 shifted_open은 00시의 시가이다. 그러므로, 12시의 시가에서 shifted_open를 나누면, 00시에 사서 12시에 파는 것과 동일하다. (파란박스)
하지만, 00시일때의 경우, ror이 1인데 여기서 위와 동일하게 적용하면 안된다. 왜냐하면, 00시의 open에서 shifted_open를 나누게 되면, 01월 01일날 12시에 사서 01월 02일날 00시에 파는것과 동일하게 되므로, 이건 오버나잇 매수가 아니다. (빨간박스)

그래서, 코드는 아래와 같다.
fee_list = [0, 0.0005, 0.001, 0.002]
total_cumror_list = []
total_year_list = []
for fee in fee_list:
cum_ror_list = []
year_list = []
print(fee)
for i in range(len(years_list)):
year_1 = years_list[i]
year_2 = year_1+1
df = price_df[(price_df.index >= str(year_1)) & (price_df.index < str(year_2))]
df['shifted_open'] = df['open'].shift(1)
ror_list = []
for j in range(len(df)):
if df.index[j].hour == 12:
ror_list.append(df.iloc[j]['open'] / df.iloc[j]['shifted_open'] - fee)
else:
ror_list.append(1)
df['ror'] = ror_list
df['cum_ror'] = df['ror'].cumprod()
cum_ror_list.append(df['cum_ror'].iloc[-1])
year_list.append((year_1, year_2))
print(f"{year_1} ~ {year_2} : {df['cum_ror'].iloc[-1]}")
total_cumror_list.append(cum_ror_list)
total_year_list.append(year_list)
결과값을 보면 17~18년 대략 2900%를 기록하엿다. 작년에도 약 100%를 기록하였다. 가상화폐 투자전략에서 나온 값과 거의 유사하다 .
result_df = pd.DataFrame({"0%" : total_cumror_list[0], "0.05%" : total_cumror_list[1], "0.1%" : total_cumror_list[2], '0.2%' : total_cumror_list[3]}, index = total_year_list[0])
result_df
오버나잇(오전매도) 전략 (02시 매수, 00시 매도)
이제 위의 전략과 반대로 해보자.
fee_list = [0, 0.0005, 0.001, 0.002]
total_cumror_list = []
total_year_list = []
for fee in fee_list:
cum_ror_list = []
year_list = []
print(fee)
for i in range(len(years_list)):
year_1 = years_list[i]
year_2 = year_1+1
df = price_df[(price_df.index >= str(year_1)) & (price_df.index < str(year_2))]
df['shifted_open'] = df['open'].shift(1)
ror_list = []
for j in range(len(df)):
if df.index[j].hour == 0:
ror_list.append(df.iloc[j]['open'] / df.iloc[j]['shifted_open'] - fee)
else:
ror_list.append(1)
df['ror'] = ror_list
df['cum_ror'] = df['ror'].cumprod()
cum_ror_list.append(df['cum_ror'].iloc[-1])
year_list.append((year_1, year_2))
print(f"{year_1} ~ {year_2} : {df['cum_ror'].iloc[-1]}")
total_cumror_list.append(cum_ror_list)
total_year_list.append(year_list)
이제 결과를 출력해보자.
result_df = pd.DataFrame({"0%" : total_cumror_list[0], "0.05%" : total_cumror_list[1], "0.1%" : total_cumror_list[2], '0.2%' : total_cumror_list[3]}, index = total_year_list[0])
result_df
책에서 소개한대로, 거의 수익이 없다.
결론 : 비트코인은 오버나잇 전략이 통한다! (작년까지는..올해는 수익이 좋진 않다)
P.S. 얼떨결에 2022년 데이터로 표본-외 샘플 테스팅을 했다. 결과는 뭐 좋지 않네. 표본-외 샘플에 대해 좀 더 알고 싶다면, 아래 사이트를 참조하자!
월스트리트 퀀트 투자의 법칙. 퀀트의 필수요소. 백테스팅
월스트리트의 퀀트 투자의 법칙 발췌 전통 펀드매니저와 퀀트매니저를 구분하는 한 가지 특징을 꼽으라면 단연 백테스팅이다. 백테스팅은 퀀트 전략이 과거에 어떤 성과를 냈는지 보는 과정
tenmillionquant.tistory.com
전체 코드 파일
'가상화폐 퀀트 전략' 카테고리의 다른 글
# 트레이딩 전략 5 : 슈퍼상승장 + 변동성 조절 (1) | 2022.04.04 |
---|---|
# 트레이딩 전략 4 : 이동평균 + 현금 비중 80% 이상 (0) | 2022.04.04 |
# 트레이딩 전략 3 : 가상화폐 분산투자 + 현금 비중 90% (0) | 2022.03.29 |
# 트레이딩 전략 1 : 저가매수, 고가매도 (buy low, sell high) (0) | 2022.03.15 |
API를 이용해 비트코인 시세 가져오기 - pybithumb (0) | 2022.03.14 |
댓글