
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
안녕하세요, 2주차 숙제를 진행하던중에 상장일부터 이동평균선을 그리려고 상장일을 자동으로 가져오는 코드를 추가했습니다.
상장일이 불러와지지 않는데 어디가 잘못되었는지 모르겠습니다.
import requests
from bs4 import BeautifulSoup
import FinanceDataReader as fdr
import datetime
import pandas as pd
import matplotlib.pyplot as plt
# 에코프로비엠 종목코드: 247540
stock_code = '247540'
# 네이버 금융에서 상장일 가져오기
def get_listing_date(stock_code):
url = f'https://finance.naver.com/item/main.nhn?code={stock_code}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
date_elements = soup.select('div.date')
if len(date_elements) > 0:
listing_date = date_elements[0].text.strip().split()[0]
return datetime.datetime.strptime(listing_date, '%Y.%m.%d')
else:
return None # 상장일을 찾지 못한 경우 None 반환
# 상장일 설정
listing_date = get_listing_date(stock_code)
if listing_date:
# 현재 시간을 구합니다.
end_date = datetime.datetime.now()
# 상장일부터 현재까지의 주가 데이터 가져오기
stock_data = fdr.DataReader(stock_code, listing_date, end_date)
# 이동평균선 계산
stock_data['MA20'] = stock_data['Close'].rolling(window=20).mean()
stock_data['MA60'] = stock_data['Close'].rolling(window=60).mean()
# 골든크로스와 데드크로스 표시
stock_data['Signal'] = 0
stock_data['PrevSignal'] = 0
stock_data.loc[stock_data['MA20'] > stock_data['MA60'], 'Signal'] = 1 # 골든크로스
stock_data.loc[stock_data['MA20'] < stock_data['MA60'], 'Signal'] = -1 # 데드크로스
# 신호가 바뀌는 순간 표시
for i in range(1, len(stock_data)):
if stock_data['Signal'][i] != stock_data['Signal'][i - 1]:
stock_data['PrevSignal'][i] = stock_data['Signal'][i]
# 그래프 그리기
plt.figure(figsize=(12, 6))
plt.plot(stock_data.index, stock_data['Close'], label='Close')
plt.plot(stock_data.index, stock_data['MA20'], label='MA20')
plt.plot(stock_data.index, stock_data['MA60'], label='MA60')
# 골든크로스와 데드크로스 표시
plt.plot(stock_data[stock_data['PrevSignal'] == 1].index, stock_data['MA20'][stock_data['PrevSignal'] == 1], '^', markersize=10, color='g', label='Golden Cross')
plt.plot(stock_data[stock_data['PrevSignal'] == -1].index, stock_data['MA20'][stock_data['PrevSignal'] == -1], 'v', markersize=10, color='r', label='Death Cross')
plt.legend(loc='best')
plt.grid()
plt.show()
else:
print("상장일을 찾을 수 없습니다.")
보고

계신 화면 전체를 캡처해 주시면, 튜터님들이 빠르게 상황을 이해할 수 있어요.
