384 lines
10 KiB
Plaintext
384 lines
10 KiB
Plaintext
# 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)
|
|
|
|
---
|
|
|
|
**开始生成项目文件,使用中文输出,代码注释也用中文。**
|