黄金交易智能体 (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 周)
Phase 2: 分析与决策 (第 3-4 周)
Phase 3: 交易执行 (第 5-6 周)
Phase 4: 风险管理与通知 (第 7 周)
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 级信号分布
- 信号执行率
- 信号盈亏比
九、后续优化方向
- 多品种支持 - 扩展到 XAGUSD (白银)、其他贵金属
- 智能参数调优 - 基于历史数据自动优化参数
- 策略回测 - 使用 MT5 历史数据进行策略回测
- 风险模型升级 - VaR 计算、凯利公式仓位管理
- 机器学习增强 - 使用 ML 模型辅助 LLM 决策
十、总结
本设计方案基于现有 Crypto Agent 架构,复用了:
- LLM 驱动的市场分析框架
- 交易决策框架
- 风险验证逻辑
- 通知推送机制
主要新增:
- MT5 数据与交易接口
- 黄金特定的交易规则
- 适配黄金特点的提示词
预计开发周期:8 周
风险等级:中等 (实盘交易需谨慎)
投入建议:先模拟盘充分测试后再小资金实盘