Files
LSTM-Quantitative-Trading-E…/prompt_professional.txt
T
2025-10-27 19:45:33 +08:00

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