(파이썬) 바이낸스 비트코인 이동평균선 돌파 전략 백테스팅steemCreated with Sketch.

in kr-dev 커뮤니티last year (edited)

지난번 포스팅에 이어서 이동평균선 돌파 전략을 백테스트 해보자.
참고로 저는 주식 투자와 퀀트 투자에 있어서 왕초보이기 때문에 틀린 정보가 있을 수도 있습니다.


이동평균선 돌파 매매 전략

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(date_i) - 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

Sort:  

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 63900.40
ETH 3140.82
USDT 1.00
SBD 3.98