diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3546f3b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,55 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +venv/ +env/ +ENV/ +*.egg-info/ +dist/ +build/ + +# 虚拟环境 +venv/ +.venv/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# 数据库文件(如果需要持久化,应该使用volumes) +*.db + +# 环境变量文件(应该在运行时挂载) +.env + +# Git +.git/ +.gitignore + +# 日志文件 +*.log + +# 操作系统 +.DS_Store +Thumbs.db + +# 压缩文件 +*.rar +*.zip +*.tar.gz + +# 文档和说明(这些会被COPY进去,这里只是示例) +# README.md +# *.md + +# 缓存 +.pytest_cache/ +.coverage +htmlcov/ + diff --git a/.env.example b/.env.example index 11b1ca7..77b2175 100644 --- a/.env.example +++ b/.env.example @@ -1,18 +1,20 @@ -# DeepSeek API配置 -DEEPSEEK_API_KEY=sk-your_actual_api_key_here +# DeepSeek API配置(必需) +DEEPSEEK_API_KEY=your_actual_deepseek_api_key_here DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 -# Tushare配置(可选) -TUSHARE_TOKEN=your_tushare_token_here - -# 使用方法: -# 1. 将此文件复制为 .env -# 2. 在 .env 文件中填写真实的API密钥 -# 3. 确保 .env 文件不被提交到版本控制系统 -# 邮件通知配置 -EMAIL_ENABLED=true -SMTP_SERVER=smtp.qq.com # 或 smtp.163.com, smtp.gmail.com 等 +# 邮件通知配置(可选) +EMAIL_ENABLED=false +SMTP_SERVER=smtp.qq.com SMTP_PORT=587 EMAIL_FROM=your_email@qq.com -EMAIL_PASSWORD=your_app_password # 注意:不是邮箱登录密码,是应用专用密码 -EMAIL_TO=receiver@example.com \ No newline at end of file +EMAIL_PASSWORD=your_authorization_code +EMAIL_TO=receiver@example.com + +# MiniQMT量化交易配置(可选) +MINIQMT_ENABLED=false +MINIQMT_ACCOUNT_ID=your_account_id +MINIQMT_HOST=127.0.0.1 +MINIQMT_PORT=58610 + +# 时区设置 +TZ=Asia/Shanghai diff --git a/.gitignore b/.gitignore index 8e68370..536b63d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -/agentsstock1.rar -/agentsstock2.rar +/*.rar /test_akshare.py /test_fixed.py /test_pdf_export.py diff --git a/ARBR功能快速开始.md b/ARBR功能快速开始.md deleted file mode 100644 index 52fa2db..0000000 --- a/ARBR功能快速开始.md +++ /dev/null @@ -1,202 +0,0 @@ -# ARBR市场情绪功能 - 快速开始 🚀 - -## 🎯 功能简介 - -系统现已集成ARBR等市场情绪指标,为市场情绪分析提供实际数据支撑! - -**ARBR指标:** -- **AR(人气指标)**:反映市场买卖人气 -- **BR(意愿指标)**:反映买卖意愿强度 - -**其他情绪数据:** -- 换手率、涨跌停统计、大盘情绪、融资融券、恐慌贪婪指数 - -## 🚀 3步快速开始 - -### 步骤1:启动应用 - -```bash -# 进入项目目录 -cd d:\web\agentsstock1 - -# 激活虚拟环境 -.\venv\Scripts\Activate.ps1 - -# 启动应用 -streamlit run app.py -``` - -### 步骤2:输入股票代码 - -在应用界面中: -1. 输入A股代码(如:`000001`) -2. 点击"🚀 开始分析" - -### 步骤3:查看分析结果 - -系统会自动: -1. ✅ 获取市场情绪数据(ARBR等) -2. ✅ 传递给市场情绪分析师 -3. ✅ 生成有数据支撑的专业分析 - -## 📊 ARBR指标说明 - -### AR指标(人气指标) - -| AR值范围 | 市场状态 | 操作建议 | -|---------|---------|---------| -| > 180 | 极度超买 | ⚠️ 警惕回调 | -| 150-180 | 超买 | 🔴 考虑减仓 | -| 70-150 | 正常 | ✅ 正常持有 | -| 40-70 | 超卖 | 🟡 关注机会 | -| < 40 | 极度超卖 | 🟢 可能机会 | - -### BR指标(意愿指标) - -| BR值范围 | 市场状态 | 操作建议 | -|---------|---------|---------| -| > 400 | 极度超买 | ⚠️ 泡沫风险 | -| 300-400 | 超买 | 🔴 谨慎追高 | -| 50-300 | 正常 | ✅ 正常交易 | -| 30-50 | 超卖 | 🟡 低迷企稳 | -| < 30 | 极度超卖 | 🟢 冰点触底 | - -## 💡 使用技巧 - -### 技巧1:结合使用AR和BR - -``` -AR > 100 且 BR > 100 → 多头力量强(警惕过热) -AR < 100 且 BR < 100 → 空头力量强(市场偏空) -AR > BR → 人气好于意愿(基础稳定) -BR > AR → 意愿强于人气(投机性强) -``` - -### 技巧2:关注极端值 - -``` -AR < 70 且 BR < 50 → 强烈买入信号(超卖) -AR > 150 且 BR > 300 → 强烈卖出信号(超买) -``` - -### 技巧3:参考历史统计 - -查看"ARBR统计数据"中的: -- 历史均值:判断当前位置 -- 买入/卖出信号比例:了解历史模式 - -## 📝 输出示例 - -``` -【ARBR市场情绪指标】 -- 计算周期:26日 -- AR值:59.62(人气指标) -- BR值:49.28(意愿指标) -- 信号:强烈买入信号 ✅ -- 解读: - * AR超卖(<70),市场情绪低迷,可关注反弹机会 - * BR超卖(<50),投机情绪低迷,关注企稳信号 - -【市场情绪分析师专业分析】 -基于以上ARBR数据,市场情绪分析师会进行深度分析... -``` - -## 🔍 测试市场情绪模块 - -想单独测试ARBR计算?运行: - -```bash -python market_sentiment_data.py -``` - -输出示例: -``` -测试市场情绪数据获取... -正在获取 000001 的市场情绪数据... -📊 正在计算ARBR情绪指标... -📊 正在获取换手率数据... -✅ 市场情绪数据获取完成 - -【ARBR市场情绪指标】 -- AR值:59.62 -- BR值:49.28 -- 信号:强烈买入信号 -... -``` - -## ⚙️ 自定义设置 - -### 修改ARBR计算周期 - -编辑 `market_sentiment_data.py`: - -```python -class MarketSentimentDataFetcher: - def __init__(self): - self.arbr_period = 26 # 改为你想要的周期,如:20 -``` - -常用周期: -- 短期:14-20天 -- 中期:26天(默认) -- 长期:50-60天 - -## 📚 完整文档 - -更多详细信息,请查看: - -- 📖 **市场情绪分析使用说明.md** - 完整功能说明 -- 📋 **市场情绪模块更新日志.md** - 技术细节 -- ✅ **ARBR市场情绪集成完成说明.md** - 完成总结 - -## ❓ 常见问题 - -### Q: 为什么有些数据显示N/A? -A: 可能是网络问题或数据源限制,系统会自动处理,不影响整体分析。 - -### Q: 美股支持ARBR吗? -A: 目前仅支持A股(6位代码),美股支持正在计划中。 - -### Q: ARBR信号可以直接作为买卖依据吗? -A: ❌ 不可以!ARBR仅供参考,应结合其他指标和基本面综合判断。 - -### Q: 数据更新频率如何? -A: 大部分为实时数据,部分(如融资融券)为T+1数据。 - -## ⚠️ 重要提示 - -``` -⚠️ 投资有风险,决策需谨慎 -⚠️ ARBR等指标仅供参考,不构成投资建议 -⚠️ 极端情绪往往是反转信号 -⚠️ 请结合多方面因素综合判断 -``` - -## 🎯 快速命令清单 - -```bash -# 启动应用 -streamlit run app.py - -# 测试市场情绪模块 -python market_sentiment_data.py - -# 检查语法错误 -python -m py_compile market_sentiment_data.py - -# 查看应用运行状态 -# 浏览器访问:http://localhost:8501 -``` - -## 📞 需要帮助? - -查看详细文档或检查错误日志了解更多信息。 - ---- - -**版本:** v1.0 -**更新:** 2025年10月7日 -**状态:** ✅ 功能完整,测试通过 - -Happy Trading! 📈🎯 - diff --git a/ARBR市场情绪集成完成说明.md b/ARBR市场情绪集成完成说明.md deleted file mode 100644 index f3f49ea..0000000 --- a/ARBR市场情绪集成完成说明.md +++ /dev/null @@ -1,242 +0,0 @@ -# ARBR市场情绪数据集成完成 ✅ - -## 📋 任务概述 - -根据您的需求,已成功使用akshare获取市场情绪相关数据(包括ARBR指标),并将这些数据提供给市场情绪分析师进行分析,使情绪分析有实际数据支撑。 - -## ✨ 已完成的工作 - -### 1. 创建市场情绪数据模块 ✅ - -**文件:** `market_sentiment_data.py` - -**功能包括:** -- ✅ **ARBR指标计算** - - AR值(人气指标):反映市场买卖人气 - - BR值(意愿指标):反映买卖意愿强度 - - 自动判断超买超卖(AR>150超买,<70超卖;BR>300超买,<50超卖) - - 生成交易信号(买入/卖出/中性) - - 提供历史统计数据 - -- ✅ **换手率数据**:反映交易活跃程度 - -- ✅ **大盘情绪指数** - - 上证指数涨跌幅 - - 市场涨跌家数统计 - - 市场情绪得分 - -- ✅ **涨跌停统计** - - 当日涨停股数量 - - 当日跌停股数量 - - 市场热度评估 - -- ✅ **融资融券数据**:反映看多看空情绪 - -- ✅ **市场恐慌贪婪指数**:综合多指标的情绪评分(0-100) - -### 2. 增强市场情绪分析师 ✅ - -**修改文件:** `ai_agents.py` - -**更新内容:** -- ✅ `market_sentiment_agent` 现在接收实际的市场情绪数据 -- ✅ 基于ARBR等真实指标进行深度分析 -- ✅ 新增分析维度: - - ARBR情绪指标详细解读 - - 个股活跃度分析(换手率) - - 整体市场情绪评估 - - 资金情绪判断 - - 情绪对股价的影响分析 - -### 3. 集成到主应用 ✅ - -**修改文件:** `app.py` - -**更新内容:** -- ✅ 在分析流程中新增"市场情绪数据获取"步骤 -- ✅ 自动为A股获取市场情绪数据 -- ✅ 将数据传递给市场情绪分析师 -- ✅ UI提示优化(显示数据获取状态) -- ✅ 更新帮助信息 - -### 4. 创建使用文档 ✅ - -- ✅ `市场情绪分析使用说明.md` - 详细使用指南 -- ✅ `市场情绪模块更新日志.md` - 技术更新说明 -- ✅ 本文档 - 完成总结 - -## 📊 实际效果演示 - -### ARBR指标示例 - -``` -【ARBR市场情绪指标】 -- 计算周期:26日 -- AR值:59.62(人气指标) -- BR值:49.28(意愿指标) -- 信号:强烈买入信号 -- 解读: - * AR超卖(<70),市场情绪低迷,可关注反弹机会 - * BR超卖(<50),投机情绪低迷,关注企稳信号 - * 空头力量占优(AR<100且BR<100),市场情绪偏空 - * 人气指标强于意愿指标(AR>BR),市场基础较好 - -ARBR统计数据: -- AR历史均值:128.64 -- BR历史均值:124.00 -- 历史买入信号比例:8.0% -- 历史卖出信号比例:45.3% -``` - -### 市场情绪分析师输出 - -现在市场情绪分析师会基于以上真实数据进行分析,包括: - -1. **ARBR指标解读** - - 当前AR、BR值的含义 - - 与历史均值对比 - - 超买超卖判断 - - 交易信号建议 - -2. **个股活跃度** - - 换手率分析 - - 资金关注度 - -3. **整体市场情绪** - - 大盘走势影响 - - 涨跌家数分布 - - 涨跌停统计 - -4. **资金情绪** - - 融资融券数据 - - 看多看空力量对比 - -5. **投资建议** - - 基于情绪的操作建议 - - 风险提示 - -## 🚀 如何使用 - -### 方式1:在主应用中自动使用 - -1. 启动应用:`streamlit run app.py` -2. 输入A股代码(如:000001) -3. 点击"开始分析" -4. 系统会自动: - - 获取市场情绪数据(包括ARBR) - - 传递给市场情绪分析师 - - 生成基于实际数据的专业分析 - -### 方式2:单独测试市场情绪模块 - -```bash -# 激活虚拟环境 -.\venv\Scripts\Activate.ps1 - -# 运行测试 -python market_sentiment_data.py -``` - -### 方式3:在代码中使用 - -```python -from market_sentiment_data import MarketSentimentDataFetcher - -# 创建获取器 -fetcher = MarketSentimentDataFetcher() - -# 获取市场情绪数据 -sentiment_data = fetcher.get_market_sentiment_data("000001") - -# 查看ARBR数据 -if sentiment_data.get("data_success"): - arbr = sentiment_data["arbr_data"] - print(f"AR: {arbr['latest_ar']:.2f}") - print(f"BR: {arbr['latest_br']:.2f}") - print(f"信号: {arbr['signals']['overall_signal']}") -``` - -## 📈 分析流程对比 - -### 之前: -``` -市场情绪分析师 → 仅基于股票基本信息 → 泛泛的情绪分析 -``` - -### 现在: -``` -获取ARBR等市场情绪数据 - ↓ -【实际数据】 -- AR: 59.62 (超卖) -- BR: 49.28 (超卖) -- 换手率: 0.43% (清淡) -- 涨停: 52只, 跌停: 1只 -- 市场情绪: 火热 - ↓ -市场情绪分析师深度分析 - ↓ -有数据支撑的专业分析报告 -``` - -## 🎯 核心改进 - -1. **数据驱动**:从"猜测"变为"数据分析" -2. **指标丰富**:ARBR + 换手率 + 涨跌停 + 融资融券等 -3. **信号明确**:自动生成买入/卖出/中性信号 -4. **历史对比**:提供历史统计数据作为参考 -5. **综合评估**:多维度市场情绪综合判断 - -## 📁 修改的文件列表 - -### 新增文件 -- `market_sentiment_data.py` - 市场情绪数据模块(核心) -- `市场情绪分析使用说明.md` - 使用文档 -- `市场情绪模块更新日志.md` - 更新日志 -- `ARBR市场情绪集成完成说明.md` - 本文档 - -### 修改的文件 -- `ai_agents.py` - 增强市场情绪分析师 -- `app.py` - 集成市场情绪数据获取流程 - -## ⚠️ 注意事项 - -1. **仅支持A股**:当前市场情绪数据功能仅支持中国A股(6位代码) -2. **网络依赖**:需要稳定网络连接访问akshare数据源 -3. **数据时效**:部分数据可能有延迟(如融资融券为T+1数据) -4. **投资建议**:市场情绪指标仅供参考,不构成投资建议 - -## ✅ 测试验证 - -已通过测试: -- ✅ ARBR指标计算准确 -- ✅ 换手率数据正常 -- ✅ 大盘情绪获取正常 -- ✅ 涨跌停统计正常 -- ✅ 市场恐慌指数计算正常 -- ✅ 集成到AI分析流程正常 -- ✅ 数据格式化正常 - -## 📚 相关文档 - -详细文档请查看: -- `市场情绪分析使用说明.md` - 完整功能说明和使用指南 -- `市场情绪模块更新日志.md` - 技术细节和更新记录 - -## 🎉 总结 - -✅ **任务完成**!现在系统已经能够: - -1. 使用akshare获取包括ARBR在内的多项市场情绪数据 -2. 自动计算和解读ARBR指标 -3. 获取换手率、涨跌停、大盘情绪等补充数据 -4. 将这些实际数据提供给市场情绪分析师 -5. 生成有数据支撑的专业情绪分析报告 - -市场情绪分析现在有了实际数据支撑,分析结果将更加准确和专业!🎯 - ---- - -**完成日期:** 2025年10月7日 -**功能状态:** ✅ 已完成并测试通过 - diff --git a/BUGFIX.md b/BUGFIX.md deleted file mode 100644 index 6067d4d..0000000 --- a/BUGFIX.md +++ /dev/null @@ -1,105 +0,0 @@ -# 🐛 Bug修复记录 - -## 2025-10-03 - 修复OpenAI库版本兼容性问题 - -### 问题描述 -部署到服务器时出现错误: -``` -Client.init() got an unexpected keyword argument 'proxies' -``` - -### 问题原因 -- `openai==1.3.0`版本过旧 -- 新版本OpenAI库API有变化,不再支持`proxies`参数 -- 需要升级到1.12.0或更高版本 - -### 解决方案 -更新`requirements.txt`中的依赖版本: - -```txt -# 修复前 -openai==1.3.0 - -# 修复后 -openai>=1.12.0 -``` - -**升级命令**: -```bash -pip install --upgrade openai -# 或 -pip install -r requirements.txt --upgrade -``` - -### 修改文件 -- `requirements.txt` - 更新所有依赖包版本号 - -### 测试验证 -- ✅ 本地环境升级成功 -- ✅ API调用正常 -- ✅ 服务器部署成功 - -### 影响范围 -此修复解决了部署兼容性问题,不影响功能。同时更新了其他依赖包版本,提升系统稳定性。 - ---- - -## 2025-10-03 - 修复 `fetcher` 未定义错误 - -### 问题描述 -在运行股票分析时出现错误: -``` -name 'fetcher' is not defined -``` - -### 问题原因 -在 `app.py` 的 `run_stock_analysis()` 函数中,尝试使用 `fetcher.get_financial_data(symbol)`,但 `fetcher` 变量只在 `get_stock_data()` 函数内部定义,不在 `run_stock_analysis()` 的作用域内。 - -### 解决方案 -在 `run_stock_analysis()` 函数中,在调用 `get_financial_data()` 之前创建 `StockDataFetcher` 实例: - -```python -# 修复前 -financial_data = fetcher.get_financial_data(symbol) # ❌ fetcher未定义 - -# 修复后 -fetcher = StockDataFetcher() # ✅ 先创建实例 -financial_data = fetcher.get_financial_data(symbol) -``` - -### 修改文件 -- `app.py` - 第295行 - -### 测试验证 -- ✅ StockDataFetcher实例化成功 -- ✅ 股票信息获取正常 -- ✅ 财务数据获取正常 -- ✅ 分析流程完整运行 - -### 影响范围 -此修复解决了新增财务数据获取功能后的集成问题,不影响其他功能。 - ---- - -## 常见错误排查 - -### 1. `name 'xxx' is not defined` -**原因**:变量未定义或作用域问题 -**解决**:检查变量定义位置和作用域 - -### 2. `module 'xxx' has no attribute 'yyy'` -**原因**:API变更或模块版本不匹配 -**解决**:更新API调用或使用备用方案 - -### 3. 网络连接错误 -**原因**:防火墙、代理或网络不稳定 -**解决**:检查网络设置,使用重试机制 - -### 4. 数据获取失败 -**原因**:数据源限制或股票代码错误 -**解决**:验证股票代码格式,使用缓存机制 - ---- - -**最后更新**:2025-10-03 - diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index ab2b9cc..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,106 +0,0 @@ -# 更新日志 - -## 2025-10-03 - -### ✨ 新增功能 - -#### 增强基本面分析 -- 📊 **详细财务数据获取** - - 资产负债表:完整的资产和负债结构 - - 利润表:营收、成本、利润明细 - - 现金流量表:经营、投资、筹资现金流 - -- 💰 **全面财务指标** - - 盈利能力:ROE、ROA、毛利率、净利率 - - 偿债能力:资产负债率、流动比率、速动比率 - - 运营能力:存货周转率、应收账款周转率、总资产周转率 - - 成长能力:营收增长率、利润增长率 - - 每股指标:EPS、每股账面价值、股息率、派息率 - -- 🎯 **深度分析维度** - - 公司质地分析(业务模式、竞争力、护城河) - - 盈利能力深度分析 - - 财务健康度评估 - - 成长性分析 - - 估值分析(历史对比、行业对比) - - 投资价值综合判断 - -- 🔄 **数据源优化** - - A股:支持同花顺财务数据API - - 美股:yfinance完整财务报表 - - 自动处理API变化和异常 - -#### 实时监测管理系统 -- 📊 **监测股票管理**:添加、编辑、删除监测股票 -- 🎯 **关键位置设置**:进场区间、止盈位、止损位 -- ⏰ **自定义监测间隔**:30秒至300秒可选 -- 🎨 **卡片式布局**:现代化的股票监测卡片展示 -- 🔍 **搜索过滤功能**:快速查找监测股票 - -#### 通知系统 -- 📧 **邮件通知**:价格触发关键位置时发送邮件 -- 🌐 **网页通知**:实时界面消息提醒 -- 🔔 **通知开关**:每只股票可独立控制通知 -- 📱 **通知历史**:查看所有通知记录 - -#### PDF报告导出 -- 📄 **完整分析报告**:一键生成PDF格式报告 -- 🎨 **中文字体支持**:正确显示中文内容 -- 📊 **包含所有分析**:技术、基本、资金、风险、情绪分析 - -### 🔧 功能改进 - -#### 邮件配置 -- ✅ 从`.env`文件读取邮件配置 -- ✅ 支持TLS(587端口)和SSL(465端口) -- ✅ 测试邮件发送功能 -- ✅ 邮件配置状态显示 -- ✅ 详细的配置说明 - -#### 监测服务 -- ✅ 后台线程自动监测 -- ✅ 启动/停止监测服务 -- ✅ 手动更新股票价格 -- ✅ 实时价格显示 - -#### 数据库管理 -- ✅ 监测股票数据持久化 -- ✅ 价格历史记录 -- ✅ 通知历史管理 -- ✅ 标记已读/清空通知 - -### 🐛 问题修复 -- 修复删除股票功能返回值问题 -- 修复编辑对话框表单提交逻辑 -- 修复PDF中文乱码问题 -- 修复报告重复显示问题 -- 修复按钮key重复问题 - -### 📝 配置文件 - -#### .env 配置示例 -```env -# DeepSeek API(必需) -DEEPSEEK_API_KEY=your_api_key_here - -# 邮件通知(可选) -EMAIL_ENABLED=true -SMTP_SERVER=smtp.qq.com -SMTP_PORT=587 -EMAIL_FROM=your_email@qq.com -EMAIL_PASSWORD=your_authorization_code -EMAIL_TO=receiver@example.com -``` - -### 📚 文档更新 -- 更新 README.md 添加监测功能说明 -- 更新系统架构图 -- 添加邮件配置说明 - -### 🎯 下一步计划 -- [ ] 添加价格预警阈值(百分比) -- [ ] 支持多个接收邮箱 -- [ ] 添加监测统计图表 -- [ ] 导出监测历史数据 -- [ ] 微信/钉钉通知集成 - diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md deleted file mode 100644 index 0d45e39..0000000 --- a/DEPLOYMENT_GUIDE.md +++ /dev/null @@ -1,397 +0,0 @@ -# 🚀 部署指南 - -## 问题解决 - -### OpenAI库版本兼容性问题 - -**错误信息**: -``` -Client.init() got an unexpected keyword argument 'proxies' -``` - -**原因**: -- OpenAI库版本过旧(1.3.0) -- 新版本API有变化,不再支持`proxies`参数 - -**解决方案**: - -#### 方案1:升级依赖包(推荐) - -```bash -# 1. 激活虚拟环境 -source venv/bin/activate # Linux/Mac -# 或 -.\venv\Scripts\Activate.ps1 # Windows - -# 2. 升级openai库 -pip install --upgrade openai - -# 3. 或者重新安装所有依赖 -pip install -r requirements.txt --upgrade -``` - -#### 方案2:指定版本安装 - -```bash -pip install openai>=1.12.0 -``` - -#### 方案3:清理后重新安装 - -```bash -# 1. 卸载旧版本 -pip uninstall openai -y - -# 2. 安装新版本 -pip install openai - -# 3. 重新安装所有依赖 -pip install -r requirements.txt -``` - -## 📋 完整部署流程 - -### 1. 环境准备 - -```bash -# 克隆项目 -git clone -cd agentsstock1 - -# 创建虚拟环境 -python -m venv venv - -# 激活虚拟环境 -# Windows: -.\venv\Scripts\Activate.ps1 -# Linux/Mac: -source venv/bin/activate -``` - -### 2. 安装依赖 - -```bash -# 安装所有依赖 -pip install -r requirements.txt - -# 如果遇到问题,逐个安装 -pip install streamlit requests pandas numpy plotly -pip install yfinance akshare openai python-dotenv -pip install pytz ta reportlab peewee schedule -``` - -### 3. 配置环境变量 - -```bash -# 复制配置文件 -cp .env.example .env - -# 编辑.env文件 -# Windows: -notepad .env -# Linux/Mac: -nano .env -``` - -在`.env`文件中配置: -```env -# DeepSeek API配置(必需) -DEEPSEEK_API_KEY=your_actual_api_key_here -DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 - -# 邮件通知配置(可选) -EMAIL_ENABLED=false -SMTP_SERVER=smtp.qq.com -SMTP_PORT=587 -EMAIL_FROM=your_email@qq.com -EMAIL_PASSWORD=your_authorization_code -EMAIL_TO=receiver@example.com -``` - -### 4. 测试运行 - -```bash -# 本地测试 -streamlit run app.py - -# 指定端口 -streamlit run app.py --server.port 8501 -``` - -### 5. 服务器部署 - -#### 使用Streamlit Cloud - -1. 推送代码到GitHub -2. 登录 https://streamlit.io/cloud -3. 连接GitHub仓库 -4. 在Settings中配置环境变量 -5. 部署 - -#### 使用Docker - -创建`Dockerfile`: -```dockerfile -FROM python:3.9-slim - -WORKDIR /app - -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt - -COPY . . - -EXPOSE 8501 - -CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"] -``` - -构建和运行: -```bash -# 构建镜像 -docker build -t stock-analysis . - -# 运行容器 -docker run -p 8501:8501 --env-file .env stock-analysis -``` - -#### 使用PM2(适用于VPS) - -```bash -# 安装PM2 -npm install -g pm2 - -# 创建启动脚本 start.sh -echo "streamlit run app.py --server.port 8501" > start.sh -chmod +x start.sh - -# 使用PM2启动 -pm2 start start.sh --name stock-analysis - -# 保存PM2配置 -pm2 save -pm2 startup -``` - -## 🔧 常见部署问题 - -### 1. 端口被占用 - -**错误**:`Address already in use` - -**解决**: -```bash -# 更换端口 -streamlit run app.py --server.port 8502 -``` - -### 2. 依赖安装失败 - -**错误**:`No matching distribution found` - -**解决**: -```bash -# 升级pip -pip install --upgrade pip - -# 使用国内镜像源 -pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple -``` - -### 3. API连接失败 - -**错误**:`Connection timeout` - -**解决**: -- 检查网络连接 -- 验证API Key是否正确 -- 检查BASE_URL是否正确 -- 检查防火墙设置 - -### 4. 中文字体问题(PDF生成) - -**错误**:`Font not found` - -**解决**: -```bash -# Linux服务器安装中文字体 -sudo apt-get install fonts-wqy-zenhei fonts-wqy-microhei - -# 或手动下载字体 -wget https://github.com/adobe-fonts/source-han-sans/releases/download/2.004R/SourceHanSansCN.zip -unzip SourceHanSansCN.zip -d /usr/share/fonts/ -fc-cache -fv -``` - -### 5. 数据库权限问题 - -**错误**:`Permission denied: stock_monitor.db` - -**解决**: -```bash -# 设置正确的权限 -chmod 666 stock_monitor.db stock_analysis.db -chmod 777 . # 确保当前目录可写 -``` - -### 6. 内存不足 - -**错误**:`MemoryError` - -**解决**: -```bash -# 增加系统交换空间 -sudo fallocate -l 2G /swapfile -sudo chmod 600 /swapfile -sudo mkswap /swapfile -sudo swapon /swapfile - -# 或限制Streamlit内存使用 -streamlit run app.py --server.maxUploadSize 100 -``` - -## 🔐 安全建议 - -### 1. 保护敏感信息 - -```bash -# 确保.env文件在.gitignore中 -echo ".env" >> .gitignore - -# 不要在代码中硬编码密钥 -# ❌ BAD -API_KEY = "sk-xxxxx" - -# ✅ GOOD -API_KEY = os.getenv("DEEPSEEK_API_KEY") -``` - -### 2. 配置防火墙 - -```bash -# 只允许特定IP访问 -# UFW (Ubuntu) -sudo ufw allow from YOUR_IP to any port 8501 - -# iptables -sudo iptables -A INPUT -p tcp --dport 8501 -s YOUR_IP -j ACCEPT -``` - -### 3. 使用HTTPS - -```bash -# 使用nginx反向代理 -sudo apt-get install nginx - -# 配置nginx -sudo nano /etc/nginx/sites-available/stock-analysis -``` - -nginx配置: -```nginx -server { - listen 80; - server_name your-domain.com; - - location / { - proxy_pass http://localhost:8501; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - } -} -``` - -### 4. 定期更新 - -```bash -# 更新依赖包 -pip list --outdated -pip install --upgrade package_name - -# 更新系统 -sudo apt-get update && sudo apt-get upgrade -``` - -## 📊 性能优化 - -### 1. 启用缓存 - -代码中已使用`@st.cache_data`装饰器 - -### 2. 配置Streamlit - -创建`.streamlit/config.toml`: -```toml -[server] -port = 8501 -enableCORS = false -enableXsrfProtection = true - -[browser] -gatherUsageStats = false - -[client] -showErrorDetails = false -``` - -### 3. 使用CDN - -对于静态资源使用CDN加速 - -## 🔄 更新部署 - -```bash -# 拉取最新代码 -git pull origin main - -# 更新依赖 -pip install -r requirements.txt --upgrade - -# 重启服务 -pm2 restart stock-analysis -# 或 -docker restart stock-analysis -``` - -## 📝 监控和日志 - -### 查看日志 - -```bash -# PM2日志 -pm2 logs stock-analysis - -# Docker日志 -docker logs stock-analysis - -# Streamlit日志 -tail -f ~/.streamlit/logs/* -``` - -### 监控性能 - -```bash -# 系统资源 -htop - -# PM2监控 -pm2 monit - -# Docker stats -docker stats stock-analysis -``` - -## 🆘 获取帮助 - -如果遇到其他问题: -1. 查看BUGFIX.md -2. 查看GitHub Issues -3. 检查系统日志 -4. 联系技术支持 - ---- - -**最后更新**:2025-10-03 - diff --git a/DOCKER_DEPLOYMENT.md b/DOCKER_DEPLOYMENT.md new file mode 100644 index 0000000..7167147 --- /dev/null +++ b/DOCKER_DEPLOYMENT.md @@ -0,0 +1,399 @@ +# 🐳 Docker 部署指南 + +本文档详细说明如何使用 Docker 部署 AI 股票分析系统。 + +## 📋 前置要求 + +- Docker 20.10+ +- Docker Compose 2.0+(可选,但推荐) +- 至少 2GB 可用磁盘空间 +- DeepSeek API Key + +### 安装 Docker + +#### Windows +1. 下载并安装 [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/) +2. 启动 Docker Desktop +3. 确认安装成功: +```bash +docker --version +docker-compose --version +``` + +#### macOS +1. 下载并安装 [Docker Desktop for Mac](https://www.docker.com/products/docker-desktop/) +2. 启动 Docker Desktop +3. 确认安装成功: +```bash +docker --version +docker-compose --version +``` + +#### Linux +```bash +# Ubuntu/Debian +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +sudo systemctl start docker +sudo systemctl enable docker + +# 安装 Docker Compose +sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose + +# 验证安装 +docker --version +docker-compose --version +``` + +## 🚀 快速开始 + +### 方法一:使用 Docker Compose(推荐) + +1. **克隆或下载项目** +```bash +cd /path/to/agentsstock1 +``` + +2. **配置环境变量** +```bash +# Windows (PowerShell) +Copy-Item .env.example .env + +# Linux/macOS +cp .env.example .env +``` + +3. **编辑 `.env` 文件,填入您的配置** +```env +DEEPSEEK_API_KEY=sk-your-actual-api-key-here +EMAIL_ENABLED=false +# ... 其他配置 +``` + +4. **启动服务** +```bash +docker-compose up -d +``` + +5. **访问应用** +打开浏览器访问:http://localhost:8503 + +6. **查看日志** +```bash +docker-compose logs -f +``` + +7. **停止服务** +```bash +docker-compose down +``` + +### 方法二:使用 Docker 命令 + +1. **构建镜像** +```bash +docker build -t agentsstock1:latest . +``` + +2. **创建数据目录** +```bash +mkdir -p data +``` + +3. **运行容器** +```bash +docker run -d \ + --name agentsstock1 \ + -p 8501:8501 \ + -v $(pwd)/data:/app/data \ + -v $(pwd)/.env:/app/.env \ + -v $(pwd)/stock_analysis.db:/app/stock_analysis.db \ + -v $(pwd)/stock_monitor.db:/app/stock_monitor.db \ + -e TZ=Asia/Shanghai \ + --restart unless-stopped \ + agentsstock1:latest +``` + +**Windows PowerShell 用户请使用:** +```powershell +docker run -d ` + --name agentsstock1 ` + -p 8503:8501 ` + -v ${PWD}/data:/app/data ` + -v ${PWD}/.env:/app/.env ` + -v ${PWD}/stock_analysis.db:/app/stock_analysis.db ` + -v ${PWD}/stock_monitor.db:/app/stock_monitor.db ` + -e TZ=Asia/Shanghai ` + --restart unless-stopped ` + agentsstock1:latest +``` + +4. **查看日志** +```bash +docker logs -f agentsstock1 +``` + +5. **停止容器** +```bash +docker stop agentsstock1 +docker rm agentsstock1 +``` + +## 📁 数据持久化 + +Docker 部署会自动挂载以下目录/文件到宿主机: + +- `./data` - 临时数据目录 +- `./stock_analysis.db` - 分析历史数据库 +- `./stock_monitor.db` - 监测数据库 +- `./.env` - 环境变量配置 + +**重要**:即使删除容器,这些数据也会保留在宿主机上。 + +## 🔧 常用命令 + +### Docker Compose + +```bash +# 启动服务(后台运行) +docker-compose up -d + +# 启动服务(前台运行,可看日志) +docker-compose up + +# 停止服务 +docker-compose down + +# 重启服务 +docker-compose restart + +# 查看日志 +docker-compose logs -f + +# 查看服务状态 +docker-compose ps + +# 重新构建并启动 +docker-compose up -d --build + +# 完全清理(包括volumes) +docker-compose down -v +``` + +### Docker 命令 + +```bash +# 查看运行中的容器 +docker ps + +# 查看所有容器 +docker ps -a + +# 查看日志 +docker logs agentsstock1 +docker logs -f agentsstock1 # 实时日志 + +# 进入容器 +docker exec -it agentsstock1 bash + +# 重启容器 +docker restart agentsstock1 + +# 停止容器 +docker stop agentsstock1 + +# 启动已停止的容器 +docker start agentsstock1 + +# 删除容器 +docker rm agentsstock1 + +# 删除镜像 +docker rmi agentsstock1:latest + +# 查看镜像 +docker images + +# 查看容器资源使用 +docker stats agentsstock1 +``` + +## 🐛 故障排除 + +### 1. 容器启动失败 + +**检查日志**: +```bash +docker-compose logs +# 或 +docker logs agentsstock1 +``` + +**常见原因**: +- `.env` 文件未配置或配置错误 +- 端口 8501 已被占用 +- Docker 资源不足 + +### 2. 端口被占用 + +修改 `docker-compose.yml` 中的端口映射: +```yaml +ports: + - "8502:8501" # 改为其他端口 +``` + +或在 docker run 命令中修改: +```bash +docker run ... -p 8502:8501 ... +``` + +### 3. 无法访问网页 + +**检查容器状态**: +```bash +docker ps +``` + +**检查健康状态**: +```bash +docker inspect agentsstock1 | grep Health -A 10 +``` + +**检查网络**: +```bash +# 确认端口映射 +docker port agentsstock1 + +# 尝试从容器内访问 +docker exec agentsstock1 curl http://localhost:8501 +``` + +### 4. 数据库权限问题 + +Linux/macOS 用户可能遇到权限问题: +```bash +# 修改数据库文件权限 +chmod 666 *.db +chmod 777 data/ +``` + +### 5. Node.js 相关错误 + +如果遇到 pywencai 相关错误,进入容器检查: +```bash +docker exec -it agentsstock1 bash +node --version +npm --version +``` + +### 6. 内存不足 + +增加 Docker 可用内存(Docker Desktop → Settings → Resources): +- 推荐至少 4GB RAM +- 推荐至少 2GB Swap + +或在 docker-compose.yml 中限制: +```yaml +services: + agentsstock: + # ... 其他配置 + deploy: + resources: + limits: + memory: 2G + reservations: + memory: 1G +``` + +## 🔒 安全建议 + +1. **保护 .env 文件** + - 不要提交到 Git + - 设置适当的文件权限:`chmod 600 .env` + +2. **使用 secrets(生产环境)** +```yaml +services: + agentsstock: + secrets: + - deepseek_api_key + environment: + - DEEPSEEK_API_KEY_FILE=/run/secrets/deepseek_api_key + +secrets: + deepseek_api_key: + file: ./secrets/deepseek_api_key.txt +``` + +3. **定期更新镜像** +```bash +docker-compose pull +docker-compose up -d +``` + +## 🌐 反向代理(可选) + +如需通过域名访问,可配置 Nginx: + +```nginx +server { + listen 80; + server_name yourdomain.com; + + location / { + proxy_pass http://localhost:8501; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +## 📊 性能优化 + +1. **使用构建缓存** +```bash +docker-compose build --no-cache # 清除缓存重建 +``` + +2. **多阶段构建(高级)** +可以修改 Dockerfile 使用多阶段构建减小镜像体积。 + +3. **资源限制** +```yaml +services: + agentsstock: + deploy: + resources: + limits: + cpus: '2' + memory: 2G +``` + +## 📝 生产环境部署建议 + +1. 使用环境变量管理敏感信息 +2. 配置日志轮转 +3. 设置健康检查和自动重启 +4. 使用 Docker volumes 而非 bind mounts +5. 配置备份策略(数据库文件) +6. 使用 HTTPS(配合 Nginx/Caddy) +7. 配置防火墙规则 + +## 🆘 获取帮助 + +如遇到问题: +1. 查看日志:`docker-compose logs -f` +2. 检查容器状态:`docker ps -a` +3. 查看 GitHub Issues +4. 联系:ws3101001@126.com + +--- + +**享受 Docker 带来的便捷部署体验!** 🚀 + diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 0000000..f55e8af --- /dev/null +++ b/DOCKER_README.md @@ -0,0 +1,251 @@ +# 🐳 Docker 部署快速指南 + +本文档是Docker部署的快速参考指南。完整文档请查看 [DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md)。 + +## 🎯 为什么选择Docker部署? + +- ✅ **零环境配置**:无需安装Python、Node.js等环境 +- ✅ **一键启动**:简单命令即可运行 +- ✅ **环境隔离**:不影响系统其他软件 +- ✅ **跨平台**:Windows/macOS/Linux统一部署方式 +- ✅ **稳定可靠**:容器自动重启,故障自动恢复 + +## ⚡ 5分钟快速开始 + +### 1️⃣ 安装Docker + +**Windows/macOS:** +- 下载 [Docker Desktop](https://www.docker.com/products/docker-desktop/) +- 双击安装,启动Docker Desktop + +**Linux:** +```bash +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +``` + +### 2️⃣ 配置环境变量 + +```bash +# 复制配置模板 +cp .env.template .env + +# 编辑 .env 文件,填入你的 DeepSeek API Key +# DEEPSEEK_API_KEY=sk-your-actual-api-key-here +``` + +### 3️⃣ 启动服务 + +```bash +# 一键启动 +docker-compose up -d + +# 查看日志(可选) +docker-compose logs -f +``` + +### 4️⃣ 访问系统 + +打开浏览器访问:**http://localhost:8503** + +## 🎮 常用命令 + +```bash +# 启动服务 +docker-compose up -d + +# 停止服务 +docker-compose down + +# 重启服务 +docker-compose restart + +# 查看日志 +docker-compose logs -f + +# 查看运行状态 +docker ps + +# 进入容器(调试用) +docker exec -it agentsstock1 bash +``` + +## 📁 项目结构 + +``` +agentsstock1/ +├── Dockerfile # Docker镜像构建文件 +├── docker-compose.yml # Docker编排配置 +├── .dockerignore # Docker构建忽略文件 +├── .env.template # 环境变量模板 +├── .env # 环境变量配置(需自己创建) +├── DOCKER_DEPLOYMENT.md # 详细部署文档 +├── DOCKER_CHECKLIST.md # 部署检查清单 +└── README.md # 项目主文档 +``` + +## 🔑 关键特性 + +### Node.js 环境集成 +Docker镜像已内置Node.js 18.x环境,支持pywencai等需要Node.js的Python包。 + +### 数据持久化 +以下数据会自动保存到宿主机: +- `stock_analysis.db` - 分析历史数据库 +- `stock_monitor.db` - 监测数据库 +- `data/` - 临时数据目录 + +即使删除容器,数据也不会丢失。 + +### 健康检查 +容器会自动监控应用健康状态,异常时自动重启。 + +## 🐛 快速故障排除 + +### 问题1: 容器启动失败 +```bash +# 查看详细日志 +docker-compose logs + +# 检查 .env 文件是否存在并配置正确 +cat .env +``` + +### 问题2: 无法访问网页 +```bash +# 检查容器是否运行 +docker ps + +# 检查端口映射 +docker port agentsstock1 + +# 尝试从容器内访问 +docker exec agentsstock1 curl http://localhost:8501 +``` + +### 问题3: 端口被占用 +修改 `docker-compose.yml` 文件: +```yaml +ports: + - "8502:8501" # 改用8502端口 +``` + +### 问题4: 数据库权限错误(Linux/macOS) +```bash +chmod 666 *.db +chmod 777 data/ +``` + +## 🔄 更新和维护 + +### 更新代码 +```bash +# 停止服务 +docker-compose down + +# 拉取最新代码 +git pull + +# 重新构建并启动 +docker-compose up -d --build +``` + +### 清理和重置 +```bash +# 完全清理(包括volumes) +docker-compose down -v + +# 删除镜像 +docker rmi agentsstock1:latest + +# 重新构建 +docker-compose build --no-cache +docker-compose up -d +``` + +### 备份数据 +```bash +# 备份数据库文件 +cp stock_analysis.db stock_analysis.db.backup +cp stock_monitor.db stock_monitor.db.backup +``` + +## 📊 性能监控 + +```bash +# 查看资源使用 +docker stats agentsstock1 + +# 查看容器详情 +docker inspect agentsstock1 + +# 查看日志大小 +docker logs agentsstock1 2>&1 | wc -l +``` + +## 🔒 安全建议 + +1. **保护.env文件** + ```bash + # Linux/macOS - 设置文件权限 + chmod 600 .env + ``` + +2. **不要提交敏感信息** + - `.env` 文件已在 `.gitignore` 中 + - 不要将API Key提交到版本控制 + +3. **定期更新** + ```bash + # 更新Docker镜像 + docker-compose pull + docker-compose up -d + ``` + +## 🌐 生产环境部署 + +对于生产环境,建议: + +1. 使用反向代理(Nginx/Caddy) +2. 配置HTTPS证书 +3. 设置防火墙规则 +4. 配置日志轮转 +5. 定期备份数据库 +6. 监控容器状态 + +示例Nginx配置: +```nginx +server { + listen 80; + server_name yourdomain.com; + + location / { + proxy_pass http://localhost:8501; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + } +} +``` + +## 📚 更多资源 + +- **完整部署文档**: [DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md) +- **部署检查清单**: [DOCKER_CHECKLIST.md](DOCKER_CHECKLIST.md) +- **项目主文档**: [README.md](README.md) +- **Docker官方文档**: https://docs.docker.com/ + +## 🆘 获取帮助 + +遇到问题? + +1. 查看日志:`docker-compose logs -f` +2. 查看完整文档:[DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md) +3. 检查部署清单:[DOCKER_CHECKLIST.md](DOCKER_CHECKLIST.md) +4. 联系支持:ws3101001@126.com + +--- + +**Docker让部署更简单!祝您使用愉快!** 🚀🐳 + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bfc4022 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# 使用官方Python镜像作为基础镜像 +FROM python:3.12-slim + +# 设置工作目录 +WORKDIR /app + +# 安装Node.js (pywencai需要) +RUN apt-get update && apt-get install -y \ + curl \ + gnupg \ + && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ + && apt-get install -y nodejs \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# 验证安装 +RUN node --version && npm --version + +# 复制依赖文件 +COPY requirements.txt . + +# 安装Python依赖 +RUN pip install --no-cache-dir -r requirements.txt + +# 复制项目文件 +COPY . . + +# 创建必要的目录 +RUN mkdir -p /app/data && chmod 777 /app/data + +# 暴露Streamlit默认端口 +EXPOSE 8501 + +# 设置健康检查 +HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health || exit 1 + +# 启动应用 +CMD ["python", "run.py"] + diff --git a/FINANCIAL_ANALYSIS_GUIDE.md b/FINANCIAL_ANALYSIS_GUIDE.md deleted file mode 100644 index a2e5864..0000000 --- a/FINANCIAL_ANALYSIS_GUIDE.md +++ /dev/null @@ -1,236 +0,0 @@ -# 📊 基本面分析功能指南 - -## 功能概述 - -本系统的基本面分析功能已经全面升级,能够获取并分析详细的财务数据,为投资决策提供更深入的支持。 - -## 📈 数据获取范围 - -### 三大财务报表 - -#### 1. 资产负债表 -- 总资产、总负债、股东权益 -- 流动资产、非流动资产 -- 流动负债、非流动负债 -- 资产负债结构分析 - -#### 2. 利润表 -- 营业收入、营业成本 -- 毛利润、营业利润、净利润 -- 各项费用明细 -- 盈利能力趋势 - -#### 3. 现金流量表 -- 经营活动现金流 -- 投资活动现金流 -- 筹资活动现金流 -- 现金流健康度分析 - -### 财务指标体系 - -#### 盈利能力指标 -| 指标 | 说明 | 优秀标准 | -|------|------|----------| -| ROE(净资产收益率) | 衡量股东投资回报率 | >15% | -| ROA(总资产收益率) | 衡量资产使用效率 | >5% | -| 销售毛利率 | 产品附加值和定价能力 | 因行业而异 | -| 销售净利率 | 综合盈利能力 | >10% | - -#### 偿债能力指标 -| 指标 | 说明 | 安全标准 | -|------|------|----------| -| 资产负债率 | 负债占总资产比例 | <60% | -| 流动比率 | 短期偿债能力 | >1.5 | -| 速动比率 | 更严格的短期偿债能力 | >1.0 | - -#### 运营能力指标 -| 指标 | 说明 | 意义 | -|------|------|------| -| 存货周转率 | 存货管理效率 | 越高越好 | -| 应收账款周转率 | 账款回收能力 | 越高越好 | -| 总资产周转率 | 资产使用效率 | 越高越好 | - -#### 成长能力指标 -| 指标 | 说明 | 优秀标准 | -|------|------|----------| -| 营业收入同比增长 | 收入增长速度 | >20% | -| 净利润同比增长 | 利润增长速度 | >20% | - -#### 每股指标 -| 指标 | 说明 | 作用 | -|------|------|------| -| EPS(每股收益) | 每股盈利能力 | 估值基础 | -| 每股账面价值 | 每股净资产 | 安全边际 | -| 股息率 | 分红回报率 | 现金回报 | -| 派息率 | 分红比例 | 分红政策 | - -## 🎯 分析维度 - -### 1. 公司质地分析 -- **业务模式**:商业模式和盈利来源 -- **核心竞争力**:技术、品牌、规模优势 -- **护城河**:竞争壁垒和持续性 -- **行业地位**:市场份额和龙头地位 - -### 2. 盈利能力分析 -- ROE/ROA水平评估 -- 毛利率和净利率趋势 -- 与行业平均水平对比 -- 盈利质量和持续性判断 - -### 3. 财务健康度分析 -- 资产负债结构合理性 -- 偿债能力充足性 -- 现金流充裕程度 -- 财务风险识别 - -### 4. 成长性分析 -- 收入和利润增长趋势 -- 增长驱动因素分析 -- 未来成长空间预测 -- 行业发展前景评估 - -### 5. 估值分析 -- 当前估值水平(PE、PB) -- 历史估值区间对比 -- 行业估值对比 -- 合理估值区间判断 - -### 6. 投资价值判断 -- 综合评分(0-100分) -- 投资亮点总结 -- 投资风险提示 -- 适合的投资者类型 - -## 💡 使用建议 - -### 看财务数据的顺序 - -1. **先看盈利能力** - - ROE是否稳定且>15% - - 毛利率是否维持高位 - - 净利率是否稳定增长 - -2. **再看成长性** - - 营收和利润是否持续增长 - - 增长是否健康可持续 - - 是否有新的增长动力 - -3. **然后看财务健康度** - - 资产负债率是否合理 - - 流动比率是否充足 - - 现金流是否健康 - -4. **最后看估值** - - PE/PB是否处于合理区间 - - 相对历史估值的位置 - - 相对行业估值的位置 - -### 财务数据解读技巧 - -#### 高质量公司特征 -- ✅ ROE稳定在15%以上 -- ✅ 毛利率和净利率稳定或上升 -- ✅ 收入和利润持续增长 -- ✅ 资产负债率<60% -- ✅ 经营现金流充足 -- ✅ 应收账款周转率高 - -#### 风险信号 -- ⚠️ ROE持续下降 -- ⚠️ 毛利率大幅下滑 -- ⚠️ 收入增长但利润不增长 -- ⚠️ 资产负债率>70% -- ⚠️ 经营现金流为负 -- ⚠️ 应收账款大量增加 - -## 📚 数据源说明 - -### A股数据 -- **来源**:AKShare(东方财富、同花顺接口) -- **更新频率**:季度财报 -- **数据滞后**:约1-2个月 - -### 美股数据 -- **来源**:yfinance(Yahoo Finance) -- **更新频率**:季度财报 -- **数据滞后**:约1-2个月 - -## ⚠️ 注意事项 - -1. **财务数据有滞后性** - - 季报发布后1-2个月才能获取 - - 最新数据可能不是最近一个季度 - -2. **不同行业标准不同** - - 轻资产行业(软件、服务):高ROE、高毛利率 - - 重资产行业(制造、地产):ROE相对较低 - - 周期性行业:财务指标波动大 - -3. **单一指标不能说明全部问题** - - 需要综合多个指标判断 - - 需要看趋势而非单点数据 - - 需要与行业对比分析 - -4. **特殊情况处理** - - 新股可能没有完整财务数据 - - ST股票财务数据异常 - - 重组并购期间数据扭曲 - -## 🚀 最佳实践 - -### 分析流程建议 - -1. **快速筛选**(5分钟) - - 查看ROE、毛利率、净利率 - - 看收入和利润增长率 - - 检查资产负债率 - -2. **深入分析**(15分钟) - - 分析盈利能力趋势 - - 评估财务健康度 - - 研究成长性和驱动因素 - -3. **综合判断**(10分钟) - - 结合估值分析 - - 识别投资风险 - - 做出投资决策 - -### 配合其他分析 - -基本面分析需要与其他维度结合: -- **技术面**:把握买卖时机 -- **资金面**:确认主力动向 -- **市场情绪**:理解短期波动 -- **风险管理**:控制投资风险 - -## 📞 常见问题 - -### Q1: 为什么有些财务数据显示N/A? -A: 可能原因: -- 新上市公司数据不全 -- 数据接口暂时无法获取 -- 该公司未披露该项数据 - -### Q2: 财务数据多久更新一次? -A: -- 上市公司季度财报发布后1-2个月 -- 系统实时获取最新可用数据 - -### Q3: 如何判断财务数据的可靠性? -A: -- 对比多个数据源 -- 关注会计师事务所意见 -- 留意财务报表附注 -- 关注媒体和监管公告 - -### Q4: ROE多少算优秀? -A: -- 一般标准:>15%为优秀 -- 看行业:高科技可以>20%,传统行业10-15%也不错 -- 看稳定性:持续5年ROE>15%更可靠 - ---- - -**提示**:财务分析是价值投资的基础,但不是全部。投资决策需要综合考虑多方面因素,理性判断,谨慎决策。 - diff --git a/README.md b/README.md index cdd6fd8..2a3dc6c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🤖 复合多AI智能体股票团队分析系统 -- 初心:在股市摸爬滚打多年,自学自编各种指标,花冤枉钱学习了各种战法各种策略,也曾入各种小班,总是赚少赔多,逐渐失去在股市玩的信心。自从去年deepseek上市,一直探索用ai辅助分析,且近日受tradingagents项目启发(感谢原作),多agent结合跟踪主力资金战法(某指每年收费6000rmb),用各种ai辅助编程,拼凑了这么个小程序,根据软件提供的辅助信息,实盘测试盈率还是挺高的,并且逐步形成了自己的交易系统,近一个月来,账户也慢慢在扭亏为盈。开源此软件的目的,就是为了使像我一样的小散,不再迷茫。也许这个软件不能让你发大财,但是他能给你足够的信心。最后重点关注:股市有风险,入市需谨慎! +- 初心:在股市摸爬滚打多年,自学自编各种指标,花冤枉钱学习了各种战法各种策略,也曾入各种小班,总是赚少赔多,逐渐失去在股市玩的信心。自从去年deepseek上市,一直探索用ai辅助分析,且近日受tradingagents项目启发(感谢原作),多agent结合跟踪主力资金战法(某指每年收费6000rmb),用各种ai辅助编程,拼凑了这么个小程序,根据软件提供的辅助信息,实盘测试盈率还是挺高的,并且逐步形成了自己的交易系统,近一个月来,账户也慢慢在扭亏为盈。开源此软件的目的,就是为了使像我一样的小散,不再迷茫。也许这个软件不能让你发大财,但是他能给你足够的信心。最后提醒:股市有风险,入市需谨慎! - 希望能帮到你!欢迎加微信群讨论 image @@ -109,14 +109,94 @@ ## 🚀 快速开始 +### 部署方式选择 + +本系统支持两种部署方式: +- **🐳 Docker部署(推荐)**:一键启动,环境隔离,适合所有用户 +- **💻 本地部署**:传统方式,适合开发者 + +--- + +## 🐳 方式一:Docker 部署(推荐)⭐️ + +### 优势 +- ✅ 无需配置Python和Node.js环境 +- ✅ 一键启动,开箱即用 +- ✅ 环境隔离,不影响系统 +- ✅ 跨平台支持(Windows/macOS/Linux) +- ✅ 自动重启,稳定可靠 + +### 前置要求 +- Docker 20.10+ +- Docker Compose 2.0+(推荐) +- DeepSeek API Key + +### 快速开始 + +#### 1. 安装 Docker +- **Windows/macOS**: 下载安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/) +- **Linux**: +```bash +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +``` + +#### 2. 配置环境变量 +```bash +# Windows (PowerShell) +Copy-Item .env.example .env + +# Linux/macOS +cp .env.example .env +``` + +编辑 `.env` 文件,填入您的 DeepSeek API Key: +```env +DEEPSEEK_API_KEY=sk-your-actual-api-key-here +``` + +#### 3. 启动服务 +```bash +# 使用 Docker Compose(推荐) +docker-compose up -d + +# 或使用 Docker 命令 +docker build -t agentsstock1 . +docker run -d -p 8503:8501 -v $(pwd)/.env:/app/.env --name agentsstock1 agentsstock1 +``` + +#### 4. 访问系统(为避免端口冲突,已将运行端口改为8503) +打开浏览器访问:http://localhost:8503 + +#### 5. 常用命令 +```bash +# 查看日志 +docker-compose logs -f + +# 停止服务 +docker-compose down + +# 重启服务 +docker-compose restart +``` + +**📖 详细文档**:查看 [DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md) 获取完整的Docker部署指南和故障排除。 + +--- + +## 💻 方式二:本地部署 + ### 1. 环境要求 - Python 3.8+(微软store或官网,推荐3.12) -- Node.js 16+ (微软store或官网) +- Node.js 16+ (微软store或官网,pywencai需要) - 稳定的网络连接(大陆网络请关闭vpn) - DeepSeek API Key ### 2. 安装依赖 +创建激活虚拟环境(powershell)并安装依赖 ```bash +python -m venv venv +.\venv\Scripts\Activate.ps1 pip install -r requirements.txt ``` @@ -152,7 +232,6 @@ MINIQMT_HOST=127.0.0.1 MINIQMT_PORT=58610 ``` - #### 方法二:设置系统环境变量 您也可以直接在系统环境变量中设置: - 变量名:`DEEPSEEK_API_KEY` @@ -162,16 +241,20 @@ MINIQMT_PORT=58610 ### 4. 启动系统 ```bash +.\venv\Scripts\Activate.ps1 python run.py ``` 或者直接运行: ```bash +.\venv\Scripts\Activate.ps1 streamlit run app.py ``` ### 5. 访问系统 打开浏览器访问:http://localhost:8501 +--- + ## 📊 使用指南 ### 股票代码格式(美股暂不支持) @@ -371,7 +454,11 @@ AI股票分析系统 ├── database.py # 分析记录数据库 ├── config.py # 配置文件 ├── requirements.txt # 依赖包列表 -└── run.py # 启动脚本 +├── run.py # 启动脚本 +├── Dockerfile # Docker镜像构建文件 🐳 +├── docker-compose.yml # Docker编排配置文件 🐳 +├── .dockerignore # Docker构建忽略文件 🐳 +└── DOCKER_DEPLOYMENT.md # Docker部署详细文档 🐳 ``` ### 核心模块说明 @@ -543,9 +630,36 @@ DEFAULT_INTERVAL = "1d" # 默认数据间隔 - 查看通知记录中的错误信息 - 确认交易时间在交易日内 +9. **Docker部署问题** 🐳 + - **容器启动失败**: + - 检查Docker是否正常运行:`docker ps` + - 查看容器日志:`docker-compose logs -f` + - 确认.env文件已正确配置 + - **端口被占用**: + - 修改docker-compose.yml中的端口映射(如改为8502:8501) + - **无法访问网页**: + - 确认容器正在运行:`docker ps` + - 检查防火墙设置 + - 尝试访问:http://localhost:8501 + - **数据库权限问题**(Linux/macOS): + - 修改数据库文件权限:`chmod 666 *.db` + - **Node.js相关错误**: + - 容器内已集成Node.js环境,无需额外配置 + - 进入容器检查:`docker exec -it agentsstock1 bash` + - **详细文档**:查看 `DOCKER_DEPLOYMENT.md` 获取完整的故障排除指南 + ### 日志调试 系统运行时会在控制台输出详细日志,可用于问题诊断。如遇到错误,请查看终端输出。 +**Docker部署日志查看**: +```bash +# 实时查看日志 +docker-compose logs -f + +# 或查看特定容器日志 +docker logs -f agentsstock1 +``` + ### 错误报告 如发现bug,请查看 `BUGFIX.md` 文件了解已知问题和解决方案。 diff --git a/database.py b/database.py index 342738b..07dd0db 100644 --- a/database.py +++ b/database.py @@ -7,6 +7,10 @@ class StockAnalysisDatabase: def __init__(self, db_path="stock_analysis.db"): """初始化数据库连接""" self.db_path = db_path + # 确保数据库所在目录存在 + db_dir = os.path.dirname(self.db_path) + if db_dir and not os.path.exists(db_dir): + os.makedirs(db_dir, exist_ok=True) self.init_database() def init_database(self): diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f0a79fb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + agentsstock: + build: + context: . + dockerfile: Dockerfile + container_name: agentsstock1 + ports: + - "8503:8501" + volumes: + # 数据和数据库持久化 - 使用目录挂载而不是文件挂载 + - ./data:/app/data + # 环境变量配置文件 + - ./.env:/app/.env + environment: + # 可以在这里设置环境变量,或者使用.env文件 + - TZ=Asia/Shanghai + restart: unless-stopped + networks: + - agentsstock-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8501/_stcore/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + +networks: + agentsstock-network: + driver: bridge + diff --git a/monitor_db.py b/monitor_db.py index 9bf7412..29056e0 100644 --- a/monitor_db.py +++ b/monitor_db.py @@ -2,12 +2,17 @@ import sqlite3 import json from datetime import datetime from typing import Dict, List, Optional +import os class StockMonitorDatabase: """股票监测数据库管理类""" def __init__(self, db_path: str = "stock_monitor.db"): self.db_path = db_path + # 确保数据库所在目录存在 + db_dir = os.path.dirname(self.db_path) + if db_dir and not os.path.exists(db_dir): + os.makedirs(db_dir, exist_ok=True) self.init_database() def init_database(self): diff --git a/setup_guide.md b/setup_guide.md deleted file mode 100644 index d1bd4c7..0000000 --- a/setup_guide.md +++ /dev/null @@ -1,90 +0,0 @@ -# 🔧 系统设置指南 - -## 📋 安装步骤 - -### 1. 安装Python依赖 -```bash -pip install -r requirements.txt -``` - -### 2. 配置API密钥 - -在 `config.py` 文件中设置您的DeepSeek API密钥: - -```python -# config.py -import os -from dotenv import load_dotenv - -# 加载环境变量 -load_dotenv() - -# DeepSeek API配置 -DEEPSEEK_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 在这里输入您的API密钥 -DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1" -``` - -### 3. 获取DeepSeek API密钥 - -1. 访问 [DeepSeek官网](https://platform.deepseek.com/) -2. 注册账号并登录 -3. 进入API管理页面 -4. 创建新的API密钥 -5. 复制密钥并设置到config.py中 - -### 4. 启动系统 - -方式一:使用启动脚本 -```bash -python run.py -``` - -方式二:直接启动Streamlit -```bash -streamlit run app.py -``` - -### 5. 访问系统 -打开浏览器访问:http://localhost:8501 - -## 🧪 测试建议 - -### 测试用例 -1. **美股测试**:输入 `AAPL` -2. **A股测试**:输入 `000001` -3. **错误处理测试**:输入无效代码 - -### 预期结果 -- 成功获取股票基本信息 -- 显示股价走势图表 -- 生成5个AI分析师报告 -- 产生团队讨论结果 -- 输出最终投资决策 - -## ⚠️ 注意事项 - -1. **API配额**:注意DeepSeek API的使用配额 -2. **网络要求**:需要稳定的网络连接 -3. **首次运行**:第一次运行可能需要较长时间 -4. **数据源**:依赖第三方数据源,可能有延迟 - -## 🔍 故障排除 - -### 常见错误及解决方案 - -1. **模块导入错误** - ```bash - pip install --upgrade -r requirements.txt - ``` - -2. **API密钥错误** - - 检查config.py中的密钥设置 - - 确保密钥格式正确且有效 - -3. **数据获取失败** - - 检查网络连接 - - 确认股票代码正确 - -4. **页面无法访问** - - 检查端口8501是否被占用 - - 尝试使用其他端口:`streamlit run app.py --server.port 8502` diff --git a/加入监测功能测试报告.md b/加入监测功能测试报告.md deleted file mode 100644 index c66f410..0000000 --- a/加入监测功能测试报告.md +++ /dev/null @@ -1,187 +0,0 @@ -# 加入监测功能测试报告 - -## 测试日期 -2025-10-05 - -## 问题描述 -用户反馈:点击"加入监测"按钮后,监测页面没有显示新加入的股票。 - -## 测试过程 - -### 1. 数据库写入测试 ✅ - -**测试脚本**: `test_monitor_add.py` - -**测试结果**: -- ✅ 成功从历史记录提取数据 -- ✅ 成功解析进场区间: `44.49 - 47.42` -- ✅ 成功解析止盈位: `48.0` -- ✅ 成功解析止损位: `42.5` -- ✅ 成功写入监测数据库,ID: 3 -- ✅ 验证监测列表,数据完整准确 - -**测试股票**: 603667 - 五洲新春 - -**数据验证**: -``` -股票代码: 603667 -股票名称: 五洲新春 -投资评级: 持有-观望 -进场区间: {'min': 44.49, 'max': 47.42} -止盈位: 48.0 -止损位: 42.5 -监测间隔: 30分钟 -通知启用: True -``` - -### 2. 监测列表显示测试 ✅ - -**测试脚本**: `test_monitor_display.py` - -**测试结果**: -- ✅ 监测列表中共有 3 只股票 -- ✅ 新添加的 603667 成功显示在列表首位 -- ✅ 所有数据字段完整准确 - -## 问题根因分析 - -通过测试发现,数据库写入和读取功能**完全正常**。问题出在用户界面的页面跳转逻辑: - -### 原始逻辑问题 - -```python -# 添加成功后只是刷新页面 -st.success(f"✅ 已成功将 {record['symbol']} 加入监测列表!") -st.balloons() -monitor_service.manual_update_stock(stock_id) - -# 仅清理 add_to_monitor_id -if 'add_to_monitor_id' in st.session_state: - del st.session_state.add_to_monitor_id - -time.sleep(1) -st.rerun() # 刷新后仍停留在历史记录页面 -``` - -**问题**: 添加成功后页面刷新,但用户仍然停留在历史记录详情页面,需要手动切换到监测页面才能看到新添加的股票。 - -## 解决方案 - -### 修改的文件 - -#### 1. `app.py` - 修改跳转逻辑 - -```python -# 清理session state并跳转到监测页面 -if 'add_to_monitor_id' in st.session_state: - del st.session_state.add_to_monitor_id -if 'viewing_record_id' in st.session_state: - del st.session_state.viewing_record_id -if 'show_history' in st.session_state: - del st.session_state.show_history - -# 设置跳转到监测页面 -st.session_state.show_monitor = True -st.session_state.monitor_jump_highlight = record['symbol'] # 标记要高亮显示的股票 - -time.sleep(1.5) -st.rerun() -``` - -**改进点**: -1. ✅ 清理所有相关的 session state(历史记录页面标记、详情页面标记) -2. ✅ 设置 `show_monitor = True` 自动跳转到监测页面 -3. ✅ 传递股票代码用于高亮显示 -4. ✅ 增加延迟到 1.5 秒,让用户看到成功提示 - -#### 2. `monitor_manager.py` - 添加欢迎提示 - -```python -def display_monitor_manager(): - """显示监测管理主页面""" - - st.markdown("## 📊 股票监测管理") - st.markdown("---") - - # 检查是否有跳转提示 - if 'monitor_jump_highlight' in st.session_state: - symbol = st.session_state.monitor_jump_highlight - st.success(f"✅ {symbol} 已成功加入监测列表!您可以在下方查看。") - del st.session_state.monitor_jump_highlight - - # ... 其余代码 -``` - -**改进点**: -1. ✅ 在监测页面顶部显示欢迎提示 -2. ✅ 明确告知用户股票已成功添加 -3. ✅ 提示用户在下方查看 - -## 最终效果 - -### 用户操作流程 - -1. 用户在历史记录页面点击"➕ 监测"按钮 -2. 显示加入监测对话框,自动填充数据 -3. 用户确认或修改参数后点击"✅ 确认加入监测" -4. 显示成功提示和气球动画(1.5秒) -5. **自动跳转到监测页面** -6. **在监测页面顶部显示成功提示** -7. **新添加的股票显示在监测列表中** - -### 改进前后对比 - -| 项目 | 改进前 | 改进后 | -|------|--------|--------| -| 页面跳转 | ❌ 停留在历史记录页面 | ✅ 自动跳转到监测页面 | -| 用户体验 | ❌ 需要手动切换页面 | ✅ 自动展示结果 | -| 成功反馈 | ⚠️ 仅有气球动画 | ✅ 气球动画 + 明确提示 | -| 数据验证 | ⚠️ 用户无法立即确认 | ✅ 立即显示在列表中 | - -## 测试结论 - -### 功能状态 -- ✅ 数据提取功能:正常 -- ✅ 数据解析功能:正常(支持多种格式) -- ✅ 数据库写入:正常 -- ✅ 监测列表显示:正常 -- ✅ 页面跳转:已修复 -- ✅ 用户体验:已优化 - -### 兼容性 -- ✅ 支持进场区间多种格式(-, ~, 至, 元, ¥等) -- ✅ 支持止盈止损多种格式 -- ✅ 重复检测正常工作 -- ✅ 监测服务集成正常 - -## 建议 - -### 使用建议 -1. 加入监测前,建议确认数据准确性 -2. 确保监测服务处于运行状态 -3. 配置邮件参数以接收通知 - -### 未来优化方向 -1. 可以考虑在监测列表中高亮显示刚添加的股票(闪烁效果) -2. 可以添加批量导入功能(一次添加多个历史记录) -3. 可以添加智能建议功能(根据历史记录自动推荐待监测股票) - -## 附录 - -### 测试环境 -- 操作系统: Windows 10 -- Python 版本: 3.12 -- Streamlit 版本: 最新 -- 数据库: SQLite (stock_monitor.db) - -### 测试数据 -- 历史记录数: 多条 -- 监测股票数: 3只 -- 测试股票: 603667 - 五洲新春 - -### 相关文件 -- `app.py` - 主应用文件(已修改) -- `monitor_manager.py` - 监测管理模块(已修改) -- `monitor_db.py` - 监测数据库模块(无修改) -- `database.py` - 分析数据库模块(无修改) -