# ea-development：逐课讲义与练习册

版本 content-v2；每课有独立讲解、操作、题设和答案。全部数值/规则为合成教学假设，不代表官方服务或真实业绩。允许本地纸面完成，不要求开户、入金或真实交易。

模块：MQL5 基础 / EA 逻辑开发 / 回测与优化

## MQL5 基础

### 概念
MQL5是事件驱动语言。OnInit初始化，OnTick响应报价事件，OnDeinit释放资源；指标通常通过句柄和CopyBuffer取值。返回值、数组可用长度、错误码和数据就绪都需检查。MT4与MT5接口不可混写，示例必须说明平台。

### 带数据推演
假设CopyBuffer请求3个值但返回1，不能读取后两个元素计算交叉。使用已收盘bar shift=1可避免把尚在变的当前bar当最终值，但仍要明确数组顺序和指标缓冲区含义。

### 作业题设
下载AcademySmaSignal.mq5，在MetaEditor中编译为只记录信号的EA；检查指标句柄无效和CopyBuffer不足的分支。没有MT5时完成代码审读，不声称已编译。

### 检查限制
不要在每个tick重建指标句柄；默认当前bar与已收盘bar不是同一信息集。

### 本模块课时
- m1-l1：语法与结构
- m1-l2：指标与内置函数
- m1-l3：语法练习

### m1-l1 语法与结构

#### 本课讲解
MQL5程序按事件组织：OnInit初始化、OnTick处理报价、OnDeinit释放资源。变量类型、作用域与返回状态影响运行；不能将MT4代码不经修改当MT5。

#### 操作顺序
阅读配套mq5→标输入/全局/局部变量→列事件入口→核初始化失败路径→在MetaEditor记录编译版本。

#### 独立作业
指出指标句柄为什么不能在每个tick无条件重建，以及退出时应做什么。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m1-l2 指标与内置函数

#### 本课讲解
MQL5的iMA返回指标句柄，CopyBuffer取值需核返回数量与bar偏移。当前bar0会变化，已收盘bar1才符合本例收盘信号定义。

#### 操作顺序
创建句柄→确认数据就绪→CopyBuffer从shift1读取→核返回值→遇不足不产生信号→释放句柄。

#### 独立作业
策略要比较最近两个已收盘SMA值，偏移应读0/1还是1/2？失败时可否用数组默认0？

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m1-l3 语法练习

#### 本课讲解
语法练习先做可审查的只读程序，再讨论执行。配套示例仅记录SMA状态，不含OrderSend/CTrade，也不要求真实交易权限。

#### 操作顺序
用示例改一项输入→编译→记录错误/警告→在模拟图表观察新bar日志→未运行项明确列出。

#### 独立作业
交事件结构说明和本机编译记录；没有MetaEditor时交静态检查并注明缺口，不编造成功截图。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

## EA 逻辑开发

### 概念
OnTick会多次触发，同一bar若不去重可能反复发指令。信号生成与订单执行分离，使用已处理bar时间、Magic和订单状态核对策略归属。交易返回需要检查retcode，发送函数返回成功不一定等于最终成交。

### 带数据推演
同一分钟收到20个tick，交叉信号只应按预定“每个新bar一次”逻辑登记一次。若账户已有其它策略仓位，不可只因品种相同就修改或平掉。先输出signal.csv，验证去重，再讨论模拟执行适配器。

### 作业题设
审读只记录信号EA，说明lastBar时间如何防重复；为外部执行器写Magic、最大仓位、retcode、未知状态查询四项约束，不启用真实交易。

### 检查限制
课程示例刻意不调用OrderSend；新增执行代码需要另外的模拟测试与平台核验。

### 本模块课时
- m2-l1：OnTick 交易逻辑
- m2-l2：订单管理与错误处理
- m2-l3：SMA EA 开发

### m2-l1 OnTick 交易逻辑

#### 本课讲解
OnTick可能在一根bar内被多次触发。若规则每个已收盘bar只评估一次，需要新bar守卫；仍须处理重启、数据缺失和重复信号。

#### 操作顺序
保存最近已处理bar时间→新bar时读取上根→检查数据→生成只读信号→写barID与版本，不接实际订单。

#### 独立作业
同一bar有50个tick，配套日志策略应评估几次？重启后还要防哪种重复？

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m2-l2 订单管理与错误处理

#### 本课讲解
订单管理需区分请求受理和成交，错误恢复必须先查状态。真实交易接口涉及账户权限、合约与幂等，本教学示例不执行这些接口。

#### 操作顺序
画无请求/在途/部分成交/完成/拒绝/未知状态图→为每状态列允许动作→超时先对账，不能自动无限重试。

#### 独立作业
设请求超时且未知是否成交，设计纸面错误处理记录，禁止发真实订单。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m2-l3 SMA EA 开发

#### 本课讲解
SMA EA开发分信号和交易执行两层。本课可交付只读信号EA与纸面执行状态机；它不是可直接投入资金的完整自动交易机器人。

#### 操作顺序
在示例基础上列快/慢SMA→定义收盘上穿→新bar只评估一次→日志记录信号→用纸面订单表验证，不添加真实密钥。

#### 独立作业
给快线前/今99/102、慢线100/101，判断上穿；再给前101/今102、慢100/101判断是否新上穿。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

## 回测与优化

### 概念
策略测试报告须注明终端版本、品种规格、数据模式、样本区间、费用、建模限制与未平仓估值。优化参数只在训练区间选择；单一最优尖峰可能是拟合噪声。信号EA不产生订单，因此其测试报告不能展示虚构交易收益。

### 带数据推演
参数10/30训练好但样本外差，参数11/31稍改结果大变，提示不稳定。只记录信号的示例应报告信号数、时间与重复检查；收益验证另用课程离线研究脚本，不混成MT5真实策略回测。

### 作业题设
分别提交EA编译/信号日志与Python研究结果，写二者能力差异。若没有MetaEditor，标“源码已提供，终端编译未验证”；不在缺失环境下填通过。

### 检查限制
优化不能以最终测试收益为筛选依据；不能把信号数换成成交笔数。

### 本模块课时
- m3-l1：策略测试器使用
- m3-l2：参数优化
- m3-l3：EA 回测报告

### m3-l1 策略测试器使用

#### 本课讲解
测试器结果依赖建模模式、点差、数据和品种规格。只读日志EA没有交易收益曲线是正常情况，不能编造成策略成交业绩。

#### 操作顺序
选固定品种/区间/模型→写版本参数→检查日志次数→核缺bar/错误→保存终端报告，区分静态阅读和实际运行。

#### 独立作业
配套只读EA测试器显示零交易，应判执行失败还是符合设计？还应核查什么？

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m3-l2 参数优化

#### 本课讲解
参数优化只是在既定模型下搜索，不能自动发现稳健优势。只读EA的参数可比较信号频率，但没有交易执行时不能计算真实策略收益。

#### 操作顺序
记录参数网格与试验数→只在训练区选择→核邻域→冻结→未来区检查→标指标是信号还是成交。

#### 独立作业
若对20组均线只统计日志上穿次数，能否挑最多的一组称最佳盈利参数？

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m3-l3 EA 回测报告

#### 本课讲解
EA报告要区分源码审阅、编译、测试器和模拟运行四层证据。每层失败与未运行都应保留，不以网页下载代替工程验收。

#### 操作顺序
列平台版本→编译诊断→固定输入→信号日志→执行边界→测试覆盖→未验证项。

#### 独立作业
为只读SMA示例交一份报告模板，必须包括无订单接口声明和至少一项尚未验证能力。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。
