파이썬으로 볼린저밴드를 그리고, 볼린저 하단보다 주가가 낮을때 매수하는 공략을 시그널로 표현한 결과물 입니다.
잘 아시겠지만 보조지표라는 것이 상승장에서는 뭘 갖다놔도 잘 어울립니다만, 하락장은 정말 어렵죠.
특히 올해 마주했던 하락장은 역대급인지라 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()
'주식공부 > 파이썬 주식' 카테고리의 다른 글
지수추종(추적) 종목 발굴하기(파이썬 상관분석) (2) | 2022.12.19 |
---|---|
stocahstic(스토캐스틱)과 RSI를 활용한 매수,매도 신호 그리기 (8) | 2022.12.15 |
파이썬으로 코스피와 환율관계를 그려보기(feat.human) (0) | 2022.12.13 |
파이썬으로 볼린저밴드를 만들어보기(feat. chatGPT) (2) | 2022.12.13 |
Type error : not enough arguments for format string 해결 방법 (0) | 2022.12.12 |