# 20_볼린저밴드_01

import FinanceDataReader as fdr
df = fdr.DataReader('005380', '2015')
df

 

df = df.loc[:, ['Close']].copy()
df

 

 

df['center'] = df['Close'].rolling(window=20).mean()
df
df['up_band'] = df['center'] + 2*df['Close'].rolling(window=20).std()
df
df['low_band'] = df['center'] - 2*df['Close'].rolling(window=20).std()
df

 

 

df = df.dropna()
df

 

# 21_볼린저밴드_02 : 볼린저밴드 지표만들기

book = df[['Close']].copy()
book['trade'] = ''
book

 

 

for i in df.index:
    if df.loc[i, 'Close'] > df.loc[i, 'up_band']:
        book.loc[i, 'trade'] = ''
    elif df.loc[i, 'low_band'] > df.loc[i, 'Close']:
        book.loc[i, 'trade'] = 'buy'
    elif df.loc[i, 'up_band'] >= df.loc[i, 'center'] and df.loc[i, 'low_band'] <= df.loc[i,'Close']:
        if book.shift(1).loc[i, 'trade'] == 'buy':
            book.loc[i, 'trade'] = 'buy'
        else:
            book.loc[i, 'trade'] = ''
            
book

 

23_볼린저밴드_03 : 수익률평가

rtn = 1.0
buy = 0.0
sell = 0.0
book['rtn'] = 1

for i in book.index:
    if book.loc[i, 'trade'] == 'buy' and book.shift(1).loc[i, 'trade'] == '':
        buy = book.loc[i, 'Close']
        print('진입일 : ', i, '매수가격 : ', buy)
    elif book.loc[i, 'trade'] == '' and book.shift(1).loc[i, 'trade'] == 'buy':
        sell = book.loc[i, 'Close']
        rtn = (sell - buy) / buy + 1
        book.loc[i, 'rtn'] = rtn
        print('청산일 : ', i, '매수가격 : ', buy, ' 매도가격 : ', sell, '수익률 : ', round(rtn, 4))
    if book.loc[i, 'trade'] == '':
        buy = 0.0
        sell = 0.0
acc_rtn = 1.0
for i in book.index:
    rtn = book.loc[i, 'rtn']
    acc_rtn = acc_rtn * rtn
    book.loc[i, 'acc_rtn'] = acc_rtn
print('누적수익률 : ', round(acc_rtn, 4))

 

~~ 중략 ~~

 

'Python > 파이썬_자동매매' 카테고리의 다른 글

Solactive US Big Tech Top 7 Plus Price Return Index 차트만들기_파이썬  (0) 2025.04.12
샤프비율  (0) 2025.02.02
변동성  (0) 2025.02.02
MDD (Maximum Draw Down)  (0) 2025.02.02
CAGR (연평균수익률)  (0) 2025.02.02

+ Recent posts