# 黄金交易智能体 (Gold Agent) 技术调研与系统设计 ## 一、项目概述 ### 1.1 目标 构建一个基于 LLM 驱动的黄金 (XAUUSD) 行情分析智能体,对接 MetaTrader 5 (MT5) 进行实盘交易。 ### 1.2 核心功能 - 实时获取黄金行情数据(通过 MT5) - LLM 驱动的市场分析与信号生成 - 自动化交易执行(MT5 实盘) - 风险管理与仓位控制 - 飞书/Telegram 通知推送 --- ## 二、技术调研 ### 2.1 MetaTrader 5 (MT5) API 调研 #### MT5 Python 库 ```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) ```python 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) ```python 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) ```python 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) ```python 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 风险控制规则 ```python # 仓位管理 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 新增配置 ```python # ==================== 黄金交易智能体配置 ==================== # 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) ```bash # 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 周** 风险等级:**中等** (实盘交易需谨慎) 投入建议:**先模拟盘充分测试后再小资金实盘**