728x90
반응형
볼린저 밴드를 사용하여 주식을 거래하는 백테스트를 파이썬을 이용하여 구현해보고자 한다.
백테스트 코드가 작동하게 하는데에도 한참 걸렸다.
import pandas as pd
import FinanceDataReader as fdr
import pandas_ta as ta
라이브러리는 3개를 사용했다.
가격정보를 불러오기 위해 FinanceDataReader를 사용하였고,
지표 계산을 위해서 pandas_ta를 사용하였다.
ticker = 'TQQQ'
df=fdr.DataReader(ticker,'2020')
df.ta.bbands(length=20, std=2.0, append=True)
df.dropna(inplace=True)
대상종목은 가장 만만한 TQQQ를 사용하였고,
2020년 이후 데이터를 사용하였다.
pandas_ta를 사용하여 볼린저밴드 지표를 계산하였다.
stock_cnt=0 # 보유주식수
own_day = 0 # 보유일수
total_asset=10000 # 총자산 (시드)
stock_own=False # 보유여부
시드는 10000불로 시작하고, 보유일수를 계산해서 전체 기간중 보유기간을 알아보고자 했다.
for i in range(len(df)):
if df.iloc[i-1]['BBP_20_2.0'] < 0 and df.iloc[i]['BBP_20_2.0'] > 0 and stock_own==False:
stock_cnt = total_asset // df.iloc[i]['BBL_20_2.0']
total_asset = total_asset - (df.iloc[i]['BBL_20_2.0'] * stock_cnt)
stock_own = True
print (i, df.iloc[i]['BBP_20_2.0'], stock_cnt, total_asset)
elif df.iloc[i-1]['BBP_20_2.0'] > 1 and df.iloc[i]['BBP_20_2.0'] < 1 and stock_own == True:
total_asset = total_asset + (df.iloc[i]['BBU_20_2.0'] * stock_cnt)
stock_cnt = 0
stock_own = False
print (i, df.iloc[i]['BBP_20_2.0'], stock_cnt, total_asset)
if stock_own == True:
own_day += 1
반복문을 만드는데에 어려움이 많았다. (자세한 내용은 별도의 포스팅으로 남기겠다.)
전일 %b가 0아래이고, 금일 0위로 상향돌파하는 날 매수하고, 전일이 1이상이고, 금일이 1 이하로 하향돌파하면 매도하는 간단한 로직이다.
총 거래일 894일 중에서 462일을 보유하고 있었고, 최종자산은 11822, 118% 수익률이었다.
21.98이 50.34로 단순보유 수익률 229%에 아주 많이 부족하다.
359일쯤에서는 27186까지 갔다가 8431까지 떨어진것을 보니 MDD가 상당하다.
다음 목표는 일자별 거래 내역을 기록하는 것이다.
728x90
반응형
'투자' 카테고리의 다른 글
2개의 데이터 프레임을 합치는 방법 (0) | 2024.01.06 |
---|---|
볼린저 밴드 하단에서 매수하고 일정비율에서 익절할때 (1) | 2024.01.06 |
볼린저밴드 하단에서 사고 상단에서 팔때 (1) | 2024.01.06 |
백테스트 시 거래기록 만들기 (1) | 2023.12.26 |
코인 볼린저밴드 매매 (1) (0) | 2023.12.01 |