반응형
지난번 포스팅에 이어서 이동평균선 돌파 전략을 백테스트 해보자.
참고로 저는 주식 투자와 퀀트 투자에 있어서 왕초보이기 때문에 틀린 정보가 있을 수도 있습니다.
이동평균선 돌파 매매 전략
20일 이동평균선을 기준으로 현재 가격이 이동평균선을 돌파하는 시점에 매수하고 20일을 보유하다가 매도하는 전략을 사용한다.
저번과 마찬가지로 바이낸스에서 비트코인 일봉 데이터를 가져온다.
from binance import Client
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams['font.family'] = 'AppleGothic'
# 바이낸스 일봉 데이터
client = Client()
candles = np.array(client.get_klines(symbol='BTCUSDT', interval=Client.KLINE_INTERVAL_1DAY))
# DataFrame
df = pd.DataFrame(candles[:,(0,4)].astype(np.float64), columns = ("Time", "Price"))
df['Time'] = pd.to_datetime(df['Time'], unit='ms')
df.set_index('Time', inplace=True)
print(df)
20일 이동평균선 계산하기
그다음 20일 이동평균선을 계산한다.
df['ma20'] = df.Price.rolling(20).mean()
df
백테스팅 하기
일봉 데이터를 루프 돌면서 매수 시점과 매도 시점을 체크한다. 그리고 분석에 필요한 데이터를 list에 담는다.
days = 20
buy_signals = [] # 매수 시점
buy_prices = [] # 매수 가격
sell_signals = [] # 매도 시점
sell_prices = [] # 매도 가격
return_list = [] # 수익률
for i in np.arange(len(df)):
if i < 1 or i > len(df) - days: continue
yesterday = df.iloc[i-1]
today = df.iloc[i]
if today.Price > today.ma20 and yesterday.Price < yesterday.ma20:
sell_price = df.iloc[i+days].Price
returns = (sell_price / today.Price) * 100 - 100
print(f"{df.index[i]:%Y-%m-%d} | 매수 가격 {today.Price:.0f} | 매도 가격 {sell_price:.0f} | 수익률 {returns:.3f} %")
buy_signals.append(df.index[i])
buy_prices.append(today.Price)
sell_signals.append(df.index[i+days])
sell_prices.append(sell_price)
return_list.append(returns)
이동평균선 돌파 시뮬레이션 그래프 그려보기
종가와 20일 이동평균선은 line 차트를 이용하여 그린다. 그리고 매수 시점과 매도 시점은 scatter 차트를 사용하여 표시한다. 빨간 마커가 매수 시점이고 파란 마커가 매도 시점이다.
df.Price.plot(figsize=(15, 7), label='Price')
df.ma20.plot(label='MA20')
plt.scatter(x=buy_signals, y=buy_prices, marker=10, color='red', s=100, label='buy')
plt.scatter(x=sell_signals, y=sell_prices, marker=11, color='blue', s=100, label='sell')
plt.title(f"바이낸스 비트코인 이동평균선 돌파 전략")
plt.legend()
plt.show()
평균 수익률을 계산하면 -6.10%가 나온다. 내 생각에 2022년부터 2023년은 하락장이었기 때문에 수익을 내지 못한 것 같다.
바이낸스에서 2020년 ~ 2023년 데이터를 가져와서 다시 테스트 해보았다.
이 시기에도 큰 수익은 내지 못하였다. 내 생각으로 이 전략으로는 수익 내기 어려울 것 같다.
Links
반응형
'개발 > 파이썬 자동매매' 카테고리의 다른 글
(파이썬 자동매매) 볼린저 밴드 상승 돌파 전략 테스트하기 (0) | 2023.02.14 |
---|---|
(파이썬 자동매매) 볼린저 밴드(Bollinger Bands) (0) | 2023.02.10 |
(파이썬) 바이낸스 비트코인 이동평균선 그리기 (0) | 2023.02.07 |
[비트코인 자동매매] 상승장 알리미 스케쥴러 적용하기 (1) | 2023.01.12 |
[비트코인 자동매매] 상승장 알리미 슬랙으로 발송하기 (0) | 2023.01.12 |