주식공부/파이썬 주식

볼린저밴드로 매수포인트 찾기

일찍자요 2022. 12. 14. 23:46
반응형

파이썬으로 볼린저밴드를 그리고, 볼린저 하단보다 주가가 낮을때 매수하는 공략을 시그널로 표현한 결과물 입니다.

잘 아시겠지만 보조지표라는 것이 상승장에서는 뭘 갖다놔도 잘 어울립니다만, 하락장은 정말 어렵죠.

특히 올해 마주했던 하락장은 역대급인지라 Buy signal이 붙어도 승산이 좋지 못하죠?

그래도 분할대응하면 단기 반등 수익은 낼 수 있기도 하네요.

나쁘진 않은거 같습니다.

 

간단하게 그려보기 위해 FinaceDataReader를 활용하였고, 삼성전자 기준으로 2020년부터 2022년(작성기준, 금일)기준으로 불러왔습니다.

 

GPT 모델로 여러번 시도끝에 나오게 되었고,

signal 표시는 scatter로 나타내는걸 알 수 있었네요.

 

명령은 아래와 같이 주었습니다.

Make the python code for plotting buy signal on the chart. Use SAMSUNG stock datas for 5years. Use FinanceDataReader.

1) buy signal = 'close' price is lower than bollinger lower band.

 

코딩결과물은 항상 다르게 나오고, 어떨땐 오류가 뜨는경우도 있습니다. 꽤 많네요 아직은.

그래서 사람이 결국 좀 수정을 해주거나, 아니면 새로 명령을 수행해야하고,

무엇보다 명령을 줄 때 디테일하고 명확하게 줄 수록 코딩에 잘 반영되는 것 같습니다.

당연한 소리겠죠.;

 

아무튼 그렇게 몇차례 시행하여 나온 전체 코딩은 아래와 같습니다.

볼린저밴드를 나타내보고 싶었던 분 계신다면 참고하시면 되겠습니다.

#import required modules
import pandas as pd
from FinanceDataReader import DataReader
import matplotlib.pyplot as plt

#fetch the data for the required stock
SAMSUNG = DataReader('005930', '2020-01-01', '2022-12-14')

#calculate the bollinger bands
SAMSUNG['MA20'] = SAMSUNG['Close'].rolling(window=20).mean()
SAMSUNG['STD20'] = SAMSUNG['Close'].rolling(window=20).std()
SAMSUNG['Upper'] = SAMSUNG['MA20'] + 2*SAMSUNG['STD20']
SAMSUNG['Lower'] = SAMSUNG['MA20'] - 2*SAMSUNG['STD20']

#plot the chart
plt.figure(figsize=(20, 10))
plt.plot(SAMSUNG.index, SAMSUNG['Close'], label='close')
plt.plot(SAMSUNG.index, SAMSUNG['MA20'], label='MA20')
# plt.plot(SAMSUNG.index, SAMSUNG['Upper'], label='Upper')
plt.plot(SAMSUNG.index, SAMSUNG['Lower'], label='Lower',color='grey')

#plot buy signals
buy_signals = SAMSUNG[SAMSUNG['Close'] < SAMSUNG['Lower']]
plt.scatter(buy_signals.index, buy_signals['Close'], label='Buy', color='red', marker='^', alpha=1)
plt.title('SAMSUNG stock chart (2015-2020)')
plt.legend(loc='best')
plt.show()

 

반응형