# AI量化交易LSTM+ONNX+MQL5完整项目生成提示词 ## 项目背景 我需要一个用于教学的量化交易完整解决方案,使用深度学习LSTM模型预测价格并在MT5平台自动交易。 ## 核心需求 ### 1. 技术栈要求 - **深度学习框架**: PyTorch (支持CUDA GPU加速) - **模型类型**: LSTM (Long Short-Term Memory 长短期记忆网络) - **模型格式**: ONNX (用于跨平台部署到MT5) - **交易平台**: MetaTrader 5 (MQL5语言) - **数据源**: MT5实时历史数据 (使用MetaTrader5 Python库) - **编程语言**: Python 3.11+ 和 MQL5 ### 2. 硬件环境 - GPU: NVIDIA RTX 4090 - CUDA: 12.1+ - 已安装: Python, CUDA, cuDNN - 需要: 自动检测CUDA并使用GPU训练 ### 3. 项目目标 这是一个**教学项目**,需要满足: - ✅ 代码简洁易懂 (能少一句绝不多一句) - ✅ 文件数量最少 (Python训练脚本1个 + ONNX模型1个 + MQL5 EA 1个) - ✅ 完整工作流 (数据获取→训练→导出→回测) - ✅ 可直接运行 (提供requirements.txt) - ✅ 中文注释和文档 ## 详细要求 ### 一、Python训练脚本 (train_lstm.py) **功能清单**: 1. **CUDA检测与GPU训练** - 自动检测CUDA是否可用 - 如果CUDA不可用,提示安装GPU版PyTorch的命令 - 显示GPU型号、CUDA版本、可用显存 - 优先使用GPU训练,CPU作为备选 2. **数据获取** - 使用`MetaTrader5`库连接MT5终端 - 获取指定交易品种(如EURUSD)最近N年的H1数据 - 自动检查MT5连接状态并给出清晰的错误提示 - 显示获取的数据量和时间范围 3. **数据预处理** - 使用`sklearn.MinMaxScaler`归一化OHLCV数据到[0,1] - 构造时间序列训练集: 用前N根K线预测下一根收盘价 - **数据集划分**: 80%训练集 + 20%验证集 (时间序列顺序划分) - 保存归一化参数(最小值/最大值)供MQL5使用 4. **LSTM模型定义** - 简洁的PyTorch LSTM模型 (input→LSTM→FC→output) - 输入: [batch_size, seq_len, features] - 输出: [batch_size, 1] (预测收盘价) - 模型参数可配置 (隐藏层大小、层数等) 5. **模型训练** - 使用Adam优化器 - MSE损失函数 - **验证集监控**: 每个epoch计算训练Loss和验证Loss - **早停机制(Early Stopping)**: 验证Loss连续N轮不降则停止 - **最佳模型保存**: 自动保存验证Loss最低的模型状态 - 训练过程显示进度和双Loss对比 - 支持GPU加速训练 6. **ONNX导出** - 训练完成后导出为ONNX格式 - **使用最佳模型**: 导出验证Loss最低的模型,而非最后一轮 - 文件保存到**脚本所在目录** (使用`__file__`获取路径) - 验证ONNX模型正确性 - 显示文件大小和完整保存路径 7. **训练可视化** - 使用matplotlib绘制训练曲线图 - 双曲线对比: 训练Loss vs 验证Loss - 标记最佳模型的epoch位置 - 生成两个子图: 完整曲线 + 后期收敛细节 - 保存为training_loss.png 8. **归一化参数输出** - 保存为.npy文件 - 同时在终端输出C++数组格式,方便直接复制到MQL5代码 - 示例: `double data_min[5] = {0.95, 0.96, ...};` 9. **训练总结报告** - 显示总训练轮数、最佳epoch - 显示最佳验证Loss和最终Loss - 计算训练/验证Loss差异 - **智能诊断**: 自动判断是否过拟合并给出建议 **代码风格**: - 代码行数控制在250行以内 (含可视化和诊断功能) - 每个关键步骤都有中文注释 - 函数尽量简洁,避免过度封装 - 输出信息美观清晰,便于教学演示 - 训练过程有清晰的阶段划分注释 --- ### 二、MQL5交易EA (LSTM_EA.mq5) **功能清单**: 1. **ONNX模型加载** - 使用`#resource`方式嵌入ONNX文件 - 在`OnInit()`中加载模型 - 使用`OnnxSetInputShape`和`OnnxSetOutputShape`设置张量维度 - 模型加载失败时给出清晰提示 2. **数据归一化** - 硬编码训练时的归一化参数(从Python脚本输出复制) - 归一化公式: `(value - min) / (max - min)` - 对OHLCV五个特征分别归一化 3. **推理预测** - 每个新K线形成时触发(使用静态变量判断) - 获取最近N根K线数据 - 归一化后输入ONNX模型 - 反归一化得到真实预测价格 4. **交易逻辑** - 预测价格 > 当前价格 → 买入 - 预测价格 < 当前价格 → 卖出 - 设置止损止盈 - 每次只持有一个仓位 5. **可调参数** - 手数 (LotSize) - 止损点数 (StopLoss) - 止盈点数 (TakeProfit) **代码风格**: - 代码行数控制在100行以内 - MQL5标准注释风格 - 核心逻辑清晰,适合教学 --- ### 三、依赖文件 (requirements.txt) 必须包含: ``` torch>=2.0.0 numpy>=1.24.0 onnx>=1.14.0 onnxruntime>=1.15.0 pandas>=2.0.0 MetaTrader5>=5.0.0 scikit-learn>=1.3.0 ``` 并在README中说明如何安装GPU版PyTorch: ```bash pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 ``` --- ### 四、README说明文档 **必须包含的章节**: 1. **项目简介** - 一句话概括项目功能 - 技术栈列表 2. **LSTM原理说明** (教学重点) - LSTM是什么 - 为什么适合时间序列预测 - 门控机制简介 (遗忘门、输入门、输出门) - 在量化交易中的优势 3. **文件结构** - 每个文件的作用 - 文件之间的关系 - 包含训练生成的文件(ONNX、参数、曲线图) 4. **快速开始** - 环境准备 (硬件、软件要求) - 依赖安装 - 训练模型 (详细步骤) - **查看训练效果**: 如何解读曲线图和诊断报告 - 部署到MT5 (详细步骤) - 回测运行 5. **模型架构详解** - 网络结构图 (文字ASCII图) - 输入输出格式 - 参数量统计 6. **训练参数说明** - 数据划分比例 - 优化器、学习率、损失函数 - **早停机制参数** (耐心值、触发条件) - **最佳模型保存策略** 7. **使用示例** - 训练脚本运行示例 - 预期输出示例 (含验证Loss和诊断信息) - 训练曲线图解读 - 回测结果解读 8. **常见问题** - CUDA不可用怎么办 - MT5连接失败 - ONNX推理错误 - 回测无信号 - 模型不收敛 - **验证Loss远高于训练Loss (过拟合)** - **如何判断模型训练效果好坏** 9. **进阶方向** (启发学生思考) - 如何改进模型 (增加层数、添加技术指标等) - **如何防止过拟合** (重点说明已实现的功能) - 如何优化交易策略 10. **免责声明** - 教学用途,不构成投资建议 - 实盘风险提示 --- ## 特殊要求 ### 代码简洁性 - Python训练脚本: ≤250行 (含验证、早停、可视化) - MQL5 EA: ≤100行 - 避免过度封装和抽象 - 每行代码都有存在的必要 ### 教学友好性 - 中文注释覆盖率 >50% - 关键步骤输出详细日志 - **训练过程可视化**: 生成易读的曲线图 - **智能诊断**: 自动评估模型状态 - 错误提示清晰具体 - README配图或ASCII图辅助理解 ### 可移植性 - 文件路径使用`os.path`处理 - ONNX和参数文件保存到脚本同目录 - 不依赖绝对路径或特定文件夹结构 ### 实用性 - 数据来源真实 (MT5历史数据) - 模型可真实回测 - 参数可调节优化 - 支持GPU加速训练 --- ## 交付清单 请生成以下文件: 1. ✅ `train_lstm.py` - Python训练脚本 2. ✅ `LSTM_EA.mq5` - MQL5交易EA 3. ✅ `requirements.txt` - Python依赖清单 4. ✅ `README.md` - 完整中文文档 5. ✅ `prompt.txt` - 本提示词文件(用于复现) 训练脚本运行后自动生成: 6. ✅ `lstm_model.onnx` - 训练好的ONNX模型 7. ✅ `scaler_params.npy` - 归一化参数文件 --- ## 示例配置 **默认参数建议**: - 交易品种: EURUSD - 时间周期: H1 - 历史数据: 最近5年 - 数据划分: 80%训练 / 20%验证 - 时间窗口: 10根K线 - LSTM隐藏层: 20个单元 - 最大训练轮数: 500 epochs - 早停耐心值: 20 epochs - 学习率: 0.001 - 批大小: 全量(小数据集) --- ## 成功标准 生成的项目应该满足: 1. ✅ 新手可在10分钟内完成训练 2. ✅ 代码总行数 <400行 (Python≤250行 + MQL5≤100行) 3. ✅ GPU自动检测并加速 4. ✅ **训练集/验证集自动划分** 5. ✅ **早停机制自动运行** 6. ✅ **最佳模型自动保存** 7. ✅ **训练曲线自动生成** 8. ✅ **模型状态智能诊断** 9. ✅ 模型可成功导出为ONNX 10. ✅ EA可在MT5回测器运行 11. ✅ 所有步骤有详细中文说明 12. ✅ 文件保存路径正确 (脚本同目录) --- ## 输出格式 请按以下顺序生成: 1. 先生成`requirements.txt` 2. 再生成`train_lstm.py` (包含详细注释) 3. 再生成`LSTM_EA.mq5` 4. 最后生成`README.md` (完整文档) 每个文件生成后立即告知文件路径和关键信息。 --- ## 风格示例 **Python代码风格**: ```python # 检查CUDA device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(f"使用设备: {device}") ``` **MQL5代码风格**: ```cpp // 归一化参数(从训练脚本复制) double data_min[5] = {0.95, 0.96, 0.95, 0.95, 9.0}; double data_max[5] = {1.23, 1.24, 1.23, 1.23, 24000.0}; ``` **文档风格**: ```markdown ## 快速开始 ### 1. 安装依赖 \`\`\`bash pip install -r requirements.txt \`\`\` ### 2. 训练模型 \`\`\`bash python train_lstm.py \`\`\` ``` --- ## 重要提示 1. **GPU训练必须自动检测**: 不要假设用户已安装GPU版PyTorch 2. **文件路径必须正确**: 使用`__file__`确保保存到脚本目录 3. **归一化参数必须输出**: 终端显示可直接复制的C++数组格式 4. **ONNX张量维度必须设置**: MQL5中必须调用`OnnxSetInputShape`和`OnnxSetOutputShape` 5. **代码必须极简**: 优先考虑教学清晰度,而非工程复杂度 6. **验证集必须包含**: 实现训练/验证划分和双Loss监控 7. **早停必须实现**: 防止过拟合和浪费训练时间 8. **最佳模型必须保存**: 不能只保存最后一轮的模型 9. **可视化必须自动生成**: 便于学生直观理解训练过程 10. **诊断信息必须输出**: 帮助学生判断模型质量 --- ## 可选扩展 (如果有时间) ✅ **已实现的核心功能**: - 训练/验证集分割 - 早停机制 - 最佳模型保存 - 训练曲线绘制 - 智能诊断报告 ⚙️ **可选的进阶功能**: - 学习率衰减调度器 - Dropout正则化 - L2权重衰减 - 支持多品种/多周期 - 添加更多技术指标作为特征 - 批量训练(DataLoader) --- **开始生成项目文件,使用中文输出,代码注释也用中文。**