股票研报功能的前后端
前端
前端需要用户键盘输入一个股票代码,在前端进行格式判断,如果输入不是一个正确的股票代码,就显示没有这种次股票代码,如果代码正确,就可以转给后端,进行研报的生成。
研报以一个pdf的形式传到前端,在页面对这个pdf进行预览并且提供下载功能。
后端
后端根据传进来的股票代码进行相关的图表以及文字解释的生成。
以下是几个关键函数:
### get_stock_performance(self)
该函数获取并比较指定股票与标准普尔500指数(S&P 500)的表现,并生成图表保存为PNG文件。获得默认时间一年内的股票的历史收盘价数据,获取目标股票和标准普尔500指数的收盘价数据,并且计算股票和指数的变化率,以百分比形式表示,绘制成一个图,并保存为.png文件。
```
def get_stock_performance(self):
"""
获取并比较股票与标准普尔500指数(S&P 500)的表现,生成图表并保存为PNG文件。
Returns:
str: 图表文件的存储路径。
"""
def fetch_stock_data(ticker, period="1y"):
stock = yf.Ticker(ticker)
hist = stock.history(period=period)
return hist['Close']
target_close = fetch_stock_data(self.ticker_symbol)
sp500_close = fetch_stock_data("^GSPC")
# 计算变化率
company_change = (target_close - target_close.iloc[0]) / target_close.iloc[0] * 100
sp500_change = (sp500_close - sp500_close.iloc[0]) / sp500_close.iloc[0] * 100
# 计算额外的日期点
start_date = company_change.index.min()
four_months = start_date + DateOffset(months=4)
eight_months = start_date + DateOffset(months=8)
end_date = company_change.index.max()
# 准备绘图
plt.rcParams.update({'font.size': 20}) # 调整为更大的字体大小
plt.figure(figsize=(14, 7))
plt.plot(company_change.index, company_change, label=f'{self.info["shortName"]} Change %', color='blue')
plt.plot(sp500_change.index, sp500_change, label='S&P 500 Change %', color='red')
# 设置标题和标签
plt.title(f'{self.info["shortName"]} vs S&P 500 - Change % Over the Past Year')
plt.xlabel('Date')
plt.ylabel('Change %')
# 设置x轴刻度标签
plt.xticks([start_date, four_months, eight_months, end_date],
[start_date.strftime('%Y-%m'),
four_months.strftime('%Y-%m'),
eight_months.strftime('%Y-%m'),
end_date.strftime('%Y-%m')])
plt.legend()
plt.grid(True)
plt.tight_layout()
# plt.show()
plot_path = f"{self.project_dir}/stock_performance.png"
plt.savefig(plot_path)
plt.close()
return plot_path
```
### get_pe_eps_performance(self)
该函数计算并绘制指定股票的市盈率(PE)和每股收益(EPS),并保存图表为PNG文件。获取公司的损益表,提取稀释后的每股收益数据,并获取历史数据。将EPS的日期转换为UTC,并找到收盘价,用收盘价和EPS计算市盈率。并绘制图,保存为.PNG文件
### get_sec_report_address(self)
获取该公司的10K报告。
### get_key_data
此函数提取并返回股票的关键财务数据,包括最新收盘价、过去6个月的平均日交易量、市值、52周价格范围和每股账面价值(BVPS)。
### get_income_stmt
获取公司的最新损益表,
### get_cash_flow
获取公司的现金流量表
### get_earnings
根据指定的季度和年份获取公司的财报收益数据,从10-K报告中获取数据然后构建一个RAG查询链,用于回答问题。
### analyze_income_stmt,analyze_cash_flow,financial_summarization
分析和解释损益表、资产负债表和现金流量表,产生文字描述,以及产生一个全面的财务总结。
##
使用 UMAP 和高斯混合模型对文本嵌入进行聚类和降维。输入一个个文本列表,这些文本可以是任何需要处理的文本文档。通过将文本转换成嵌入向量、用UMAP将嵌入向量降维、用GMM对降维后的嵌入向量进行聚类,然后在每个全局聚类中进一步使用UMAP和GMM进行局部降维和聚类,然后对每个聚类的本文进行格式化并生成总结,递归进行上述过程。
后续可能会将不同图表生成功能分开,使用户可以既可以获得一整个pdf形式的分析研报,也可以只获得其中一部分。