IT/ChatGPT

[ChatGPT] ChatGPT를 활용하여 이동 평균선으로 주식 매매 타이밍 알아보기

Ma_Sand 2024. 3. 3. 20:48
반응형

ChatGPT를 활용하여 이동평균선으로 주식의 매매 타이밍을 알아보도록 하겠다.

 

우선 ChatGPT와 Google의 colab에 들어간다.

- ChatGPT: https://chat.openai.com/

- Google colab: https://colab.research.google.com/

 - 위 링크 들어가서 로그인 후 노트 열기에서 '+ 새 노트' 클릭하면 코드 입력 및 실행 가능한 모드로 진입한다.

 - ChatGPT에 이동 평균선 코드를 작성해달라는 명령을 내린 후 도출된 코드를 colab에서 실행할 것이다. colab에서는 파이썬으로 코드를 작성한다.

 - 이때, FinanceDataReader 라이브러리를 사용할 것이므로 colab에서 이를 설치해야 한다. 이는 다음 명령어를 입력한 후 좌측 상단의 재생버튼을 눌러 코드를 실행시키면 설치가 된다. (나는 이미 설치되어 있어서 Requirement already satisfied라고 뜬다.)

!pip install -U finance-datareader

  cf) FinanceDataReader란 한국 및 글로벌 시장의 가격 데이터(주식 및 지수, 환율 등), 상장 종목 등 금융 데이터를 수집 및 분석하는 데에 사용되는 파이썬 오픈소스 라이브러리이다.

 

라이브러리 설치까지 마쳤다면, 먼저 이동 평균선이 무엇인지 알아보자.

이동 평균선이란 일정 기간 동안의 주가를 산술 평균한 값인 주가이동평균을 차례로 연결해 만든 선이다. 이동 평균선에는 장기(120일), 중기(60일), 단기(5, 20일) 이동 평균선이 있는데, 주가의 장기적인 추세를 파악하는 데에 효과적이다.

 

 

나는 최근 1년간의 종가 데이터를 가져온 후 이를 토대로 20일(단기) 이동 평균선과 60일(중기) 이동 평균선을 차트로 그릴 것이다. 그리고 매매 타이밍을 알아보기 위해 *골든 크로스와 **데드 크로스도 차트에 나타내도록 ChatGPT에 명령을 내릴 것이다.

 *골든 크로스(Golden Cross): 주가나 거래량의 단기 이동 평균선이 중장기 이동 평균선을 아래에서 위로 돌파해 올라가는 현상을 말한다. 골든 크로스가 발생한다함은 주식 거래량이 많을수록 강세장으로의 전환 가능성이 높다는 의미한다.

 **데드 크로스(Dead Cross): 골든 크로스의 반대현상으로, 단기 이동 평균선이 장기 이동 평균선 아래로 떨어지는 현상을 말한다. 데드 크로스가 발생한다함은 대개 약세장으로 전환한다는 것을 의미한다.

 

 

1. 특정 주식의 최근 1년간 종가 데이터 가져오기

1) ChatGPT에 내린 명령

FinanceDataReader를 이용하여 파이썬으로 펩시의 최근 1년간 종가 데이터를 가져오는 코드를 작성해라.

 

2) ChatGPT에서 도출된 파이썬 코드

import FinanceDataReader as fdr
import datetime

# 현재 날짜를 구합니다.
end_date = datetime.datetime.now()

# 1년 전의 날짜를 구합니다.
start_date = end_date - datetime.timedelta(days=365)

# Pepsico 종목코드: 'PEP'
pepsi_data = fdr.DataReader('PEP', start=start_date, end=end_date)

# 종가 데이터 출력
print(pepsi_data['Close'])

 

3) 위 코드를 colab에 복붙한 후 실행

 

 

2. 앞선 1.의 데이터를 토대로 20일, 60일 이동 평균선 그리기

1) ChatGPT에 내린 명령

해당 데이터를 토대로 20일, 60일 이동 평균선을 그려주는 파이썬 코드를 작성해라.

 

2) ChatGPT에서 도출된 파이썬 코드

import FinanceDataReader as fdr
import datetime
import pandas as pd
import matplotlib.pyplot as plt

# 현재 날짜를 구합니다.
end_date = datetime.datetime.now()

# 1년 전의 날짜를 구합니다.
start_date = end_date - datetime.timedelta(days=365)

# Pepsico 종목코드: 'PEP'
pepsi_data = fdr.DataReader('PEP', start=start_date, end=end_date)

# 종가 데이터를 이용하여 20일 이동평균선을 계산합니다.
pepsi_data['MA20'] = pepsi_data['Close'].rolling(window=20).mean()

# 종가 데이터를 이용하여 60일 이동평균선을 계산합니다.
pepsi_data['MA60'] = pepsi_data['Close'].rolling(window=60).mean()

# 그래프 그리기
plt.figure(figsize=(12, 6))
plt.plot(pepsi_data.index, pepsi_data['Close'], label='Close')
plt.plot(pepsi_data.index, pepsi_data['MA20'], label='MA20')
plt.plot(pepsi_data.index, pepsi_data['MA60'], label='MA60')
plt.title('Pepsico 주식 가격과 이동평균선')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

 

3) 위 코드를 colab에 복붙한 후 실행

위 펩시코의 차트를 보면 골든 크로스는 4번, 데드 크로스는 3번 발생했다. 글 윗쪽에서 앞서 설명했었지만 다시 말하면, 골든 크로스는 20일 이동 평균선이 60일 이동 평균선보다 위로 올라가는 것을 말하고, 데드 크로스는 그 반대로 20일 이동 평균선이 60일 이동 평균선보다 밑으로 내려가는 것을 말한다. 그런데 나는 이를 차트에서 좀더 보기 쉽게 수정하고 싶다.

 

 

3. 골든 크로스와 데드 크로스를 파악하는 코드 추가하기

1) ChatGPT에 내린 명령

방금 데이터를 토대로 골든 크로스와 데드 크로스를 파악하는 코드를 추가해라.

 

2) ChatGPT에서 도출된 파이썬 코드

import FinanceDataReader as fdr
import datetime
import pandas as pd
import matplotlib.pyplot as plt

# 현재 날짜를 구합니다.
end_date = datetime.datetime.now()

# 1년 전의 날짜를 구합니다.
start_date = end_date - datetime.timedelta(days=365)

# Pepsico 종목코드: 'PEP'
pepsi_data = fdr.DataReader('PEP', start=start_date, end=end_date)

# 종가 데이터를 이용하여 20일 이동평균선을 계산합니다.
pepsi_data['MA20'] = pepsi_data['Close'].rolling(window=20).mean()

# 종가 데이터를 이용하여 60일 이동평균선을 계산합니다.
pepsi_data['MA60'] = pepsi_data['Close'].rolling(window=60).mean()

# 골든 크로스와 데드 크로스를 파악합니다.
golden_cross = pepsi_data['MA20'] > pepsi_data['MA60']
dead_cross = pepsi_data['MA20'] < pepsi_data['MA60']

# 그래프 그리기
plt.figure(figsize=(12, 6))
plt.plot(pepsi_data.index, pepsi_data['Close'], label='Close')
plt.plot(pepsi_data.index, pepsi_data['MA20'], label='MA20')
plt.plot(pepsi_data.index, pepsi_data['MA60'], label='MA60')

# 골든 크로스와 데드 크로스에 마커 표시
plt.scatter(pepsi_data.index[golden_cross], pepsi_data['MA20'][golden_cross], marker='^', color='g', label='Golden Cross')
plt.scatter(pepsi_data.index[dead_cross], pepsi_data['MA20'][dead_cross], marker='v', color='r', label='Dead Cross')

plt.title('Pepsico 주식 가격과 이동평균선')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

좀전 2.의 코드에서 아래 코드가 추가되었다.

# 골든 크로스와 데드 크로스에 마커 표시
plt.scatter(pepsi_data.index[golden_cross], pepsi_data['MA20'][golden_cross], marker='^', color='g', label='Golden Cross')
plt.scatter(pepsi_data.index[dead_cross], pepsi_data['MA20'][dead_cross], marker='v', color='r', label='Dead Cross')

 

3) 위 코드를 colab에 복붙한 후 실행

이제 골든 크로스와 데드 크로스가 한눈에 파악이 된다. 골든 크로스 발생 시 주가가 상승하고, 데드 크로스 발생 시엔 주가가 하락했다. 2024년 2월 기준으로 이동 평균선을 파악했을 때, 데드 크로스가 발생한 후 2월 말로 갈수록 20일 이동 평균선이 60일 이동 평균선보다 높아진다. 그러나 3월 지표를 보면 다시 60일 이동 평균선을 터치하려고 하는데, 곧 데드 크로스가 발생할 것으로 보인다.

일반적으로는 데드 크로스 발생 시 주가가 하락하므로 주식을 매도하는 것이 좋지만, 장기적으로 봤을 때 해당 종목이 우상향할 것이라는 생각을 갖고 있다면 주식 평균 단가를 낮출 수 있는 좋은 기회가 될 수도 있다.

 

반응형