Aekor

Aekor
专注于用户阅读体验的响应式博客主题
  1. 首页
  2. TradingAgents-CN
  3. 正文

TradingAgents-CN 项目优化:技术指标准确性与数据质量优化,更新指导(11-5)

2025-11-06 6956点热度 0人点赞 0条评论

一、升级概览

2025 年 11 月 5 日至 6 日,TradingAgents-CN 完成了一次重要的 技术指标准确性 和 数据质量优化 工作。

本次更新通过 30 个提交,解决了 技术指标计算不准确、数据复权不一致、RSI 与同花顺不一致、工具反复调用、PDF 导出兼容性、绿色版服务管理 和 数据同步覆盖 等关键问题。

本次更新后,系统的 技术分析准确性、数据一致性、分析稳定性和部署易用性 都有明显提升。

核心改进

  • 技术指标完整性:为 A股和港股 添加完整技术指标计算,包括 MA、MACD、RSI、BOLL。
  • 数据复权对齐:Tushare 改用 前复权数据,与同花顺保持一致。
  • RSI 计算优化:改用 中国式 SMA 算法,与同花顺、通达信计算方式对齐。
  • 防止工具无限循环:为所有分析师添加 工具调用计数器,最多调用 3 次。
  • 历史回溯优化:市场分析默认回溯天数提升至 365 天,保障 MACD、MA60 等指标稳定。
  • PDF 导出增强:优化中文显示、表格分页,并支持 Docker 环境。
  • 绿色版优化:新增停止服务脚本、端口配置说明和部署工具。
  • 数据同步修复:修复成交量单位、时间显示、历史数据覆盖实时数据等问题。

二、技术指标准确性修复

2.1 问题背景

相关提交:

  • 5359507:为 A股数据添加完整的技术指标计算。
  • 9b2ee38:为港股数据添加完整的技术指标计算。
  • f9a0e98:修复所有数据源缺少技术指标计算的问题。
  • 28502e5:添加技术指标详细日志,便于对比验证。

用户反馈市场分析师的 技术分析不准确。排查后发现,A股和港股数据长期存在技术指标缺失问题。

主要问题

A股数据缺少技术指标

此前 A股数据只提供基本价格信息,例如开盘价、最高价、最低价、收盘价等 OHLC 数据,没有计算:

  • MA5 / MA10 / MA20 / MA60
  • MACD
  • RSI
  • BOLL 布林带

这会导致大模型只能基于价格走势进行判断,无法进行专业技术分析。

港股数据同样缺少技术指标

港股数据与 A股类似,也只有基本行情数据,缺少完整技术指标。

不同市场数据质量不一致

此前美股数据有完整技术指标,而 A股和港股没有,导致不同市场的分析质量差异较大。

部分数据源没有统一格式化

只有 Tushare 数据源调用了 _format_stock_data_response,MongoDB、AKShare、BaoStock 等数据源没有统一格式化,导致切换数据源或切换股票后,技术指标可能消失。


三、技术指标补齐方案

3.1 为 A股添加完整技术指标

系统在 tradingagents/dataflows/data_source_manager.py 中补充了完整技术指标计算。

# 计算移动平均线
data['ma5'] = data['close'].rolling(window=5, min_periods=1).mean()
data['ma10'] = data['close'].rolling(window=10, min_periods=1).mean()
data['ma20'] = data['close'].rolling(window=20, min_periods=1).mean()
data['ma60'] = data['close'].rolling(window=60, min_periods=1).mean()

# 计算 MACD
exp1 = data['close'].ewm(span=12, adjust=False).mean()
exp2 = data['close'].ewm(span=26, adjust=False).mean()
data['macd_dif'] = exp1 - exp2
data['macd_dea'] = data['macd_dif'].ewm(span=9, adjust=False).mean()
data['macd'] = (data['macd_dif'] - data['macd_dea']) * 2

# 计算 RSI
delta = data['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14, min_periods=1).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14, min_periods=1).mean()
rs = gain / loss.replace(0, np.nan)
data['rsi'] = 100 - (100 / (1 + rs))

# 计算 BOLL
data['boll_mid'] = data['close'].rolling(window=20, min_periods=1).mean()
std = data['close'].rolling(window=20, min_periods=1).std()
data['boll_upper'] = data['boll_mid'] + std * 2
data['boll_lower'] = data['boll_mid'] - std * 2

3.2 为港股添加相同技术指标

港股数据在 tradingagents/dataflows/providers/hk/hk_stock.py 中添加相同技术指标计算逻辑,确保 港股技术分析 与 A股保持一致。

3.3 统一所有数据源格式化

MongoDB、AKShare、BaoStock 等数据源也统一调用 _format_stock_data_response。

# MongoDB 数据源
if mongo_data:
    return self._format_stock_data_response(mongo_data, symbol, period)

# AKShare 数据源
if akshare_data:
    return self._format_stock_data_response(akshare_data, symbol, period)

# BaoStock 数据源
if baostock_data:
    return self._format_stock_data_response(baostock_data, symbol, period)

3.4 添加技术指标详细日志

为方便与同花顺、通达信等软件对比,系统增加了最近 5 个交易日的技术指标日志。

logger.info("[技术指标详情] ===== 最近5个交易日数据 =====")
logger.info(f"价格: 开={row['open']:.2f}, 高={row['high']:.2f}, 低={row['low']:.2f}, 收={row['close']:.2f}")
logger.info(f"MA: MA5={row['ma5']:.2f}, MA10={row['ma10']:.2f}, MA20={row['ma20']:.2f}, MA60={row['ma60']:.2f}")
logger.info(f"MACD: DIF={row['macd_dif']:.4f}, DEA={row['macd_dea']:.4f}, MACD={row['macd']:.4f}")
logger.info(f"RSI: {row['rsi']:.2f}")
logger.info(f"BOLL: 上={row['boll_upper']:.2f}, 中={row['boll_mid']:.2f}, 下={row['boll_lower']:.2f}")

3.5 修复效果

指标类型修复前修复后
移动平均线无MA5、MA10、MA20、MA60
MACD无DIF、DEA、MACD柱、金叉/死叉识别
RSI无RSI14、RSI6、RSI12、RSI24
BOLL无上轨、中轨、下轨、位置百分比
数据源一致性不一致所有数据源统一格式化

四、Tushare 前复权数据对齐

4.1 问题背景

相关提交:

  • f49d403:Tushare 改用 pro_bar 接口获取前复权数据。
  • 0bd967d:修复 pro_bar 调用方式错误。

用户提出:“同步 Tushare 数据到 MongoDB 是用的前复权吗?同花顺采用的是前复权数据。”

排查后发现,Tushare 原来使用的是 daily() 接口,该接口返回 不复权数据,与同花顺默认使用的 前复权数据 不一致。

问题影响

  • 不复权数据会导致历史价格不连续。
  • 用不复权数据计算的 MA、MACD、RSI、BOLL 与同花顺差距较大。
  • AKShare 和 BaoStock 已使用前复权,只有 Tushare 不一致。

4.2 解决方案

将 Tushare 日线数据从 daily() 改为 ts.pro_bar(),并设置 adj='qfq'。

修改前:

df = await asyncio.to_thread(
    self.api.daily,
    ts_code=ts_code,
    start_date=start_str,
    end_date=end_str
)

修改后:

df = await asyncio.to_thread(
    ts.pro_bar,
    ts_code=ts_code,
    api=self.api,
    start_date=start_str,
    end_date=end_str,
    freq='D',
    adj='qfq'
)

4.3 复权方式对比

复权方式说明优点缺点使用场景
不复权使用实际交易价格真实价格价格不连续查看历史真实价格
前复权以当前价格为基准调整历史价格价格连续历史价格不是真实成交价技术分析
后复权以上市价格为基准调整当前价格价格连续当前价格不是真实成交价查看长期真实涨幅

4.4 修复后的数据源一致性

数据源接口复权方式是否与同花顺一致
Tusharets.pro_bar()前复权 adj='qfq'一致
AKSharestock_zh_a_hist()前复权 adjust="qfq"一致
BaoStockquery_history_k_data_plus()前复权 adjustflag="2"一致

五、RSI 计算方法优化

5.1 问题背景

相关提交:

  • b2680dd:改用同花顺风格的 RSI 指标。
  • 050d03b / 9cd5059:改用中国式 SMA 计算 RSI,与同花顺一致。

在数据改为前复权后,MACD 已经比较准确,但 RSI 仍然与同花顺不一致。

原因主要有两个:

  1. 系统原来使用 RSI14,属于国际常用周期。
  2. 同花顺常用 RSI6、RSI12、RSI24。
  3. 系统原来使用简单移动平均,而同花顺和通达信使用 中国式 SMA。

5.2 中国式 SMA 说明

同花顺和通达信中的 SMA 公式为:

SMA(X, N, M) = (M * X + (N - M) * SMA[i-1]) / N

等价于 pandas:

pd.Series(X).ewm(com=N-M, adjust=True).mean()

RSI 计算中通常 M=1,所以:

SMA(X, N, 1) = ewm(com=N-1, adjust=True).mean()

5.3 解决方案

新增同花顺风格 RSI 指标:

delta = data['close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)

# RSI6
avg_gain6 = gain.ewm(com=5, adjust=True).mean()
avg_loss6 = loss.ewm(com=5, adjust=True).mean()
rs6 = avg_gain6 / avg_loss6.replace(0, np.nan)
data['rsi6'] = 100 - (100 / (1 + rs6))

# RSI12
avg_gain12 = gain.ewm(com=11, adjust=True).mean()
avg_loss12 = loss.ewm(com=11, adjust=True).mean()
rs12 = avg_gain12 / avg_loss12.replace(0, np.nan)
data['rsi12'] = 100 - (100 / (1 + rs12))

# RSI24
avg_gain24 = gain.ewm(com=23, adjust=True).mean()
avg_loss24 = loss.ewm(com=23, adjust=True).mean()
rs24 = avg_gain24 / avg_loss24.replace(0, np.nan)
data['rsi24'] = 100 - (100 / (1 + rs24))

同时保留 RSI14 作为国际标准参考。

5.4 RSI 趋势判断

系统还新增 RSI 趋势判断:

if rsi6 > rsi12 > rsi24:
    rsi_trend = "多头排列"
elif rsi6 < rsi12 < rsi24:
    rsi_trend = "空头排列"
else:
    rsi_trend = "震荡整理"

5.5 RSI 计算方法对比

计算方法公式使用软件特点
简单移动平均rolling(window=N).mean()国际标准所有数据权重相同
中国式 SMAewm(com=N-1, adjust=True).mean()同花顺 / 通达信历史数据递减权重
Wilder’s Smoothingewm(alpha=1/N, adjust=False).mean()部分国际软件指数平滑

六、防止工具反复调用

6.1 问题背景

相关提交:

  • 81dbfab:修复基本面分析反复调用问题。
  • 0c04a81:修复基本面分析师工具调用计数器缺失问题。
  • 9d321f3:为所有分析师添加工具调用计数器,防止无限循环。
  • ca95a14:在 AgentState 中添加工具调用计数器字段。

用户反馈 基本面分析反复调用几十次,与之前市场分析师的无限调用问题类似。

根本原因

  • 基本面分析异常处理不完善,异常信息返回给 LLM 后,LLM 会尝试重新调用工具。
  • conditional_logic.py 检查 fundamentals_tool_call_count,但分析师没有正确设置该计数器。
  • AgentState 中没有显式定义计数器字段,LangGraph 不会合并未定义字段。
  • 市场分析师、新闻分析师、社媒分析师也存在类似风险。

6.2 解决方案

完善异常处理

try:
    estimated_metrics = self._estimate_financial_metrics(...)
    report = self._generate_full_report(...)
except Exception as e:
    logger.warning(f"无法获取完整财务指标: {e}")
    report = {
        "基本信息": {...},
        "行业分析": {...},
        "数据说明": "当前无法获取完整财务数据,建议参考其他信息源"
    }

在 AgentState 中添加计数器字段

class AgentState(TypedDict):
    market_tool_call_count: int
    fundamentals_tool_call_count: int
    news_tool_call_count: int
    sentiment_tool_call_count: int

所有分析师统一限制最大调用次数

current_count = state.get('fundamentals_tool_call_count', 0)

if current_count >= 3:
    logger.warning(f"基本面分析工具调用已达到最大次数 ({current_count}),强制退出")
    return {
        "messages": [AIMessage(content="基本面分析完成")],
        "fundamentals_tool_call_count": current_count
    }

return {
    "messages": [...],
    "fundamentals_tool_call_count": current_count + 1
}

6.3 修复效果

分析师修复前修复后
市场分析师无计数器最大 3 次
基本面分析师计数器未生效最大 3 次 + 异常处理
新闻分析师无计数器最大 3 次
社交媒体分析师无计数器最大 3 次

七、历史数据回溯天数优化

7.1 问题背景

相关提交:

  • 16afbb2:将市场分析回溯天数改为 250 天并添加配置验证日志。
  • 0b11498:技术分析时间调整为 365 天。

技术指标准确性依赖足够长的历史数据,尤其是 MACD 和 MA60。

技术原因

  • MACD 使用 EMA12、EMA26,需要较长预热期。
  • MA60 至少需要 60 天数据。
  • 专业级技术分析建议使用 120-365 天 历史数据。
  • 获取 365 天数据不会增加 Token 消耗,因为系统只把最后 5 天指标结果发送给 LLM。

7.2 配置调整

MARKET_ANALYST_LOOKBACK_DAYS=365

7.3 配置验证日志

lookback_days = int(os.getenv("MARKET_ANALYST_LOOKBACK_DAYS", "60"))
logger.info(f"市场分析回溯天数配置: {lookback_days} 天")

if lookback_days < 120:
    logger.warning("回溯天数较少,可能影响 MACD 等指标准确性")
    logger.warning("建议设置为 250-365 天")

7.4 数据量对比

回溯天数MACD 准确性MA60 可用性推荐场景
30 天不准确不可用不推荐
60 天基本可用可用快速测试
120 天较准确可用日常使用
250 天准确可用专业分析
365 天非常准确可用推荐配置

八、PDF 导出功能增强

8.1 问题背景

相关提交:

  • 5526bc9:完善 PDF 导出功能,支持 Docker 环境。
  • 42a69b3:优化 WeasyPrint PDF 生成的 CSS 样式。
  • 6bfcde0:简化 PDF 导出,只保留 pdfkit。

此前 PDF 导出存在以下问题:

  • 中文文本可能竖排显示。
  • 表格分页不正常。
  • Docker 环境缺少 PDF 生成工具和中文字体。
  • WeasyPrint 依赖 Cairo,构建复杂且耗时。

8.2 CSS 样式优化

* {
  writing-mode: horizontal-tb !important;
  direction: ltr !important;
}

thead {
  display: table-header-group;
}

tbody {
  display: table-row-group;
}

tr {
  page-break-inside: avoid;
}

8.3 Docker 环境支持

RUN apt-get update && apt-get install -y \
    wkhtmltopdf \
    pandoc \
    fonts-noto-cjk \
    && rm -rf /var/lib/apt/lists/*

RUN pip install pdfkit python-docx

8.4 最终方案

最终 PDF 导出简化为:

  • 移除 WeasyPrint。
  • 移除 Cairo 相关依赖。
  • 保留 pdfkit + wkhtmltopdf。
  • 减少约 170 行代码。
  • 提升 Docker 构建速度和兼容性。

8.5 方案对比

方案中文显示表格分页Docker 支持构建时间
Pandoc一般一般支持快
WeasyPrint好好构建慢慢
pdfkit好好支持快

九、绿色版功能完善

9.1 停止服务脚本

相关提交:

  • cb789a3:添加绿色版全部停止服务脚本。
  • f49ea3d:添加停止服务脚本部署工具。

新增脚本支持:

  • 使用 PID 文件优雅停止服务。
  • Nginx 使用 nginx -s quit 优雅退出。
  • 清理临时文件和 PID 文件。
  • PID 文件失效时支持强制停止。
  • 检查是否仍有进程运行,并给出提示。

使用方式:

# 批处理文件
停止所有服务.bat

# PowerShell 脚本
.\stop_all.ps1

# 强制停止
.\stop_all.ps1 -Force

9.2 端口配置文档

相关提交:

  • 12f8d16:绿色版修改端口说明。
  • 97e6e11:添加 portable 脚本目录说明文档。

文档覆盖内容:

  • 自动检测端口占用。
  • 显示占用进程信息。
  • 修改 .env 文件。
  • 修改 nginx.conf 文件。
  • 重启服务生效。
  • 常见端口:8000、3000、6379、27017。

十、数据同步问题修复

10.1 成交量与成交额单位修复

相关提交:

  • 4c885f0:修复成交量同步问题。
  • a70e540:为成交量和成交额添加日期标签。

问题包括:

  • Tushare 成交额单位是 千元,需要转换为元。
  • 成交量和成交额缺少日期标签,难以判断数据是否为当天。

修复方案:

if 'amount' in data.columns:
    data['amount'] = data['amount'] * 1000

quote = {
    "volume": volume,
    "amount": amount,
    "tradeDate": trade_date,
    "isToday": trade_date == today
}

10.2 时间显示修复

相关提交:

  • fe04d99:修复前端时间显示多加 8 小时的问题。

修复逻辑:

if (!dateStr.includes('Z') && !dateStr.includes('+') && !dateStr.includes('-')) {
    dateStr += '+08:00'
}

10.3 避免历史数据覆盖实时数据

相关提交:

  • c0f185e:修复历史数据覆盖实时数据的问题,优化自选股同步策略。
  • 440ae8f:优化单个股票同步逻辑,避免历史数据覆盖实时行情。

问题表现:

  1. 先同步实时行情,数据日期为 11-05。
  2. 再同步历史数据,最新记录为 11-04。
  3. 历史数据覆盖了更新的实时行情。

修复方案:

existing_quote = db.market_quotes.find_one({"symbol": symbol})

if existing_quote:
    existing_date = existing_quote.get('trade_date')
    latest_date = latest_data.get('trade_date')

    if existing_date > latest_date:
        logger.info("market_quotes 中的数据更新,跳过覆盖")
        return

10.4 历史数据同步日志增强

相关提交:

  • e693484:增强历史数据同步日志,诊断空数据问题。
  • 99b0e6b:增强 Tushare 历史数据同步错误日志。
  • 25acf24:添加缺失的 trading_time 工具模块。
  • c6769962:优化单个股票实时行情同步逻辑。

新增诊断日志:

logger.info(f"{symbol}: 请求日线数据 start={start_date}, end={end_date}, period={period}")

if not data:
    logger.warning("Tushare API 返回空数据")
    logger.warning(f"参数: symbol={symbol}, ts_code={ts_code}, period={period}")
    logger.warning(f"日期: start={start_date}, end={end_date}")
    logger.warning("可能原因: 无交易数据、日期范围错误、代码格式错误、API限制或积分不足")

十一、统计数据

11.1 提交统计

类别提交数主要改进
技术指标5A股/港股技术指标、详细日志、数据源统一
数据复权2Tushare 前复权、调用方式修复
RSI 计算3同花顺风格、中国式 SMA、趋势判断
防止循环4异常处理、计数器、AgentState 字段
回溯天数2250 天到 365 天、配置验证
PDF 导出3Docker 支持、CSS 优化、简化依赖
绿色版4停止脚本、端口配置、文档完善
数据同步7成交量单位、时间显示、覆盖问题、日志增强
总计30-

11.2 代码变更统计

指标数量
修改文件45+
新增文件15+
新增代码3000+ 行
删除代码400+ 行
净增代码2600+ 行

十二、核心价值

12.1 分析准确性提升

本次更新补齐了 A股和港股技术指标,并让数据复权、RSI 算法与同花顺保持一致。

核心成果:

  • 技术指标从无到有。
  • Tushare 前复权数据与同花顺对齐。
  • RSI 使用中国式 SMA,与同花顺一致。
  • 365 天历史数据保障指标预热充分。

预期效果:

  • 技术分析准确性提升 80%+。
  • 与同花顺指标差距小于 0.5%。
  • 分析报告专业性显著提升。

12.2 系统稳定性提升

核心成果:

  • 所有分析师工具调用最多 3 次。
  • 异常时返回简化报告,而不是错误堆栈。
  • AgentState 显式定义计数器字段。
  • 数据同步避免旧数据覆盖新数据。

预期效果:

  • 无限循环问题完全解决。
  • 系统稳定性提升 50%+。
  • 用户体验显著改善。

12.3 功能完整度提升

核心成果:

  • PDF 导出支持 Docker 环境。
  • 绿色版新增停止服务脚本。
  • 端口配置文档更完整。
  • 成交量、时间、历史覆盖等数据问题全部修复。

预期效果:

  • 功能完整性提升 30%+。
  • 用户满意度提升 40%+。
  • 部署便利性显著提升。

十三、升级指南

13.1 绿色版升级步骤

方法一:保留数据升级,推荐

适用场景:希望保留所有历史数据、配置和分析结果。

第一步:备份当前数据

$backupDate = Get-Date -Format "yyyyMMdd_HHmmss"
Copy-Item -Path "data\mongodb" -Destination "data\backups\mongodb_$backupDate" -Recurse

也可以使用 MongoDB 工具备份:

.\vendors\mongodb\mongodb-win32-x86_64-windows-8.0.13\bin\mongodump.exe `
  --host localhost --port 27017 --db tradingagents `
  --out "data\backups\mongodb_dump_$backupDate"

第二步:停止所有服务

停止所有服务.bat

或:

.\stop_all.ps1

第三步:备份配置文件

Copy-Item .env .env.backup_$(Get-Date -Format "yyyyMMdd")
Copy-Item -Path config -Destination config.backup_$(Get-Date -Format "yyyyMMdd") -Recurse

第四步:下载并解压新版本

下载最新绿色版压缩包,例如:

TradingAgentsCN-portable.zip

解压到临时目录,例如:

C:\Temp\TradingAgentsCN-portable-new

第五步:覆盖程序文件

$source = "C:\Temp\TradingAgentsCN-portable-new"
$target = "当前绿色版目录"

Copy-Item -Path "$source\tradingagents" -Destination "$target\tradingagents" -Recurse -Force
Copy-Item -Path "$source\app" -Destination "$target\app" -Recurse -Force
Copy-Item -Path "$source\web" -Destination "$target\web" -Recurse -Force
Copy-Item -Path "$source\scripts" -Destination "$target\scripts" -Recurse -Force
Copy-Item -Path "$source\frontend\dist" -Destination "$target\frontend\dist" -Recurse -Force
Copy-Item -Path "$source\*.ps1" -Destination $target -Force
Copy-Item -Path "$source\*.bat" -Destination $target -Force
Copy-Item -Path "$source\*.md" -Destination $target -Force

不要覆盖以下目录:

  • data\:MongoDB、Redis 数据。
  • vendors\:MongoDB、Redis、Nginx、Python 等第三方工具。
  • venv\:Python 虚拟环境。
  • logs\:日志文件。
  • runtime\:运行时配置。

第六步:更新配置文件

重点检查新增配置项:

MARKET_ANALYST_LOOKBACK_DAYS=365

如果旧 .env 中有 API Key、自定义端口等配置,请手动复制到新 .env 文件中。

第七步:启动服务

powershell -ExecutionPolicy Bypass -File .\start_all.ps1

第八步:验证升级

Get-Process | Where-Object { $_.Name -match "nginx|python|redis|mongod" }
Start-Process "http://localhost"
Get-Content logs\webapi.log -Tail 50

第九步:测试技术指标

  1. 访问 http://localhost。
  2. 登录系统。
  3. 打开任意股票,例如 000001 或 300750。
  4. 运行市场分析。
  5. 查看日志中的技术指标详情:
Get-Content logs\webapi.log | Select-String "技术指标详情"

13.2 Docker 版本升级步骤

方法一:使用 Docker Compose 升级,推荐

适用场景:使用 docker-compose.hub.nginx.yml 部署的用户。

第一步:备份 MongoDB 数据

docker exec tradingagents-mongodb mongodump \
  --host localhost --port 27017 \
  --username admin --password tradingagents123 --authenticationDatabase admin \
  --db tradingagents \
  --out /data/db/backup_$(date +%Y%m%d_%H%M%S)

第二步:备份配置文件

cp .env .env.backup_$(date +%Y%m%d)
cp nginx/nginx.conf nginx/nginx.conf.backup

第三步:拉取最新代码

git pull origin main

或下载最新源代码压缩包并解压。

第四步:拉取最新镜像

docker-compose -f docker-compose.hub.nginx.yml pull
docker images | grep tradingagents

第五步:停止并删除旧容器

docker-compose -f docker-compose.hub.nginx.yml down
docker image prune -f

第六步:更新配置文件

对比新旧配置:

diff .env.backup_$(date +%Y%m%d) .env.example

重点确认:

MARKET_ANALYST_LOOKBACK_DAYS=365

第七步:启动新版本

docker-compose -f docker-compose.hub.nginx.yml up -d
docker-compose -f docker-compose.hub.nginx.yml logs -f --tail=100

第八步:验证升级

docker-compose -f docker-compose.hub.nginx.yml ps
curl http://localhost/api/health
curl http://localhost
docker-compose -f docker-compose.hub.nginx.yml logs backend | tail -50

第九步:查看技术指标日志

docker-compose -f docker-compose.hub.nginx.yml logs backend | grep "技术指标详情"

十四、升级后验证清单

14.1 服务状态检查

绿色版:

Get-Process | Where-Object { $_.Name -match "nginx|python|redis|mongod" }

Docker 版:

docker-compose -f docker-compose.hub.nginx.yml ps

14.2 数据完整性检查

绿色版:

.\vendors\mongodb\mongodb-win32-x86_64-windows-8.0.13\bin\mongosh.exe --eval "
use tradingagents
print('股票日线数据:', db.stock_daily_quotes.countDocuments())
print('股票基本信息:', db.stock_basic_info.countDocuments())
print('自选股:', db.user_favorites.countDocuments())
"

Docker 版:

docker exec tradingagents-mongodb mongosh \
  --username admin --password tradingagents123 --authenticationDatabase admin \
  tradingagents --eval "
print('股票日线数据:', db.stock_daily_quotes.countDocuments());
print('股票基本信息:', db.stock_basic_info.countDocuments());
print('自选股:', db.user_favorites.countDocuments());
"

14.3 技术指标验证

打开任意股票,运行市场分析,并查看日志:

绿色版:

Get-Content logs\webapi.log | Select-String "技术指标详情"

Docker 版:

docker-compose -f docker-compose.hub.nginx.yml logs backend | grep "技术指标详情"

建议与同花顺对比:

  • MA5 / MA10 / MA20 / MA60 差距小于 0.5%。
  • MACD、DIF、DEA 差距小于 0.5%。
  • RSI6 / RSI12 / RSI24 差距小于 0.5%。
  • BOLL 上轨、中轨、下轨差距小于 0.5%。

14.4 功能测试

建议测试以下功能:

  • 股票搜索。
  • 自选股管理。
  • 市场分析。
  • 基本面分析。
  • 新闻分析。
  • 报告导出,包括 PDF 和 Word。
  • 数据同步。

14.5 配置验证

绿色版:

Get-Content logs\webapi.log | Select-String "市场分析回溯天数"

Docker 版:

docker-compose -f docker-compose.hub.nginx.yml logs backend | grep "市场分析回溯天数"

日志中应显示:

市场分析回溯天数配置: 365 天

十五、常见升级问题

Q1:升级后技术指标还是不准确?

请检查回溯天数配置:

绿色版:

Select-String -Path .env -Pattern "MARKET_ANALYST_LOOKBACK_DAYS"

Docker 版:

grep MARKET_ANALYST_LOOKBACK_DAYS .env

应为:

MARKET_ANALYST_LOOKBACK_DAYS=365

如果仍不准确,可以清空旧 Tushare 缓存数据后重新同步。

绿色版:

.\vendors\mongodb\mongodb-win32-x86_64-windows-8.0.13\bin\mongosh.exe tradingagents --eval "
db.stock_daily_quotes.deleteMany({data_source: 'tushare'})
"

Docker 版:

docker exec tradingagents-mongodb mongosh tradingagents --eval "
db.stock_daily_quotes.deleteMany({data_source: 'tushare'})
"

然后访问:

http://localhost → 数据管理 → 同步历史数据

Q2:升级后 MongoDB 数据丢失怎么办?

可以从备份恢复。

绿色版:

.\vendors\mongodb\mongodb-win32-x86_64-windows-8.0.13\bin\mongorestore.exe `
  --host localhost --port 27017 --db tradingagents --drop `
  "data\backups\mongodb_dump_20251106\tradingagents"

Docker 版:

docker exec -i tradingagents-mongodb mongorestore \
  --db tradingagents --drop /data/db/backup_20251106/tradingagents

Q3:升级后服务无法启动?

检查端口占用。

绿色版:

Get-NetTCPConnection -LocalPort 80,8000,6379,27017 -State Listen -ErrorAction SilentlyContinue

Docker 版:

netstat -tuln | grep -E '80|8000|6379|27017'

如果有端口冲突:

  • 绿色版参考端口配置说明修改。
  • Docker 版修改 docker-compose.yml 中的端口映射,例如将 80:80 改为 8080:80。

Q4:Docker 镜像拉取失败怎么办?

可以配置 Docker 镜像加速器,或本地构建镜像。

镜像加速器示例:

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

重启 Docker 后重新拉取。

也可以本地构建:

docker-compose -f docker-compose.hub.nginx.yml build

Q5:绿色版升级后 vendors 目录损坏怎么办?

不要覆盖 vendors 目录。

如果不小心覆盖,需要重新下载完整绿色版压缩包,只提取 vendors\ 目录进行恢复。


十六、总结

本次更新通过 30 个提交,完成了 技术指标准确性 和 数据质量 的全面优化。

主要成果包括:

  • 技术指标完整性:为 A股和港股添加完整的 MA、MACD、RSI、BOLL 计算。
  • 数据复权对齐:Tushare 改用 前复权数据,与同花顺保持一致。
  • RSI 计算优化:改用 中国式 SMA 算法,与同花顺、通达信一致。
  • 防止无限循环:为所有分析师添加 工具调用计数器。
  • 历史回溯优化:默认回溯 365 天,提升 MACD、MA60 等指标准确性。
  • PDF 导出增强:支持 Docker 环境,完善中文显示和表格分页。
  • 绿色版完善:新增停止服务脚本和端口配置文档。
  • 数据同步修复:修复成交量单位、时间显示、历史数据覆盖等问题。
  • 升级指导完善:补充绿色版和 Docker 版升级步骤、验证清单和常见问题。

这些改进显著提升了 TradingAgents-CN 的 分析准确性、系统稳定性、数据一致性和部署易用性,让技术分析报告更接近专业行情软件的计算结果,也为用户提供了更可靠的股票分析体验。

✅ 官方唯一渠道:📦 GitHub 仓库:https://github.com/hsliuping/TradingAgents-CN

Aekor AI-API 中转站,让全球顶尖 AI 大模型“触手可及”!你是否曾为这些烦恼头疼?

🔹 人在国内,却总被海外官网 API 的高延迟、掉线、甚至无法访问困扰?

🔹 想用最强的 GPT、Claude 等模型,却卡在海外信用卡、支付审核等重重阻碍?

🔹 官方 API 太贵?Aekor 为你打通“网络-支付-成本”的任督二脉!

💡 Aekor 核心价值:好用、便宜、快 💡

🚀 高速稳定,告别掉线国内专线加速,API 响应低延迟,告别「转圈圈」的焦虑,开发效率瞬间拉满!

🧠 顶尖模型,随需而调涵盖 GPT 系列、Claude 系列等全球主流大厂模型,一次接入,轻松调用!

🎁 免费白嫖,诚意拉满!

注册即送 20 美元体验额度,够你狠狠测试一轮模型质量与线路稳定性了!

🚪 入口:https://api.aekor.com

⚠️ 温馨提示:API 中转市场虽多但良莠不齐(甚至有些会偷工减料换小模型糊弄事儿)。Aekor 坚持提供正版稳定的服务,但还是建议:先用免费的 20 刀测试是否契合自身需求,满意了再小额充值上车,理性消费不盲目。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: A股技术指标 Docker部署 MACD指标 TradingAgents-CN Tushare前复权 中国式SMA 前复权数据 同花顺指标对齐 港股技术指标 股票分析系统
最后更新:2026-06-28

Aekor

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

使用AI教程

  • API报错解决方案
  • API 基础知识
  • API Key 获取

分类

  • Blog
  • TradingAgents-CN
  • 使用教程

COPYRIGHT © 2026 Aekor. ALL RIGHTS RESERVED.