stock-ai-agent/gold-agent-plan.md
2026-02-26 20:46:56 +08:00

16 KiB
Raw Blame History

黄金交易智能体 (Gold Agent) 技术调研与系统设计

一、项目概述

1.1 目标

构建一个基于 LLM 驱动的黄金 (XAUUSD) 行情分析智能体,对接 MetaTrader 5 (MT5) 进行实盘交易。

1.2 核心功能

  • 实时获取黄金行情数据(通过 MT5
  • LLM 驱动的市场分析与信号生成
  • 自动化交易执行MT5 实盘)
  • 风险管理与仓位控制
  • 飞书/Telegram 通知推送

二、技术调研

2.1 MetaTrader 5 (MT5) API 调研

MT5 Python 库

import MetaTrader5 as mt5

# 初始化
mt5.initialize()

# 获取行情数据
rates = mt5.copy_rates_from_pos("XAUUSD", mt5.TIMEFRAME_M15, 0, 100)

# 获取当前价格
tick = mt5.symbol_info_tick("XAUUSD")
bid = tick.bid
ask = tick.ask

# 下单
request = {
    "action": mt5.TRADE_ACTION_DEAL,
    "symbol": "XAUUSD",
    "volume": 0.01,  # 手数
    "type": mt5.ORDER_TYPE_BUY,
    "price": ask,
    "deviation": 20,
    "magic": 234000,
    "comment": "Gold Agent",
    "type_time": mt5.ORDER_TIME_GTC,
    "type_filling": mt5.ORDER_FILLING_IOC,
}
mt5.order_send(request)

MT5 核心概念

概念 说明
手数 (Lot) 黄金最小 0.01 手1 手 = 100 盎司
点值 (Point) 0.01 美元/点1 点 = 0.01 USD
杠杆 通常 1:100 - 1:500由经纪商设定
交易时间 周一 00:00 - 周六 00:00 (服务器时间)
点差 通常 20-50 点 (0.2-0.5 USD)

2.2 黄金交易特点

XAUUSD 特性

特性 说明 交易策略影响
波动性高 日波动 50-200 点 需要宽止损 (30-50 点)
流动性强 24 小时交易 可设置夜间交易
美元相关 与美元指数负相关 需关注 USD 数据
避险属性 市场恐慌时上涨 需关注 VIX 指数
交易时段 伦敦盘 (15:00-24:00) 和 纽约盘 (21:00-04:00) 最活跃 重点交易时段
周末停盘 周末不交易 周五收盘前需要平仓或宽止损

技术指标适用性

  • 趋势类: MA, EMA, MACD 效果较好
  • 震荡类: RSI, KDJ 在盘整市有效
  • 波动率类: ATR 对止损设置重要
  • 支撑阻力: 黄金的关键整数位 ($2000, $2050, $2100) 效果明显

三、系统架构设计

3.1 整体架构

┌─────────────────────────────────────────────────────────────┐
│                      Gold Agent 主控制器                      │
│                   (gold_agent/gold_agent.py)                 │
└─────────────────────────────────────────────────────────────┘
                              │
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│   MT5 服务      │ │ 市场信号分析器  │ │  交易决策器     │
│  (mt5_service)  │ │ (market_signal_  │ │ (trading_       │
│                 │ │  analyzer)      │ │  decision)      │
└─────────────────┘ └─────────────────┘ └─────────────────┘
                              │
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│   飞书/Telegram │ │   模拟交易      │ │   实盘交易      │
│     通知        │ │  (paper_        │ │  (mt5_          │
│                 │ │   trading)      │ │   trading)      │
└─────────────────┘ └─────────────────┘ └─────────────────┘

3.2 目录结构

backend/app/
├── gold_agent/                    # 黄金智能体模块
│   ├── __init__.py
│   ├── gold_agent.py             # 主控制器
│   ├── market_signal_analyzer.py # 市场信号分析器
│   ├── trading_decision_maker.py # 交易决策器
│   └── strategy.py               # 交易策略定义
│
├── services/                      # 服务层
│   ├── mt5_service.py            # MT5 数据服务
│   ├── mt5_trading_service.py    # MT5 实盘交易服务
│   └── gold_paper_trading.py     # 黄金模拟交易服务
│
├── models/                        # 数据模型
│   └── gold_order.py             # 黄金订单模型
│
└── api/                           # API 接口
    └── gold.py                   # 黄金智能体 API

3.3 数据流设计

MT5 行情数据
    │
    ▼
┌─────────────────────────┐
│  技术指标计算            │
│  (MA, EMA, RSI, MACD...) │
└─────────────────────────┘
    │
    ▼
┌─────────────────────────┐
│  市场信号分析 (LLM)      │
│  - 趋势判断              │
│  - 关键价位              │
│  - 信号生成              │
└─────────────────────────┘
    │
    ▼
┌─────────────────────────┐
│  交易决策 (LLM)          │
│  - 开仓/平仓/观望        │
│  - 仓位大小              │
│  - 止损止盈              │
└─────────────────────────┘
    │
    ▼
┌─────────────────────────┐
│  风险检查                │
│  - 仓位限制              │
│  - 价格合理性验证        │
│  - 交易时段检查          │
└─────────────────────────┘
    │
    ▼
┌─────────────────────────┐
│  执行交易                │
│  - 模拟交易 (回测)       │
│  - 实盘交易 (MT5)        │
└─────────────────────────┘
    │
    ▼
┌─────────────────────────┐
│  通知推送                │
│  - 飞书卡片              │
│  - Telegram 消息         │
└─────────────────────────┘

四、核心模块设计

4.1 MT5 服务 (mt5_service.py)

class MT5Service:
    """MT5 数据服务 - 获取行情数据"""

    def __init__(self):
        self.connected = False
        self.symbol = "XAUUSD"

    def initialize(self, account: int, password: str, server: str) -> bool
    def get_rates(self, timeframe: str, count: int) -> pd.DataFrame
    def get_current_price(self) -> Tuple[float, float]  # (bid, ask)
    def get_tick(self) -> Dict
    def get_positions(self) -> List[Dict]
    def get_orders(self) -> List[Dict]
    def get_account_info(self) -> Dict

时间周期映射

代码 MT5 常量 用途
M1 TIMEFRAME_M1 短线交易
M5 TIMEFRAME_M5 主要分析周期
M15 TIMEFRAME_M15 中线交易
H1 TIMEFRAME_H1 趋势确认
H4 TIMEFRAME_H4 日内趋势
D1 TIMEFRAME_D1 长期趋势

4.2 市场信号分析器 (market_signal_analyzer.py)

class GoldMarketSignalAnalyzer:
    """黄金市场信号分析器"""

    MARKET_ANALYSIS_PROMPT = """你是一位专业的黄金交易员...

    ## 黄金交易特点
    - XAUUSD 极其活跃,日波动 50-200 点
    - 关键整数位: $2000, $2050, $2100, $2150, $2200
    - 伦敦盘 (15:00-24:00) 和 纽约盘 (21:00-04:00) 最活跃
    - 周五收盘前需要谨慎持仓

    ## 输出格式
    {
      "trend_direction": "uptrend/downtrend/neutral",
      "trend_strength": "strong/medium/weak",
      "signals": [
        {
          "action": "buy/sell",
          "entry_zone": 2050.50,
          "stop_loss": 2045.00,
          "take_profit": 2060.00,
          "confidence": 85,
          "grade": "A",
          "reasoning": "..."
        }
      ],
      "key_levels": {
        "support": [2045.00, 2040.00],
        "resistance": [2060.00, 2065.00]
      }
    }
    """

    async def analyze(self, symbol: str, data: Dict) -> Dict

4.3 交易决策器 (trading_decision_maker.py)

class GoldTradingDecisionMaker:
    """黄金交易决策器"""

    TRADING_DECISION_PROMPT = """你是黄金交易执行者...

    ## 账户信息
    - 余额: {balance}
    - 持仓: {positions}
    - 杠杆: 1:100

    ## 黄金交易规则
    - 最小手数: 0.01 手
    - 1 手 = 100 盎司
    - 点值: 0.01 USD/点
    - 建议止损: 30-50 点
    - 建议止盈: 1:2 或 1:3

    ## 输出格式
    {
      "decision": "OPEN/CLOSE/HOLD",
      "action": "buy/sell",
      "quantity": 0.01,  # 手数
      "entry_zone": 2050.50,
      "stop_loss": 2045.00,
      "take_profit": 2060.00,
      "reasoning": "..."
    }
    """

    async def make_decision(self, market_signal, positions, account) -> Dict

4.4 MT5 实盘交易服务 (mt5_trading_service.py)

class MT5TradingService:
    """MT5 实盘交易服务"""

    def __init__(self):
        self.mt5 = mt5
        self.magic_number = 234000  # 识别 Gold Agent 的订单

    def connect(self, account: int, password: str, server: str) -> bool
    def open_order(self, action: str, volume: float, price: float,
                   sl: float, tp: float) -> Dict
    def close_order(self, order_id: int) -> Dict
    def close_all_positions(self) -> Dict
    def get_positions(self) -> List[Dict]
    def modify_position(self, ticket: int, sl: float, tp: float) -> Dict

订单类型说明

类型 MT5 常量 说明
市价买单 ORDER_TYPE_BUY 以 Ask 价格成交
市价卖单 ORDER_TYPE_SELL 以 Bid 价格成交
限价买单 ORDER_TYPE_BUY_LIMIT 低于当前价挂单
限价卖单 ORDER_TYPE_SELL_LIMIT 高于当前价挂单

4.5 风险控制规则

# 仓位管理
MAX_POSITIONS = 3  # 最大同时持仓数
MAX_LOTS_PER_ORDER = 0.1  # 单笔最大手数
MAX_TOTAL_LOTS = 0.3  # 总持仓上限

# 止损止盈规则
MIN_STOP_LOSS_POINTS = 30  # 最小止损 30 点 (0.30 USD)
TAKE_PROFIT_RATIO = 2.0  # 止盈/止损比 1:2

# 价格合理性验证
MAX_PRICE_DEVIATION = 0.20  # 价格偏离不超过 20%

# 交易时段
WEEKEND_CLOSE_HOUR = 20  # 周五 20:00 后不开新仓
NEWS_FILTER_WINDOW = 30  # 重大新闻前后 30 分钟不开仓

五、实现计划

Phase 1: 基础设施 (第 1-2 周)

  • MT5 服务封装
    • 连接管理
    • 行情数据获取
    • 账户信息查询
  • 数据模型定义
    • 黄金订单模型
    • 持仓记录模型
  • 配置项添加
    • MT5 账户配置
    • 飞书 webhook 配置

Phase 2: 分析与决策 (第 3-4 周)

  • 市场信号分析器
    • 技术指标计算
    • LLM 提示词设计
    • 信号生成逻辑
  • 交易决策器
    • 持仓状态判断
    • 开平仓决策
    • 仓位大小计算

Phase 3: 交易执行 (第 5-6 周)

  • 模拟交易服务
    • 订单管理
    • 止损止盈执行
    • 移动止损逻辑
  • MT5 实盘交易服务
    • 订单发送
    • 持仓查询
    • 订单修改/平仓

Phase 4: 风险管理与通知 (第 7 周)

  • 风险控制模块
    • 仓位限制
    • 价格验证
    • 交易时段检查
  • 通知推送
    • 飞书卡片格式
    • Telegram 消息推送

Phase 5: 测试与优化 (第 8 周)

  • 模拟盘测试
  • 实盘小资金测试
  • 性能优化
  • 文档完善

六、风险考虑

6.1 技术风险

风险 应对措施
MT5 连接断开 自动重连机制,连接状态监控
订单执行失败 超时重试,失败告警
数据延迟 多时间周期数据验证
系统崩溃 持久化状态,重启恢复

6.2 交易风险

风险 应对措施
市场剧烈波动 宽止损 + 小仓位
流动性枯竭 避开非交易时段
滑点风险 使用限价单,设置最大滑点
重大新闻事件 新闻过滤窗口,避免开仓

6.3 LLM 相关风险

风险 应对措施
幻觉导致错误价格 价格合理性验证
信号质量不稳定 多信号确认,降低单次权重
延迟影响执行 缓存机制,异步处理

七、配置项设计

7.1 config.py 新增配置

# ==================== 黄金交易智能体配置 ====================
# MT5 连接配置
mt5_account: int = 0  # MT5 账号
mt5_password: str = ""  # MT5 密码
mt5_server: str = ""  # MT5 服务器地址

# 黄金交易配置
gold_symbol: str = "XAUUSD"  # 黄金交易品种
gold_analysis_interval: int = 300  # 分析间隔(秒)
gold_enabled: bool = False  # 是否启用黄金智能体

# 仓位管理
gold_max_positions: int = 3  # 最大持仓数
gold_max_lots_per_order: float = 0.1  # 单笔最大手数
gold_max_total_lots: float = 0.3  # 总持仓上限
gold_default_lots: float = 0.01  # 默认手数

# 止损止盈
gold_min_stop_loss_points: float = 30  # 最小止损(点)
gold_take_profit_ratio: float = 2.0  # 止盈/止损比

# 交易时段
gold_weekend_close_hour: int = 20  # 周五收盘时间
gold_news_filter_minutes: int = 30  # 新闻过滤窗口(分钟)

# 通知配置
feishu_gold_webhook_url: str = ""  # 黄金智能体飞书通知

7.2 环境变量 (.env)

# MT5 配置
MT5_ACCOUNT=12345678
MT5_PASSWORD=your_password
MT5_SERVER=your_broker_server

# 黄金智能体
GOLD_ENABLED=True
GOLD_SYMBOL=XAUUSD

# 飞书通知
FEISHU_GOLD_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/...

八、监控指标

8.1 系统监控

  • MT5 连接状态
  • 分析执行频率
  • LLM 调用延迟
  • 订单执行成功率

8.2 交易监控

  • 当前持仓数
  • 总盈亏 (USD)
  • 胜率
  • 最大回撤
  • 平均持仓时间

8.3 信号监控

  • 信号生成频率
  • A/B/C/D 级信号分布
  • 信号执行率
  • 信号盈亏比

九、后续优化方向

  1. 多品种支持 - 扩展到 XAGUSD (白银)、其他贵金属
  2. 智能参数调优 - 基于历史数据自动优化参数
  3. 策略回测 - 使用 MT5 历史数据进行策略回测
  4. 风险模型升级 - VaR 计算、凯利公式仓位管理
  5. 机器学习增强 - 使用 ML 模型辅助 LLM 决策

十、总结

本设计方案基于现有 Crypto Agent 架构,复用了:

  • LLM 驱动的市场分析框架
  • 交易决策框架
  • 风险验证逻辑
  • 通知推送机制

主要新增:

  • MT5 数据与交易接口
  • 黄金特定的交易规则
  • 适配黄金特点的提示词

预计开发周期:8 周 风险等级:中等 (实盘交易需谨慎) 投入建议:先模拟盘充分测试后再小资金实盘