[AI辅助生成代码]python获取股票数据,并发deepseek分析。【分析仅供参考】

查看 40|回复 7
作者:ypcgamelife   
利用python程序,获取股票数据并发给deepseek分析,将股票分析结果放word文件。
将股票代吗放mystock.txt文件中,一个股票代码一行。也可在程序界面中录入股票代码,点保存将股票存入mystock.txt中。
大家讲api-key替换成自己的申请的。ai分析结果仅供参考,后果自行负责。
[Python] 纯文本查看 复制代码import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
import akshare as ak
import pandas as pd
import datetime
import os
from docx import Document
from openai import OpenAI
import json
# 设置OpenAI API配置
client = OpenAI(
    base_url="https://api.deepseek.com/v1",
    api_key="sk-000000000000"
)
def load_stock_codes():
    if os.path.exists('mystock.txt'):
        with open('mystock.txt', 'r') as f:
            return f.read().strip().split('\n')
    return []
def save_stock_codes(codes):
    with open('mystock.txt', 'w') as f:
        f.write('\n'.join(codes))
def prepare_stock_data(df, code):
    # 获取股票名称
    stock_info = ak.stock_info_a_code_name()
    stock_name = stock_info[stock_info['code'] == code]['name'].iloc[0] if not stock_info[stock_info['code'] == code].empty else '未知'
   
    # 计算技术指标
    ma5 = df['收盘'].rolling(5).mean()
    ma10 = df['收盘'].rolling(10).mean()
    ma20 = df['收盘'].rolling(20).mean()
    ma60 = df['收盘'].rolling(60).mean()
   
    # 计算RSI
    delta = df['收盘'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
    loss = (-delta.where(delta  0:
                # 准备分析数据
                analysis_data = prepare_stock_data(df, code)
               
                # 构建提示词
                prompt = f"""请分析以下股票数据,给出详细的分析报告和投资建议:
{json.dumps(analysis_data, ensure_ascii=False, indent=2)}
请从以下几个方面进行分析:
1. 基本面分析
2. 技术面分析
3. 市场情绪分析
4. 风险提示
5. 投资建议
6. 预测下一个交易日涨幅
请用专业、客观的语言进行分析,并给出具体的操作建议。"""
               
                # 调用deepseek-chat模型
                response = client.chat.completions.create(
                    model="deepseek-chat",
                    messages=[
                        {"role": "system", "content": "你是一位专业的股票分析师,请对股票数据进行深入分析并提供投资建议。"},
                        {"role": "user", "content": prompt}
                    ],
                    temperature=0.7,
                    max_tokens=2000
                )
               
                # 获取分析结果
                analysis_result = response.choices[0].message.content
               
                # 添加到文档
                doc.add_heading(f'股票代码: {code} ({analysis_data["股票名称"]})', level=1)
                doc.add_paragraph(analysis_result)
               
        except Exception as e:
            doc.add_heading(f'股票代码: {code}', level=1)
            doc.add_paragraph(f'分析失败: {str(e)}')
   
    doc.save(f'stock_analysis_{today}.docx')
    messagebox.showinfo("分析完成", f"分析结果已保存到 stock_analysis_{today}.docx")
class StockAnalysisApp:
    def __init__(self, root):
        self.root = root
        self.root.title("股票分析程序")
        self.root.geometry("600x400")
        self.stock_codes = load_stock_codes()
        self.stock_text = scrolledtext.ScrolledText(root, height=10, width=50)
        self.stock_text.pack(pady=10)
        self.stock_text.insert(tk.END, '\n'.join(self.stock_codes))
        self.save_button = tk.Button(root, text="保存股票代码", command=self.save_codes)
        self.save_button.pack(pady=5)
        self.analyze_button = tk.Button(root, text="分析股票", command=self.analyze)
        self.analyze_button.pack(pady=5)
    def save_codes(self):
        codes = self.stock_text.get(1.0, tk.END).strip().split('\n')
        save_stock_codes(codes)
        messagebox.showinfo("保存成功", "股票代码已保存到mystock.txt")
    def analyze(self):
        codes = self.stock_text.get(1.0, tk.END).strip().split('\n')
        if not codes:
            messagebox.showerror("错误", "请先输入股票代码!")
            return
        analyze_stocks(codes)
if __name__ == "__main__":
    root = tk.Tk()
    app = StockAnalysisApp(root)
    root.mainloop()

股票, 股票代码

makejon   



PixPin_2025-05-17_15-37-30.jpg (118.24 KB, 下载次数: 0)
下载附件
2025-5-17 15:37 上传



PixPin_2025-05-17_15-37-44.jpg (96.62 KB, 下载次数: 0)
下载附件
2025-5-17 15:37 上传

[Asm] 纯文本查看 复制代码import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
import akshare as ak
import pandas as pd
import datetime
import os
from docx import Document
from openai import OpenAI
import json
# 设置OpenAI API配置
client = OpenAI(
    base_url="https://api.deepseek.com/v1",
    api_key="sk-00000000000"
)
def load_stock_codes():
    if os.path.exists('mystock.txt'):
        with open('mystock.txt', 'r') as f:
            return f.read().strip().split('\n')
    return []
def save_stock_codes(codes):
    with open('mystock.txt', 'w') as f:
        f.write('\n'.join(codes))
def load_analysis_history():
    if os.path.exists('analysis_history.csv'):
        return pd.read_csv('analysis_history.csv')
    return pd.DataFrame(columns=['股票代码', '股票名称', '分析日期'])
def save_analysis_history(data):
    df = pd.DataFrame(data)
    df.to_csv('analysis_history.csv', index=False)
def prepare_stock_data(df, code):
    # 获取股票名称
    stock_info = ak.stock_info_a_code_name()
    stock_name = stock_info[stock_info['code'] == code]['name'].iloc[0] if not stock_info[
        stock_info['code'] == code].empty else '未知'
    # 计算技术指标
    ma5 = df['收盘'].rolling(5).mean()
    ma10 = df['收盘'].rolling(10).mean()
    ma20 = df['收盘'].rolling(20).mean()
    ma60 = df['收盘'].rolling(60).mean()
    # 计算RSI
    delta = df['收盘'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
    loss = (-delta.where(delta  0:
                # 准备分析数据
                analysis_data = prepare_stock_data(df, code)
                stock_name = analysis_data["股票名称"]
                # 构建提示词
                prompt = f"""请分析以下股票数据,给出详细的分析报告和投资建议:
{json.dumps(analysis_data, ensure_ascii=False, indent=2)}
请从以下几个方面进行分析:
1. 基本面分析
2. 技术面分析
3. 市场情绪分析
4. 风险提示
5. 投资建议
6. 预测下一个交易日涨幅
请用专业、客观的语言进行分析,并给出具体的操作建议。"""
                # 调用deepseek-chat模型
                response = client.chat.completions.create(
                    model="deepseek-chat",
                    messages=[
                        {"role": "system",
                         "content": "你是一位专业的股票分析师,请对股票数据进行深入分析并提供投资建议。"},
                        {"role": "user", "content": prompt}
                    ],
                    temperature=0.7,
                    max_tokens=2000
                )
                # 获取分析结果
                analysis_result = response.choices[0].message.content
                # 保存为Word文档
                doc = Document()
                doc.add_heading(f'股票分析报告', 0)
                doc.add_heading(f'股票代码: {code} ({stock_name})', level=1)
                doc.add_paragraph(analysis_result)
                # 使用指定格式保存文件
                file_name = f"{code}_{stock_name}_{today_str}{time_str}.docx"
                doc.save(file_name)
                # 记录分析历史
                record = {
                    '股票代码': code,
                    '股票名称': stock_name,
                    '分析日期': today.strftime('%Y-%m-%d %H:%M:%S'),
                    '文件路径': file_name
                }
                new_records.append(record)
        except Exception as e:
            print(f"分析股票 {code} 时出错: {str(e)}")
    # 添加新记录到历史
    history = new_records + history  # 新记录在前
    # 保存历史记录
    save_analysis_history(history)
    # 更新历史表格
    if history_callback:
        history_callback(history)
    if new_records:
        messagebox.showinfo("分析完成", f"分析结果已保存为 {new_records[0]['文件路径']} 等文件")
    else:
        messagebox.showerror("分析失败", "未能成功分析任何股票")
class StockAnalysisApp:
    def __init__(self, root):
        self.root = root
        self.root.title("股票分析程序")
        self.root.geometry("800x600")
        # 加载历史记录
        self.history = load_analysis_history().to_dict('records')
        # 创建UI
        self.create_widgets()
        # 初始化历史表格
        self.update_history_table()
    def create_widgets(self):
        # 创建主框架
        main_frame = ttk.Frame(self.root, padding="10")
        main_frame.pack(fill=tk.BOTH, expand=True)
        # 股票代码输入区域
        ttk.Label(main_frame, text="分析股票代码:").grid(row=0, column=0, sticky=tk.W, pady=5)
        self.stock_text = scrolledtext.ScrolledText(main_frame, height=3, width=50)
        self.stock_text.grid(row=1, column=0, sticky=(tk.W, tk.E), pady=5)
        # 分析按钮
        self.analyze_button = ttk.Button(main_frame, text="分析股票", command=self.analyze)
        self.analyze_button.grid(row=1, column=1, padx=10, pady=5)
        # 历史记录表格
        ttk.Label(main_frame, text="分析历史记录:").grid(row=2, column=0, sticky=tk.W, pady=5)
        columns = ("股票代码", "股票名称", "分析日期")
        self.history_tree = ttk.Treeview(main_frame, columns=columns, show="headings", height=10)
        for col in columns:
            self.history_tree.heading(col, text=col)
            # 设置列宽
            width = 150 if col != "分析日期" else 200
            self.history_tree.column(col, width=width, anchor=tk.CENTER)
        self.history_tree.grid(row=3, column=0, columnspan=2, sticky=(tk.W, tk.E, tk.N, tk.S), pady=5)
        # 添加垂直滚动条
        scrollbar = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=self.history_tree.yview)
        self.history_tree.configure(yscroll=scrollbar.set)
        scrollbar.grid(row=3, column=2, sticky=(tk.N, tk.S))
        # 绑定点击事件
        self.history_tree.bind("", self.on_history_select)
        # 设置网格权重,使表格可以扩展
        main_frame.grid_columnconfigure(0, weight=1)
        main_frame.grid_rowconfigure(3, weight=1)
    def update_history_table(self):
        # 清空表格
        for item in self.history_tree.get_children():
            self.history_tree.delete(item)
        # 填充表格(按日期倒序)
        for record in self.history:
            self.history_tree.insert("", tk.END, values=(
                record['股票代码'],
                record['股票名称'],
                record['分析日期']
            ))
    def on_history_select(self, event):
        # 获取选中的项
        selected_item = self.history_tree.selection()
        if not selected_item:
            return
        # 获取股票代码
        item = self.history_tree.item(selected_item[0])
        stock_code = item['values'][0]  # 股票代码在第一列
        # 填充到文本框
        self.stock_text.delete(1.0, tk.END)
        self.stock_text.insert(tk.END, stock_code)
    def analyze(self):
        codes = self.stock_text.get(1.0, tk.END).strip().split('\n')
        codes = [code.strip() for code in codes if code.strip()]
        if not codes:
            messagebox.showerror("错误", "请先输入股票代码!")
            return
        # 分析股票并更新历史记录
        analyze_stocks(codes, self.update_history_table_callback)
    def update_history_table_callback(self, history):
        self.history = history
        self.update_history_table()
if __name__ == "__main__":
    root = tk.Tk()
    app = StockAnalysisApp(root)
    root.mainloop()
ypcgamelife
OP
  

分析结果如下:
股票代码: 601399 (国机重装)
### 国机重装(601399)深度分析报告
#### 1. 基本面分析
- **股价水平**:当前股价2.82元,处于绝对低价区间,显示市场对其估值较低。
- **流动性指标**:单日成交额1.32亿元,换手率0.65%,流动性偏弱,属于典型的小盘股特征。
- **行业属性**:作为重型装备制造企业,其业绩与基建投资周期强相关,需关注国家基建政策动向。
#### 2. 技术面分析(关键指标解读)
- **均线系统**:呈现空头排列(MA5
jtjt68 发表于 2025-5-6 16:07
谢谢楼主分享原创作品!请教一下如何用python来批量获取股票近十年的分红派息数据并保存到excel表格里

akshare包是获取股票数据的,你可以查询这个包的用法,或用ai帮你生成。
keep366   

巨大的黑盒啊!!
jtjt68   


ypcgamelife 发表于 2025-5-6 16:16
akshare包是获取股票数据的,你可以查询这个包的用法,或用ai帮你生成。

好吧,我琢磨一下,谢谢
ypcgamelife
OP
  

咋复制不了源码?
2513002960   

感觉很强大,可惜不会有
jtjt68   

看着玩还行,反正别买  哈哈
您需要登录后才可以回帖 登录 | 立即注册

返回顶部