增强资金面mcp数据支撑
This commit is contained in:
@@ -1,122 +0,0 @@
|
||||
# DeepSeek Reasoner 模型输出不全问题修复说明
|
||||
|
||||
## 问题描述
|
||||
|
||||
使用 `deepseek-chat` 模型输出正常,但使用 `deepseek-reasoner` 模型进行技术面分析、基本面分析等各个分析时,输出文字不全。
|
||||
|
||||
## 问题原因
|
||||
|
||||
**deepseek-reasoner** 模型与 **deepseek-chat** 模型有重要区别:
|
||||
|
||||
1. **响应结构不同**:
|
||||
- `deepseek-chat`: 只返回 `content`(最终答案)
|
||||
- `deepseek-reasoner`: 返回 `reasoning_content`(推理过程)+ `content`(最终答案)
|
||||
|
||||
2. **Token 需求更大**:
|
||||
- reasoner 模型需要输出详细的推理过程,需要更多的 tokens
|
||||
- 原代码中 `max_tokens=2000` 对 reasoner 模型来说太小,导致输出被截断
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 1. 自动调整 max_tokens(已修复)
|
||||
|
||||
在 `deepseek_client.py` 的 `call_api` 方法中:
|
||||
|
||||
```python
|
||||
# 对于 reasoner 模型,自动增加 max_tokens
|
||||
if "reasoner" in model_to_use.lower() and max_tokens <= 2000:
|
||||
max_tokens = 8000 # reasoner 模型需要更多 tokens 来输出推理过程
|
||||
```
|
||||
|
||||
### 2. 正确处理 reasoner 响应(已修复)
|
||||
|
||||
```python
|
||||
# 处理 reasoner 模型的响应
|
||||
message = response.choices[0].message
|
||||
result = ""
|
||||
|
||||
# 检查是否有推理内容
|
||||
if hasattr(message, 'reasoning_content') and message.reasoning_content:
|
||||
result += f"【推理过程】\n{message.reasoning_content}\n\n"
|
||||
|
||||
# 添加最终内容
|
||||
if message.content:
|
||||
result += message.content
|
||||
```
|
||||
|
||||
### 3. 提高各分析模块的 max_tokens(已修复)
|
||||
|
||||
| 分析模块 | 原 max_tokens | 新 max_tokens |
|
||||
|---------|--------------|--------------|
|
||||
| 技术面分析 | 2000 | 8000 (自动) |
|
||||
| 基本面分析 | 2000 | 8000 (自动) |
|
||||
| 资金面分析 | 2000 | 8000 (自动) |
|
||||
| 风险管理分析 | 2000 | 8000 (自动) |
|
||||
| 市场情绪分析 | 2000 | 8000 (自动) |
|
||||
| 综合讨论 | 3000 | 6000 |
|
||||
| 最终决策 | 2000 | 4000 |
|
||||
| 团队讨论 | 3000 | 6000 |
|
||||
|
||||
## 修改的文件
|
||||
|
||||
1. **deepseek_client.py**
|
||||
- `call_api()` 方法:增加 reasoner 检测和 max_tokens 自动调整
|
||||
- `call_api()` 方法:增加 reasoning_content 处理
|
||||
- `comprehensive_discussion()` 方法:max_tokens 从 3000 增加到 6000
|
||||
- `final_decision()` 方法:max_tokens 从 2000 增加到 4000
|
||||
|
||||
2. **ai_agents.py**
|
||||
- `conduct_team_discussion()` 方法:max_tokens 从 3000 增加到 6000
|
||||
|
||||
## 使用建议
|
||||
|
||||
### 1. 模型选择
|
||||
|
||||
- **deepseek-chat**:
|
||||
- 适用场景:快速分析、常规查询
|
||||
- 优点:响应快,成本低
|
||||
- 缺点:推理能力相对较弱
|
||||
|
||||
- **deepseek-reasoner**:
|
||||
- 适用场景:复杂分析、需要深度推理的场景
|
||||
- 优点:推理能力强,分析更深入
|
||||
- 缺点:响应时间较长,token 消耗更多
|
||||
|
||||
### 2. 查看推理过程
|
||||
|
||||
使用 reasoner 模型时,响应中会包含 `【推理过程】` 部分,展示 AI 的思考过程,帮助你理解分析的逻辑。
|
||||
|
||||
### 3. Token 消耗
|
||||
|
||||
reasoner 模型的 token 消耗通常是 chat 模型的 2-4 倍,请注意 API 使用成本。
|
||||
|
||||
## 验证方法
|
||||
|
||||
1. 在应用中选择 "DeepSeek Reasoner (推理增强)" 模型
|
||||
2. 输入股票代码进行分析
|
||||
3. 检查各个分析报告是否完整输出
|
||||
4. 查看是否包含 `【推理过程】` 部分
|
||||
|
||||
## 预期效果
|
||||
|
||||
修复后,使用 deepseek-reasoner 模型应该能够:
|
||||
- ✅ 完整输出技术面分析报告
|
||||
- ✅ 完整输出基本面分析报告
|
||||
- ✅ 完整输出资金面分析报告
|
||||
- ✅ 完整输出风险管理报告
|
||||
- ✅ 完整输出市场情绪分析报告
|
||||
- ✅ 完整输出综合讨论结果
|
||||
- ✅ 完整输出最终投资决策
|
||||
- ✅ 显示推理过程(如果 API 支持)
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **API 兼容性**:确保使用的 DeepSeek API 版本支持 reasoner 模型
|
||||
2. **Token 限制**:如果仍然出现截断,可以进一步增加 max_tokens
|
||||
3. **成本控制**:reasoner 模型消耗更多 tokens,注意 API 配额
|
||||
4. **响应时间**:reasoner 模型需要更多时间进行推理,请耐心等待
|
||||
|
||||
## 更新日期
|
||||
|
||||
2025-10-03
|
||||
|
||||
-168
@@ -1,168 +0,0 @@
|
||||
# ⚡ 快速修复指南
|
||||
|
||||
## 部署错误:proxies参数问题
|
||||
|
||||
### 🔴 错误信息
|
||||
```
|
||||
分析过程中出现错误: Client.init() got an unexpected keyword argument 'proxies'
|
||||
```
|
||||
|
||||
### ✅ 快速解决(3步)
|
||||
|
||||
#### 步骤1:升级OpenAI库
|
||||
```bash
|
||||
pip install --upgrade openai
|
||||
```
|
||||
|
||||
#### 步骤2:重新安装依赖
|
||||
```bash
|
||||
pip install -r requirements.txt --upgrade
|
||||
```
|
||||
|
||||
#### 步骤3:重启应用
|
||||
```bash
|
||||
streamlit run app.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 其他常见问题快速修复
|
||||
|
||||
### 1. 模块未找到错误
|
||||
|
||||
**错误**:`ModuleNotFoundError: No module named 'xxx'`
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
pip install xxx
|
||||
# 或重新安装所有依赖
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 2. API密钥错误
|
||||
|
||||
**错误**:`API Key未配置`
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
# 创建.env文件
|
||||
cp .env.example .env
|
||||
|
||||
# 编辑.env文件,添加API密钥
|
||||
# DEEPSEEK_API_KEY=your_api_key_here
|
||||
```
|
||||
|
||||
### 3. 端口被占用
|
||||
|
||||
**错误**:`Address already in use`
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
# 使用其他端口
|
||||
streamlit run app.py --server.port 8502
|
||||
```
|
||||
|
||||
### 4. 数据库锁定错误
|
||||
|
||||
**错误**:`database is locked`
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
# 停止所有streamlit进程
|
||||
pkill -f streamlit
|
||||
|
||||
# 删除锁文件
|
||||
rm -f *.db-wal *.db-shm
|
||||
|
||||
# 重新启动
|
||||
streamlit run app.py
|
||||
```
|
||||
|
||||
### 5. 权限错误
|
||||
|
||||
**错误**:`Permission denied`
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
# 设置正确权限
|
||||
chmod 666 *.db
|
||||
chmod 755 .
|
||||
```
|
||||
|
||||
### 6. 中文乱码
|
||||
|
||||
**错误**:PDF中文显示为方框
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
# Windows: 确保系统安装了中文字体
|
||||
# Linux: 安装中文字体包
|
||||
sudo apt-get install fonts-wqy-zenhei
|
||||
```
|
||||
|
||||
### 7. 网络超时
|
||||
|
||||
**错误**:`Connection timeout`
|
||||
|
||||
**修复**:
|
||||
- 检查网络连接
|
||||
- 验证防火墙设置
|
||||
- 尝试使用代理
|
||||
|
||||
### 8. 内存不足
|
||||
|
||||
**错误**:`MemoryError`
|
||||
|
||||
**修复**:
|
||||
```bash
|
||||
# 限制数据加载大小
|
||||
# 或增加系统内存
|
||||
# 或使用更小的数据周期
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 完整重置流程
|
||||
|
||||
如果多个问题同时出现,可以尝试完整重置:
|
||||
|
||||
```bash
|
||||
# 1. 停止所有进程
|
||||
pkill -f streamlit
|
||||
|
||||
# 2. 清理虚拟环境
|
||||
rm -rf venv/
|
||||
|
||||
# 3. 创建新虚拟环境
|
||||
python -m venv venv
|
||||
source venv/bin/activate # Linux/Mac
|
||||
# 或
|
||||
.\venv\Scripts\Activate.ps1 # Windows
|
||||
|
||||
# 4. 升级pip
|
||||
pip install --upgrade pip
|
||||
|
||||
# 5. 重新安装依赖
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 6. 配置环境变量
|
||||
cp .env.example .env
|
||||
# 编辑.env文件添加API密钥
|
||||
|
||||
# 7. 重新启动
|
||||
streamlit run app.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 需要更多帮助?
|
||||
|
||||
1. 查看 `DEPLOYMENT_GUIDE.md` - 完整部署指南
|
||||
2. 查看 `BUGFIX.md` - 详细错误记录
|
||||
3. 查看 `README.md` - 使用说明
|
||||
4. 检查GitHub Issues
|
||||
|
||||
---
|
||||
|
||||
**提示**:大多数问题都可以通过重新安装依赖或重启应用解决!
|
||||
|
||||
+14
-5
@@ -39,18 +39,26 @@ class StockAnalysisAgents:
|
||||
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
|
||||
def fund_flow_analyst_agent(self, stock_info: Dict, indicators: Dict) -> Dict[str, Any]:
|
||||
def fund_flow_analyst_agent(self, stock_info: Dict, indicators: Dict, fund_flow_data: Dict = None) -> Dict[str, Any]:
|
||||
"""资金面分析智能体"""
|
||||
print("💰 资金面分析师正在分析中...")
|
||||
|
||||
# 如果有资金流向数据,显示数据来源
|
||||
if fund_flow_data and fund_flow_data.get('query_success'):
|
||||
print(" ✓ 已获取问财资金流向数据")
|
||||
else:
|
||||
print(" ⚠ 未获取到问财资金流向数据,将基于技术指标分析")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
analysis = self.deepseek_client.fund_flow_analysis(stock_info, indicators)
|
||||
analysis = self.deepseek_client.fund_flow_analysis(stock_info, indicators, fund_flow_data)
|
||||
|
||||
return {
|
||||
"agent_name": "资金面分析师",
|
||||
"agent_role": "负责资金流向分析、主力行为研究、市场情绪判断",
|
||||
"analysis": analysis,
|
||||
"focus_areas": ["资金流向", "主力动向", "市场情绪", "流动性"],
|
||||
"fund_flow_data": fund_flow_data, # 保存资金流向数据以供后续使用
|
||||
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
|
||||
@@ -145,7 +153,8 @@ class StockAnalysisAgents:
|
||||
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
|
||||
def run_multi_agent_analysis(self, stock_info: Dict, stock_data: Any, indicators: Dict, financial_data: Dict = None) -> Dict[str, Any]:
|
||||
def run_multi_agent_analysis(self, stock_info: Dict, stock_data: Any, indicators: Dict,
|
||||
financial_data: Dict = None, fund_flow_data: Dict = None) -> Dict[str, Any]:
|
||||
"""运行多智能体分析"""
|
||||
print("🚀 启动多智能体股票分析系统...")
|
||||
print("=" * 50)
|
||||
@@ -159,8 +168,8 @@ class StockAnalysisAgents:
|
||||
# 基本面分析
|
||||
agents_results["fundamental"] = self.fundamental_analyst_agent(stock_info, financial_data)
|
||||
|
||||
# 资金面分析
|
||||
agents_results["fund_flow"] = self.fund_flow_analyst_agent(stock_info, indicators)
|
||||
# 资金面分析(传入资金流向数据)
|
||||
agents_results["fund_flow"] = self.fund_flow_analyst_agent(stock_info, indicators, fund_flow_data)
|
||||
|
||||
# 风险管理分析
|
||||
agents_results["risk_management"] = self.risk_management_agent(stock_info, indicators)
|
||||
|
||||
@@ -510,22 +510,39 @@ def run_stock_analysis(symbol, period):
|
||||
financial_data = fetcher.get_financial_data(symbol)
|
||||
progress_bar.progress(35)
|
||||
|
||||
# 3. 初始化AI分析系统
|
||||
# 3. 获取资金流向数据(仅A股)
|
||||
fund_flow_data = None
|
||||
if fetcher._is_chinese_stock(symbol):
|
||||
status_text.text("💰 正在获取资金流向数据(问财)...")
|
||||
try:
|
||||
fund_flow_data = fetcher.get_fund_flow_data(symbol)
|
||||
if fund_flow_data and fund_flow_data.get('query_success'):
|
||||
st.info("✅ 成功获取问财资金流向数据")
|
||||
else:
|
||||
st.warning("⚠️ 未能获取问财资金流向数据,将基于技术指标进行资金面分析")
|
||||
except Exception as e:
|
||||
st.warning(f"⚠️ 获取资金流向数据时出错: {str(e)}")
|
||||
fund_flow_data = None
|
||||
else:
|
||||
st.info("ℹ️ 美股暂不支持问财资金流向数据")
|
||||
progress_bar.progress(40)
|
||||
|
||||
# 4. 初始化AI分析系统
|
||||
status_text.text("🤖 正在初始化AI分析系统...")
|
||||
# 使用选择的模型
|
||||
selected_model = st.session_state.get('selected_model', 'deepseek-chat')
|
||||
agents = StockAnalysisAgents(model=selected_model)
|
||||
progress_bar.progress(45)
|
||||
|
||||
# 4. 运行多智能体分析
|
||||
# 5. 运行多智能体分析(传入资金流向数据)
|
||||
status_text.text("🔍 AI分析师团队正在分析...")
|
||||
agents_results = agents.run_multi_agent_analysis(stock_info, stock_data, indicators, financial_data)
|
||||
agents_results = agents.run_multi_agent_analysis(stock_info, stock_data, indicators, financial_data, fund_flow_data)
|
||||
progress_bar.progress(70)
|
||||
|
||||
# 显示各分析师报告
|
||||
display_agents_analysis(agents_results)
|
||||
|
||||
# 5. 团队讨论
|
||||
# 6. 团队讨论
|
||||
status_text.text("🤝 分析团队正在讨论...")
|
||||
discussion_result = agents.conduct_team_discussion(agents_results, stock_info)
|
||||
progress_bar.progress(85)
|
||||
@@ -533,7 +550,7 @@ def run_stock_analysis(symbol, period):
|
||||
# 显示团队讨论
|
||||
display_team_discussion(discussion_result)
|
||||
|
||||
# 6. 最终决策
|
||||
# 7. 最终决策
|
||||
status_text.text("📋 正在制定最终投资决策...")
|
||||
final_decision = agents.make_final_decision(discussion_result, stock_info, indicators)
|
||||
progress_bar.progress(100)
|
||||
|
||||
+90
-19
@@ -206,39 +206,110 @@ class DeepSeekClient:
|
||||
|
||||
return self.call_api(messages)
|
||||
|
||||
def fund_flow_analysis(self, stock_info: Dict, indicators: Dict) -> str:
|
||||
def fund_flow_analysis(self, stock_info: Dict, indicators: Dict, fund_flow_data: Dict = None) -> str:
|
||||
"""资金面分析"""
|
||||
|
||||
# 构建资金流向数据部分 - 直接使用问财原始数据
|
||||
fund_flow_section = ""
|
||||
if fund_flow_data and fund_flow_data.get('query_success'):
|
||||
raw_data = fund_flow_data.get('raw_data', {})
|
||||
|
||||
if raw_data:
|
||||
fund_flow_section = "\n【问财资金流向完整数据(近20个交易日)】\n"
|
||||
fund_flow_section += f"数据来源:同花顺问财\n"
|
||||
fund_flow_section += f"股票名称:{fund_flow_data.get('stock_name', 'N/A')}\n"
|
||||
fund_flow_section += f"股票代码:{fund_flow_data.get('stock_code', 'N/A')}\n\n"
|
||||
|
||||
# 将所有问财返回的数据都列出来,让AI自己分析
|
||||
for key, value in raw_data.items():
|
||||
# 跳过股票代码和名称(已经显示过了)
|
||||
if key in ['股票代码', '股票简称', 'code', 'name']:
|
||||
continue
|
||||
fund_flow_section += f"- {key}: {value}\n"
|
||||
|
||||
fund_flow_section += "\n以上是问财返回的所有资金流向相关数据,请仔细分析这些数据的含义和相互关系。\n"
|
||||
else:
|
||||
fund_flow_section = "\n【资金流向数据】\n注意:问财返回数据为空。\n"
|
||||
else:
|
||||
fund_flow_section = "\n【资金流向数据】\n注意:未能获取到问财资金流向数据,将基于成交量进行分析。\n"
|
||||
|
||||
prompt = f"""
|
||||
你是一名资深的资金面分析师。请基于以下信息进行专业的资金面分析:
|
||||
你是一名资深的资金面分析师,擅长从资金流向数据中洞察主力行为和市场趋势。
|
||||
|
||||
股票信息:
|
||||
- 股票代码:{stock_info.get('symbol', 'N/A')}
|
||||
- 股票名称:{stock_info.get('name', 'N/A')}
|
||||
- 当前价格:{stock_info.get('current_price', 'N/A')}
|
||||
- 市值:{stock_info.get('market_cap', 'N/A')}
|
||||
【基本信息】
|
||||
股票代码:{stock_info.get('symbol', 'N/A')}
|
||||
股票名称:{stock_info.get('name', 'N/A')}
|
||||
当前价格:{stock_info.get('current_price', 'N/A')}
|
||||
市值:{stock_info.get('market_cap', 'N/A')}
|
||||
|
||||
资金相关指标:
|
||||
【技术指标】
|
||||
- 量比:{indicators.get('volume_ratio', 'N/A')}
|
||||
- 当前成交量与5日均量比:{indicators.get('volume_ratio', 'N/A')}
|
||||
{fund_flow_section}
|
||||
|
||||
请从以下角度进行分析:
|
||||
1. 成交量变化分析
|
||||
2. 资金流入流出趋势
|
||||
3. 大单、中单、小单资金行为
|
||||
4. 主力资金动向分析
|
||||
5. 市场情绪和资金偏好
|
||||
6. 流动性分析
|
||||
7. 资金面对股价的支撑或压力
|
||||
【分析要求】
|
||||
|
||||
请结合当前市场资金环境,给出专业的资金面分析报告。
|
||||
请你**仔细阅读上述问财返回的所有数据字段**,自己识别和提取关键信息,然后从以下角度进行深入分析:
|
||||
|
||||
1. **数据解读与提取**(重要!)
|
||||
- 识别哪些字段是资金流向相关数据(如:区间资金流向、主力资金、大单、中单、小单等)
|
||||
- 提取关键数值(注意单位:元、亿元、百分比等)
|
||||
- 计算主力资金占比、不同类型资金的比例关系
|
||||
- 识别涨跌幅、换手率等关联指标
|
||||
|
||||
2. **资金流向趋势分析**
|
||||
- 近20日总资金流向趋势(净流入/净流出,金额多少)
|
||||
- 资金流向与股价涨跌的关系(是否同向)
|
||||
- 资金流向的强度评估
|
||||
|
||||
3. **主力资金行为分析**(核心重点)
|
||||
- 主力资金流向方向和规模
|
||||
- 主力资金占比情况(控盘程度)
|
||||
- 主力操作意图研判(吸筹/派发/洗盘/拉升)
|
||||
- 主力与散户资金的博弈态势
|
||||
- 大单、中单、小单的分布特征
|
||||
|
||||
4. **资金结构分析**
|
||||
- 不同类型资金的流向(超大单、大单、中单、小单)
|
||||
- 机构资金与散户资金的对比
|
||||
- 资金集中度分析
|
||||
|
||||
5. **量价关系分析**
|
||||
- 资金流向与股价涨跌的配合
|
||||
- 量价背离情况识别
|
||||
- 成交活跃度评估
|
||||
|
||||
6. **资金面与技术面结合**
|
||||
- 资金流向对关键技术位的影响
|
||||
- 资金推动与股价趋势的一致性
|
||||
- 资金面对未来走势的指示作用
|
||||
|
||||
7. **风险与机会评估**
|
||||
- 资金面的风险信号(如主力出逃、资金外流)
|
||||
- 资金面的机会信号(如主力建仓、资金集中流入)
|
||||
- 未来资金流向预判
|
||||
|
||||
8. **投资建议**
|
||||
- 基于资金面的明确操作建议
|
||||
- 买入/持有/卖出的判断依据
|
||||
- 仓位管理建议
|
||||
|
||||
【分析原则】
|
||||
- 主力资金持续流入 + 股价上涨 → 强势信号,主力看好
|
||||
- 主力资金流出 + 股价上涨 → 警惕信号,可能是散户接盘
|
||||
- 主力资金流入 + 股价下跌 → 可能是主力低位吸筹
|
||||
- 主力资金流出 + 股价下跌 → 弱势信号,主力看空
|
||||
- 注意区分短期波动与趋势性变化
|
||||
|
||||
请给出专业、详细、有深度的资金面分析报告。记住:要基于问财数据的实际内容进行分析,而不是假设!
|
||||
"""
|
||||
|
||||
messages = [
|
||||
{"role": "system", "content": "你是一名经验丰富的资金面分析师,擅长市场资金流向和主力行为分析。"},
|
||||
{"role": "system", "content": "你是一名经验丰富的资金面分析师,擅长市场资金流向和主力行为分析,能够深入解读资金数据背后的投资逻辑。"},
|
||||
{"role": "user", "content": prompt}
|
||||
]
|
||||
|
||||
return self.call_api(messages)
|
||||
return self.call_api(messages, max_tokens=3000)
|
||||
|
||||
def comprehensive_discussion(self, technical_report: str, fundamental_report: str,
|
||||
fund_flow_report: str, stock_info: Dict) -> str:
|
||||
|
||||
+2
-1
@@ -11,4 +11,5 @@ pytz
|
||||
ta>=0.10.2
|
||||
reportlab>=4.0.0
|
||||
peewee>=3.17.0
|
||||
schedule>=1.2.0
|
||||
schedule>=1.2.0
|
||||
pywencai>=0.7.0
|
||||
+161
@@ -6,6 +6,7 @@ import ta
|
||||
from datetime import datetime, timedelta
|
||||
import requests
|
||||
import json
|
||||
import pywencai
|
||||
|
||||
class StockDataFetcher:
|
||||
"""股票数据获取类"""
|
||||
@@ -545,3 +546,163 @@ class StockDataFetcher:
|
||||
except Exception as e:
|
||||
print(f"获取美股财务数据失败: {e}")
|
||||
return financial_data
|
||||
|
||||
def get_fund_flow_data(self, symbol):
|
||||
"""使用问财获取资金流向数据
|
||||
|
||||
Args:
|
||||
symbol: 股票代码(6位数字)
|
||||
|
||||
Returns:
|
||||
dict: 包含问财原始数据的字典
|
||||
"""
|
||||
fund_flow_data = {
|
||||
"symbol": symbol,
|
||||
"query_success": False,
|
||||
"raw_data": None, # 存储原始数据
|
||||
"data_source": "pywencai"
|
||||
}
|
||||
|
||||
# 只支持中国股票
|
||||
if not self._is_chinese_stock(symbol):
|
||||
fund_flow_data["error"] = "问财数据仅支持中国A股股票"
|
||||
return fund_flow_data
|
||||
|
||||
try:
|
||||
# 构建问句,查询近20个交易日的资金流向数据
|
||||
query = f"{symbol}近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅"
|
||||
|
||||
print(f"正在使用问财查询资金流向数据: {query}")
|
||||
|
||||
# 使用pywencai查询
|
||||
result = pywencai.get(query=query, loop=True)
|
||||
|
||||
# 调试:打印result的类型
|
||||
print(f"问财返回的数据类型: {type(result)}")
|
||||
|
||||
# 处理不同类型的返回结果,统一转换为DataFrame
|
||||
df_result = None
|
||||
|
||||
if result is None:
|
||||
fund_flow_data["error"] = "问财查询返回None"
|
||||
print(f"问财查询返回None")
|
||||
elif isinstance(result, dict):
|
||||
# 如果返回的是字典,转换为DataFrame
|
||||
print(f"问财返回字典,转换为DataFrame")
|
||||
try:
|
||||
df_result = pd.DataFrame([result])
|
||||
print(f"成功转换,形状: {df_result.shape}")
|
||||
except Exception as e:
|
||||
fund_flow_data["error"] = f"无法转换为DataFrame: {str(e)}"
|
||||
print(f"转换失败: {e}")
|
||||
elif isinstance(result, pd.DataFrame):
|
||||
# 如果已经是DataFrame
|
||||
df_result = result
|
||||
print(f"问财返回DataFrame,形状: {df_result.shape}")
|
||||
else:
|
||||
fund_flow_data["error"] = f"问财返回了未知类型: {type(result)}"
|
||||
print(f"问财返回未知类型: {type(result)}")
|
||||
|
||||
# 如果成功获取到DataFrame
|
||||
if df_result is not None and not df_result.empty and len(df_result) > 0:
|
||||
# 打印列名以便调试
|
||||
print(f"问财返回的列名: {df_result.columns.tolist()}")
|
||||
|
||||
# 检查是否是嵌套结构(tableV1字段包含实际数据)
|
||||
if 'tableV1' in df_result.columns and len(df_result.columns) == 1:
|
||||
print(f"检测到嵌套结构,提取tableV1中的数据")
|
||||
table_v1_data = df_result.iloc[0]['tableV1']
|
||||
|
||||
# 检查tableV1的类型
|
||||
print(f"tableV1的类型: {type(table_v1_data)}")
|
||||
|
||||
if isinstance(table_v1_data, pd.DataFrame):
|
||||
# 如果是DataFrame,直接使用
|
||||
df_result = table_v1_data
|
||||
print(f"提取后的DataFrame形状: {df_result.shape}")
|
||||
print(f"提取后的列名: {df_result.columns.tolist()}")
|
||||
elif isinstance(table_v1_data, list) and len(table_v1_data) > 0:
|
||||
# 如果是列表,转换为DataFrame
|
||||
df_result = pd.DataFrame(table_v1_data)
|
||||
print(f"从列表转换的DataFrame形状: {df_result.shape}")
|
||||
print(f"从列表转换的列名: {df_result.columns.tolist()}")
|
||||
else:
|
||||
fund_flow_data["error"] = f"tableV1数据类型不支持: {type(table_v1_data)}"
|
||||
print(f"tableV1数据类型不支持: {type(table_v1_data)}")
|
||||
return fund_flow_data
|
||||
|
||||
# 再次检查是否有数据
|
||||
if df_result is None or df_result.empty or len(df_result) == 0:
|
||||
fund_flow_data["error"] = "提取后的数据为空"
|
||||
print(f"提取后的数据为空")
|
||||
return fund_flow_data
|
||||
|
||||
# 获取第一条记录
|
||||
data = df_result.iloc[0]
|
||||
|
||||
# 标记查询成功
|
||||
fund_flow_data["query_success"] = True
|
||||
fund_flow_data["stock_name"] = str(data.get('股票简称', data.get('name', 'N/A')))
|
||||
fund_flow_data["stock_code"] = str(data.get('股票代码', data.get('code', symbol)))
|
||||
|
||||
# 将所有数据转换为字典格式(方便AI阅读)
|
||||
raw_data_dict = {}
|
||||
for col in df_result.columns:
|
||||
value = data.get(col)
|
||||
# 转换为易读的格式
|
||||
try:
|
||||
if value is None or (isinstance(value, float) and pd.isna(value)):
|
||||
raw_data_dict[col] = "N/A"
|
||||
elif isinstance(value, (int, float)):
|
||||
# 如果是大数字(可能是金额),转换为亿元
|
||||
if abs(value) > 100000000:
|
||||
raw_data_dict[col] = f"{value} ({value/100000000:.2f}亿元)"
|
||||
else:
|
||||
raw_data_dict[col] = value
|
||||
elif isinstance(value, pd.DataFrame):
|
||||
# 如果值本身是DataFrame,跳过
|
||||
continue
|
||||
else:
|
||||
raw_data_dict[col] = str(value)
|
||||
except Exception as e:
|
||||
print(f"处理字段 {col} 时出错: {e}")
|
||||
raw_data_dict[col] = str(value)
|
||||
|
||||
fund_flow_data["raw_data"] = raw_data_dict
|
||||
fund_flow_data["columns"] = df_result.columns.tolist()
|
||||
|
||||
print(f"成功获取 {symbol} 的问财数据,共 {len(raw_data_dict)} 个字段")
|
||||
else:
|
||||
fund_flow_data["error"] = "问财查询返回空数据"
|
||||
print(f"问财查询返回空数据")
|
||||
|
||||
except Exception as e:
|
||||
fund_flow_data["error"] = f"获取资金流向数据失败: {str(e)}"
|
||||
print(f"获取资金流向数据异常: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
return fund_flow_data
|
||||
|
||||
def _safe_convert(self, value):
|
||||
"""安全地转换数值"""
|
||||
if value is None or value == '' or (isinstance(value, float) and np.isnan(value)):
|
||||
return 'N/A'
|
||||
try:
|
||||
if isinstance(value, str):
|
||||
# 移除百分号和逗号
|
||||
value = value.replace('%', '').replace(',', '')
|
||||
return float(value)
|
||||
return value
|
||||
except:
|
||||
return value
|
||||
|
||||
def _calculate_main_fund_ratio(self, main_fund, total_fund):
|
||||
"""计算主力资金占比"""
|
||||
try:
|
||||
if main_fund != 'N/A' and total_fund != 'N/A' and total_fund != 0:
|
||||
ratio = (main_fund / total_fund) * 100
|
||||
return f"{ratio:.2f}%"
|
||||
except:
|
||||
pass
|
||||
return 'N/A'
|
||||
|
||||
+302
@@ -0,0 +1,302 @@
|
||||
# 资金流向功能集成说明
|
||||
|
||||
## 概述
|
||||
|
||||
本次更新成功引入了 `pywencai`(问财)库,为资金面分析师提供真实的资金流向数据支撑,包括近20个交易日的区间资金流向、区间主力资金流向和区间涨跌幅数据。
|
||||
|
||||
## 功能特点
|
||||
|
||||
### 1. 数据来源
|
||||
- **数据源**:同花顺问财(pywencai)
|
||||
- **数据范围**:近20个交易日
|
||||
- **支持市场**:仅支持中国A股(美股暂不支持)
|
||||
|
||||
### 2. 获取的数据指标
|
||||
|
||||
问财资金流向数据包括:
|
||||
|
||||
- **区间资金流向**
|
||||
- 总资金流向(元)
|
||||
- 总资金流向(亿元)
|
||||
|
||||
- **区间主力资金流向**
|
||||
- 主力资金流向(元)
|
||||
- 主力资金流向(亿元)
|
||||
- 主力资金占比(%)
|
||||
|
||||
- **区间涨跌幅**
|
||||
- 近20日涨跌幅(%)
|
||||
|
||||
- **额外资金数据**(根据问财返回的数据动态提取)
|
||||
- 可能包含大单、中单、小单资金流向
|
||||
- 其他资金相关指标
|
||||
|
||||
## 代码改动说明
|
||||
|
||||
### 1. requirements.txt
|
||||
添加了 `pywencai>=0.7.0` 依赖。
|
||||
|
||||
### 2. stock_data.py
|
||||
新增方法:
|
||||
- `get_fund_flow_data(symbol)`: 使用问财获取资金流向数据
|
||||
- `_safe_convert(value)`: 安全地转换数值
|
||||
- `_calculate_main_fund_ratio(main_fund, total_fund)`: 计算主力资金占比
|
||||
|
||||
### 3. deepseek_client.py
|
||||
修改了 `fund_flow_analysis` 方法:
|
||||
- 新增 `fund_flow_data` 参数
|
||||
- 将问财数据整合到分析提示词中
|
||||
- 增强了资金面分析的维度和深度
|
||||
|
||||
分析维度包括:
|
||||
1. 资金流向趋势分析
|
||||
2. 主力资金行为分析
|
||||
3. 成交量变化分析
|
||||
4. 资金面与技术面结合
|
||||
5. 市场情绪和资金偏好
|
||||
6. 资金面风险与机会
|
||||
7. 投资建议
|
||||
|
||||
### 4. ai_agents.py
|
||||
修改了 `fund_flow_analyst_agent` 方法:
|
||||
- 新增 `fund_flow_data` 参数
|
||||
- 在分析结果中保存资金流向数据
|
||||
- 添加数据来源提示信息
|
||||
|
||||
修改了 `run_multi_agent_analysis` 方法:
|
||||
- 新增 `fund_flow_data` 参数
|
||||
- 将资金流向数据传递给资金面分析师
|
||||
|
||||
### 5. app.py
|
||||
在 `run_stock_analysis` 函数中:
|
||||
- 添加获取资金流向数据的步骤
|
||||
- 仅对A股股票获取问财数据
|
||||
- 显示数据获取状态提示
|
||||
- 将数据传递给AI分析系统
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 安装依赖
|
||||
|
||||
```bash
|
||||
pip install pywencai>=0.7.0
|
||||
```
|
||||
|
||||
或者重新安装所有依赖:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 运行系统
|
||||
|
||||
```bash
|
||||
streamlit run app.py
|
||||
```
|
||||
|
||||
### 分析A股股票
|
||||
|
||||
1. 在输入框中输入A股代码(如 `600519`、`000001`)
|
||||
2. 点击"开始分析"按钮
|
||||
3. 系统会自动:
|
||||
- 获取股票基本信息
|
||||
- 获取技术指标数据
|
||||
- 获取财务数据
|
||||
- **获取问财资金流向数据**(新增)
|
||||
- 调用AI分析师团队进行分析
|
||||
4. 在"资金面分析师"标签页查看基于真实资金流向数据的分析报告
|
||||
|
||||
### 分析美股
|
||||
|
||||
- 美股暂不支持问财资金流向数据
|
||||
- 资金面分析师将基于技术指标进行分析
|
||||
- 系统会显示"ℹ️ 美股暂不支持问财资金流向数据"提示
|
||||
|
||||
## 数据解读
|
||||
|
||||
### 主力资金行为判断
|
||||
|
||||
资金面分析师会结合以下情况进行分析:
|
||||
|
||||
1. **主力资金持续流入 + 股价上涨**
|
||||
- 说明主力看好后市
|
||||
- 资金推动股价上涨
|
||||
- 是较强的买入信号
|
||||
|
||||
2. **主力资金流出 + 股价上涨**
|
||||
- 需警惕散户接盘风险
|
||||
- 可能是主力出货
|
||||
- 上涨动力不足
|
||||
|
||||
3. **主力资金流入 + 股价下跌**
|
||||
- 可能是主力在低位吸筹
|
||||
- 或是市场整体弱势
|
||||
- 需结合其他指标判断
|
||||
|
||||
4. **主力资金流出 + 股价下跌**
|
||||
- 主力看空
|
||||
- 卖出压力大
|
||||
- 应回避或止损
|
||||
|
||||
### 主力资金占比
|
||||
|
||||
- **占比 > 70%**: 主力高度控盘
|
||||
- **占比 50-70%**: 主力参与度较高
|
||||
- **占比 30-50%**: 主力参与适中
|
||||
- **占比 < 30%**: 散户为主导
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **网络要求**
|
||||
- pywencai 需要访问同花顺问财网站
|
||||
- 确保网络连接正常
|
||||
- 可能受到访问频率限制
|
||||
|
||||
2. **数据时效性**
|
||||
- 资金流向数据为T-1数据(前一交易日)
|
||||
- 非实时数据
|
||||
|
||||
3. **异常处理**
|
||||
- 如果问财数据获取失败,系统会自动降级
|
||||
- 资金面分析师将基于技术指标进行分析
|
||||
- 不会影响其他分析师的正常工作
|
||||
|
||||
4. **仅支持A股**
|
||||
- 问财数据仅支持中国A股
|
||||
- 美股、港股暂不支持
|
||||
|
||||
## 示例查询
|
||||
|
||||
问财使用的查询语句格式:
|
||||
```
|
||||
{股票代码}近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅
|
||||
```
|
||||
|
||||
例如:
|
||||
- `600519近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅`
|
||||
- `000001近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅`
|
||||
|
||||
## 效果展示
|
||||
|
||||
### 分析流程提示
|
||||
```
|
||||
📈 正在获取股票数据...
|
||||
📊 正在获取财务数据...
|
||||
💰 正在获取资金流向数据(问财)...
|
||||
✅ 成功获取问财资金流向数据
|
||||
🤖 正在初始化AI分析系统...
|
||||
🔍 AI分析师团队正在分析...
|
||||
💰 资金面分析师正在分析中...
|
||||
✓ 已获取问财资金流向数据
|
||||
```
|
||||
|
||||
### 资金面分析报告示例
|
||||
资金面分析师将基于以下数据进行分析:
|
||||
|
||||
```
|
||||
【问财资金流向数据(近20个交易日)】
|
||||
区间资金流向:
|
||||
- 总资金流向:12345678900 元
|
||||
- 总资金流向(亿元):123.46 亿元
|
||||
|
||||
主力资金流向:
|
||||
- 主力资金流向:9876543210 元
|
||||
- 主力资金流向(亿元):98.77 亿元
|
||||
- 主力资金占比:80.00%
|
||||
|
||||
区间涨跌幅:
|
||||
- 近20日涨跌幅:15.23%
|
||||
```
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### 1. 提示 "'dict' object has no attribute 'empty'"
|
||||
|
||||
**原因**:pywencai.get() 返回了字典而不是DataFrame
|
||||
|
||||
**解决方案**:已在最新版本中修复,代码会自动检测返回类型并处理
|
||||
|
||||
#### 2. 提示 "问财查询返回None"
|
||||
|
||||
**原因**:
|
||||
- 网络连接问题
|
||||
- 问财服务暂时不可用
|
||||
- 查询语句不符合问财格式
|
||||
|
||||
**解决方案**:
|
||||
- 检查网络连接
|
||||
- 稍后重试
|
||||
- 查看控制台输出的详细错误信息
|
||||
|
||||
#### 3. 提示 "未能获取问财资金流向数据"
|
||||
|
||||
**原因**:
|
||||
- 问财API访问限制
|
||||
- 股票代码不存在或停牌
|
||||
- 数据暂时不可用
|
||||
|
||||
**解决方案**:
|
||||
- 系统会自动降级到技术指标分析
|
||||
- 不影响其他分析功能
|
||||
- 可以尝试其他股票代码
|
||||
|
||||
### 测试脚本
|
||||
|
||||
使用测试脚本快速验证功能:
|
||||
|
||||
```bash
|
||||
python test_fund_flow.py
|
||||
```
|
||||
|
||||
测试脚本会:
|
||||
1. 测试多只股票的资金流向数据获取
|
||||
2. 显示详细的调试信息
|
||||
3. 打印完整的返回数据
|
||||
|
||||
### 调试信息
|
||||
|
||||
运行时会输出以下调试信息:
|
||||
|
||||
```
|
||||
正在使用问财查询资金流向数据: 002241近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅
|
||||
问财返回的数据类型: <class 'dict'> 或 <class 'pandas.DataFrame'>
|
||||
问财返回DataFrame,形状: (1, 10)
|
||||
问财返回的列名: ['股票代码', '股票简称', '区间资金流向', ...]
|
||||
找到的列名 - 资金流向: 区间资金流向, 主力资金: 区间主力资金流向, 涨跌幅: 区间涨跌幅
|
||||
成功获取 002241 的资金流向数据
|
||||
```
|
||||
|
||||
### 版本兼容性
|
||||
|
||||
- **pywencai >= 0.7.0**:支持最新的问财API
|
||||
- **pandas >= 2.0.3**:数据处理
|
||||
- **Python >= 3.8**:推荐使用Python 3.10+
|
||||
|
||||
## 技术支持
|
||||
|
||||
如遇到问题,可:
|
||||
|
||||
1. **查看日志**:运行时会在控制台输出详细的调试信息
|
||||
2. **运行测试脚本**:使用 `test_fund_flow.py` 独立测试
|
||||
3. **检查依赖**:确保 pywencai 版本正确
|
||||
4. **网络检查**:确保可以访问同花顺问财
|
||||
5. **股票代码**:确认是6位数字的A股代码
|
||||
|
||||
## 未来优化方向
|
||||
|
||||
1. 支持更多时间周期的资金流向数据
|
||||
2. 增加资金流向的可视化图表
|
||||
3. 支持资金流向的历史趋势分析
|
||||
4. 尝试集成其他数据源(如东方财富)
|
||||
5. 探索美股资金流向数据来源
|
||||
|
||||
## 更新日期
|
||||
|
||||
2025年10月6日
|
||||
|
||||
## 作者
|
||||
|
||||
AI股票分析系统开发团队
|
||||
|
||||
+316
@@ -0,0 +1,316 @@
|
||||
# 资金流向功能说明 v2.0
|
||||
|
||||
## 🎯 设计理念(重大改进)
|
||||
|
||||
### v2.0 的核心改变
|
||||
|
||||
**从"手动提取"到"AI智能分析"**
|
||||
|
||||
- ❌ **旧方法**:代码硬编码提取特定字段(区间资金流向、主力资金流向等)
|
||||
- ✅ **新方法**:将问财返回的**所有原始数据**直接喂给AI,让AI自己识别、提取和分析
|
||||
|
||||
### 为什么这样更好?
|
||||
|
||||
1. **更简单**:不需要手动匹配列名,代码更简洁
|
||||
2. **更灵活**:问财字段变化时不需要修改代码
|
||||
3. **更智能**:AI可以发现我们没想到的数据关联
|
||||
4. **更全面**:不会遗漏任何有价值的数据
|
||||
5. **更强大**:AI能理解数据的深层含义和相互关系
|
||||
|
||||
## 📊 工作流程
|
||||
|
||||
```
|
||||
问财查询 → 获取所有原始数据 → 格式化为易读文本 → 喂给AI分析师 → 生成专业报告
|
||||
```
|
||||
|
||||
### 详细流程
|
||||
|
||||
1. **查询问财**
|
||||
- 问句:`{股票代码}近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅`
|
||||
- 返回:DataFrame 或 字典
|
||||
|
||||
2. **数据处理**(`stock_data.py`)
|
||||
- 统一转换为 DataFrame
|
||||
- 提取所有字段和数值
|
||||
- 大数字自动转换为亿元显示
|
||||
- 保存为易读的字典格式
|
||||
|
||||
3. **数据传递**(`ai_agents.py`)
|
||||
- 将原始数据传递给资金面分析师
|
||||
- 不做任何过滤或筛选
|
||||
|
||||
4. **AI分析**(`deepseek_client.py`)
|
||||
- AI收到所有问财数据
|
||||
- AI自己识别关键字段
|
||||
- AI自己提取数值
|
||||
- AI自己计算比例关系
|
||||
- AI基于实际数据生成分析报告
|
||||
|
||||
## 🔧 代码改动说明
|
||||
|
||||
### 1. stock_data.py - 简化数据获取
|
||||
|
||||
```python
|
||||
def get_fund_flow_data(self, symbol):
|
||||
"""获取问财数据 - 返回所有原始数据"""
|
||||
|
||||
# 查询问财
|
||||
result = pywencai.get(query=query, loop=True)
|
||||
|
||||
# 转换为DataFrame
|
||||
df_result = pd.DataFrame([result]) if isinstance(result, dict) else result
|
||||
|
||||
# 提取所有数据
|
||||
raw_data_dict = {}
|
||||
for col in df_result.columns:
|
||||
value = data.get(col)
|
||||
# 大数字转换为亿元便于阅读
|
||||
if abs(value) > 100000000:
|
||||
raw_data_dict[col] = f"{value} ({value/100000000:.2f}亿元)"
|
||||
else:
|
||||
raw_data_dict[col] = value
|
||||
|
||||
# 返回所有原始数据
|
||||
return {
|
||||
"query_success": True,
|
||||
"raw_data": raw_data_dict,
|
||||
"columns": df_result.columns.tolist()
|
||||
}
|
||||
```
|
||||
|
||||
**关键点**:
|
||||
- ✅ 不手动提取特定字段
|
||||
- ✅ 保留所有问财返回的数据
|
||||
- ✅ 只做格式化,不做数据筛选
|
||||
|
||||
### 2. deepseek_client.py - AI智能分析
|
||||
|
||||
```python
|
||||
def fund_flow_analysis(self, stock_info, indicators, fund_flow_data):
|
||||
"""资金面分析 - 让AI自己分析所有数据"""
|
||||
|
||||
# 构建包含所有原始数据的提示词
|
||||
raw_data = fund_flow_data.get('raw_data', {})
|
||||
|
||||
fund_flow_section = "\n【问财资金流向完整数据】\n"
|
||||
for key, value in raw_data.items():
|
||||
fund_flow_section += f"- {key}: {value}\n"
|
||||
|
||||
prompt = f"""
|
||||
你是资金面分析师。
|
||||
|
||||
以下是问财返回的所有数据:
|
||||
{fund_flow_section}
|
||||
|
||||
请你:
|
||||
1. 自己识别哪些是资金流向字段
|
||||
2. 自己提取关键数值
|
||||
3. 自己计算占比和关系
|
||||
4. 基于实际数据进行分析
|
||||
|
||||
给出专业的资金面分析报告。
|
||||
"""
|
||||
```
|
||||
|
||||
**关键点**:
|
||||
- ✅ 将所有数据都给AI
|
||||
- ✅ 明确要求AI自己提取和分析
|
||||
- ✅ 强调基于实际数据而非假设
|
||||
|
||||
## 💡 使用示例
|
||||
|
||||
### 问财返回的数据示例
|
||||
|
||||
```
|
||||
【问财资金流向完整数据(近20个交易日)】
|
||||
数据来源:同花顺问财
|
||||
股票名称:歌尔股份
|
||||
股票代码:002241
|
||||
|
||||
- 近20个交易日区间资金流向[20240101]: 12345678900 (123.46亿元)
|
||||
- 近20个交易日区间主力资金流向[20240101]: 9876543210 (98.77亿元)
|
||||
- 近20个交易日区间涨跌幅[20240101]: 15.23
|
||||
- 近20个交易日区间大单净流入[20240101]: 5000000000 (50.00亿元)
|
||||
- 近20个交易日区间中单净流入[20240101]: 2000000000 (20.00亿元)
|
||||
- 近20个交易日区间小单净流入[20240101]: -3000000000 (-30.00亿元)
|
||||
- 近20个交易日区间换手率[20240101]: 45.6
|
||||
...(所有其他字段)
|
||||
|
||||
以上是问财返回的所有资金流向相关数据,请仔细分析这些数据的含义和相互关系。
|
||||
```
|
||||
|
||||
### AI分析师的工作
|
||||
|
||||
AI会自动:
|
||||
1. 识别出"区间资金流向"、"主力资金流向"等关键字段
|
||||
2. 提取数值并注意单位(亿元)
|
||||
3. 计算主力资金占比 = 98.77 / 123.46 = 80%
|
||||
4. 分析大单、中单、小单的分布
|
||||
5. 结合涨跌幅判断资金效率
|
||||
6. 给出主力行为判断(吸筹/派发/洗盘等)
|
||||
|
||||
## ✅ 优势总结
|
||||
|
||||
### 技术优势
|
||||
|
||||
1. **代码简洁**
|
||||
- 数据获取逻辑从 ~200行 减少到 ~100行
|
||||
- 不需要维护字段映射表
|
||||
- 不需要处理列名变化
|
||||
|
||||
2. **容错性强**
|
||||
- 问财字段名变化?没关系,AI会自己找
|
||||
- 新增字段?自动包含在分析中
|
||||
- 缺失字段?AI会注意到并说明
|
||||
|
||||
3. **扩展性好**
|
||||
- 要分析更多维度?直接改查询语句
|
||||
- 要调整分析角度?修改AI提示词
|
||||
- 要支持新数据源?只需统一格式
|
||||
|
||||
### 分析优势
|
||||
|
||||
1. **更全面**
|
||||
- 不会遗漏任何字段
|
||||
- AI能发现数据间的隐藏关联
|
||||
- 可以分析我们没想到的角度
|
||||
|
||||
2. **更智能**
|
||||
- AI理解数据的业务含义
|
||||
- 自动识别异常值
|
||||
- 能做出逻辑推理
|
||||
|
||||
3. **更灵活**
|
||||
- 不同股票可能有不同字段,AI都能处理
|
||||
- 可以根据实际数据调整分析重点
|
||||
- 能适应各种数据格式
|
||||
|
||||
## 🧪 测试方法
|
||||
|
||||
### 运行测试脚本
|
||||
|
||||
```bash
|
||||
python test_fund_flow.py
|
||||
```
|
||||
|
||||
### 预期输出
|
||||
|
||||
```
|
||||
正在使用问财查询资金流向数据: 002241近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅
|
||||
问财返回的数据类型: <class 'dict'>
|
||||
问财返回字典,转换为DataFrame
|
||||
成功转换,形状: (1, 25)
|
||||
问财返回的列名: ['股票代码', '股票简称', '近20个交易日区间资金流向[20240101]', ...]
|
||||
成功获取 002241 的问财数据,共 23 个字段
|
||||
|
||||
✅ 成功获取问财数据
|
||||
|
||||
【基本信息】
|
||||
股票简称: 歌尔股份
|
||||
股票代码: 002241
|
||||
数据字段数量: 23 个
|
||||
|
||||
【问财返回的所有字段】
|
||||
1. 股票代码
|
||||
2. 股票简称
|
||||
3. 近20个交易日区间资金流向[20240101]
|
||||
4. 近20个交易日区间主力资金流向[20240101]
|
||||
5. 近20个交易日区间涨跌幅[20240101]
|
||||
...
|
||||
|
||||
【问财原始数据】
|
||||
近20个交易日区间资金流向[20240101]: 12345678900 (123.46亿元)
|
||||
近20个交易日区间主力资金流向[20240101]: 9876543210 (98.77亿元)
|
||||
近20个交易日区间涨跌幅[20240101]: 15.23
|
||||
...
|
||||
```
|
||||
|
||||
## 🎯 最佳实践
|
||||
|
||||
### 查询语句优化
|
||||
|
||||
可以根据需要调整问财查询语句,获取更多数据:
|
||||
|
||||
```python
|
||||
# 基础查询
|
||||
query = f"{symbol}近20个交易日区间资金流向、区间主力资金流向、区间涨跌幅"
|
||||
|
||||
# 扩展查询(获取更多维度)
|
||||
query = f"{symbol}近20个交易日区间资金流向、区间主力资金流向、区间大单净流入、区间中单净流入、区间小单净流入、区间换手率、区间涨跌幅"
|
||||
```
|
||||
|
||||
AI会自动分析所有返回的字段!
|
||||
|
||||
### AI提示词优化
|
||||
|
||||
如果需要特别关注某些方面,可以在提示词中强调:
|
||||
|
||||
```python
|
||||
prompt = f"""
|
||||
{fund_flow_section}
|
||||
|
||||
请特别关注:
|
||||
1. 主力资金的进出节奏
|
||||
2. 大单与中小单的博弈
|
||||
3. 资金流向与股价的背离情况
|
||||
|
||||
基于以上数据进行深度分析...
|
||||
"""
|
||||
```
|
||||
|
||||
## 🔄 版本对比
|
||||
|
||||
| 特性 | v1.0(手动提取) | v2.0(AI智能) |
|
||||
|------|----------------|----------------|
|
||||
| 代码行数 | ~200行 | ~100行 |
|
||||
| 字段匹配 | 硬编码 | AI自动识别 |
|
||||
| 列名变化 | 需修改代码 | 无需修改 |
|
||||
| 新增字段 | 需添加代码 | 自动包含 |
|
||||
| 分析深度 | 预定义 | AI自主判断 |
|
||||
| 容错能力 | 弱 | 强 |
|
||||
| 扩展性 | 差 | 好 |
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
1. **数据质量依赖问财**
|
||||
- 如果问财返回数据不完整,AI会指出缺失
|
||||
- 如果问财数据异常,AI会识别并说明
|
||||
|
||||
2. **AI理解能力**
|
||||
- 使用 DeepSeek 等高质量模型效果更好
|
||||
- 提示词要明确,避免AI假设数据
|
||||
|
||||
3. **数据格式**
|
||||
- 大数字自动转为亿元显示,便于AI理解
|
||||
- 保留原始数值供AI精确计算
|
||||
|
||||
## 🚀 未来优化方向
|
||||
|
||||
1. **多时间周期**
|
||||
- 同时获取5日、10日、20日数据
|
||||
- AI分析资金流向的时间趋势
|
||||
|
||||
2. **数据对比**
|
||||
- 与同行业股票对比
|
||||
- 与大盘资金流向对比
|
||||
|
||||
3. **可视化**
|
||||
- 生成资金流向图表
|
||||
- AI基于图表进行分析
|
||||
|
||||
4. **实时监控**
|
||||
- 定期查询资金流向
|
||||
- AI识别异常资金变化
|
||||
|
||||
## 更新日期
|
||||
|
||||
2025年10月6日 - v2.0
|
||||
|
||||
## 作者
|
||||
|
||||
AI股票分析系统开发团队
|
||||
|
||||
---
|
||||
|
||||
**结论**:v2.0 通过"让AI自己分析"的设计理念,实现了更简单、更智能、更强大的资金面分析功能!🎉
|
||||
|
||||
Reference in New Issue
Block a user