Notice
Recent Posts
Recent Comments
Link
삶의 공유
[파이썬] Daily 수익률 표준 편차와 누적 수익률과의 관계 확인 본문
728x90
반응형
안녕하세요 ~~
요즘 제가 테스트 해보고 있는 전략은 이동 평균선을 이용하여 매수, 매도 전략입니다.
여러가지 방법이 있지만 저는 20일선, 30일선 조합과, 30일선 40일 선 조합 중에 괜찮은 조합을 선택하여 선정 중입니다.
백테스팅 하는 과정에서 알게된 것은 이 전략이 모든 종목에 통하지 않는 다는 것을 알게 되었습니다.
그럼 어떤 종목에 이 조합이 통할지 확인해보고자 Daily 수익률 표준 편차와 누적 수익률과의 관계를 확인 해보겠습니다.
먼저 필요한 라이브러리를 import 해줍니다.
import time
import pyupbit
import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
그리고 수익률을 구해주는 함수를 하나 만들어줍니다.
def confirm_returns(ticker):
# 데이터 준비
df = pyupbit.get_ohlcv(ticker, count=1000, interval="minute60")
# df = pyupbit.get_ohlcv("KRW-STEEM", count=10000)
data = df[['close','volume']].copy()
data["returns"] = np.log(data.close.div(data.close.shift(1))) # 수익률
data['creturns'] = data.returns.cumsum().apply(np.exp) # 누적 수익률
# 이동평균선 구하기 (시간 평균)
sma5 = data['close'].rolling(window=5).mean()
sma20 = data['close'].rolling(window=20).mean()
sma30 = data['close'].rolling(window=30).mean()
# 매수 매도 시그널
signal = []
buy_possible = False
buycnt = 0
sellcnt = 0
for i in range(len(data)):
if sma5[i] < sma20[i] and sma5[i] < sma30[i] and sma20[i] < sma30[i]:
buy_possible = True
if buy_possible and sma5[i] > sma30[i]: # 매수
signal.append(1)
buycnt = 1
buy_possible = False
elif buycnt == 1 and sma5[i] < sma30[i] and sellcnt == 0: # 매도 신호 2번 연속 일 경우를 위한 buffer
signal.append(1)
sellcnt = 1
elif buycnt == 1 and sma5[i] < sma30[i] and sellcnt == 1: # 매도
signal.append(0)
buycnt = 0
sellcnt = 0
elif buycnt == 1: # 조건이 충족이 안되었을 때
signal.append(1)
else:
signal.append(0)
data['position'] = signal
# 수익률 계산하기
data['strategy'] = data.position.shift(1) * data['returns']
data['cstrategy'] = data['strategy'].cumsum().apply(np.exp)
print('종목 : {0} / 표준편차 : {1} / 수익률 : {2}'.format(ticker, data.returns.std(), data[['strategy']].sum().apply(np.exp)))
현재 코드는 20시간, 30시간 기준으로 되어 있는데, 아래와 같이 window=20 이부분의 값을 변경하여 30,40으로 바꿔주시면 30시간, 40시간 기준으로 바꿔서 확인 하실 수 있습니다.
sma20 = data['close'].rolling(window=20).mean()
sma30 = data['close'].rolling(window=30).mean()
반응형
자 이제 준비는 끝났습니다. 이제 종목 정보를 불러와서 종목을 하나씩 함수에 넣어서 수익률을 확인해보겠습니다.
tickers = pyupbit.get_tickers(fiat='KRW')
for ticker in tickers:
confirm_returns(ticker)
저는 엑셀로 정리하긴 했지만, 아래와 같이 정리 할 수 있습니다. 이것을 시각화하여 표준 편차와 이동평균선 전략에 대한 관계를 확인해보겠습니다.
아래와 같이 그래프를 그릴 수 있습니다. 데이터를 통해 확인 한 것은 수익률이 높은쪽에 위치해 있는것은 보통 Daily 수익률 표준 편차가 0.02 이상일 때 누적 수익률도 높은 것을 볼 수 있었습니다.
지금까지 Daily 수익률 표준 편차와 누적 수익률과의 관계를 살펴보았습니다.
읽어주셔서 감사합니다.
반응형
'Data Scientist > Python' 카테고리의 다른 글
[Python] brute함수를 이용하여 자동 매매 이동평균선 전략 최적화 하기 (0) | 2022.06.07 |
---|---|
[파이썬] Customizing Plotly Chart (0) | 2022.05.23 |
[파이썬] pandas datareader 라이브러리를 이용한 데이터 로딩 및 시각화 (0) | 2022.05.16 |
[파이썬] 비트코인 자동매매 전략 Study(가격, 거래량 기반 전략)-백테스팅 (2) | 2022.04.25 |
[파이썬] 비트코인 자동매매 전략 Study(가격, 거래량 기반 전략)-전략수립 (0) | 2022.04.17 |