先把交易想法写成无歧义规格
算法开发第一步不是写代码,而是把入场、退出、仓位、止损、交易时段、最大风险和异常处理写成任何开发者都能复现的规则。“趋势强时买入”不是规格,必须定义趋势指标、周期、阈值、报价和判断时点。
还要定义没有新报价、点差过大、保证金不足、订单被拒和终端重启时的行为。模糊项若留给代码临时决定,回测和实盘可能执行不同策略。
| 规格模块 | 必须明确 | 模糊风险 |
|---|---|---|
| 信号 | 数据、公式和时点 | 事后解释 |
| 仓位 | 风险金额与取整 | 敞口失控 |
| 退出 | 失效、止损和超时 | 无限持仓 |
| 异常 | 拒单、断线和重启 | 重复订单 |
无法书面测试的规则,也无法可靠自动化。
选择 MQL4、MQL5 或区域 API 路线
已有 MT4 账户和 MQL4 代码时选择 MT4 EA;新建 MQL5 工作流可选 MT5 EA。两种语言和程序不能直接跨平台运行。EA 只在桌面终端工作,移动与网页终端只能用于监控或手动处理。
当前 Exness API 仅在越南地区开放,只连接 Exness 平台账户,不连接标准 MetaTrader 账户;标准端点暂不支持股票和指数。不能把地区受限 API 写成全球通用方案。
| 路线 | 账户与环境 | 主要边界 |
|---|---|---|
| MQL4 EA | MT4 桌面 | 只兼容 MQL4 |
| MQL5 EA | MT5 桌面 | 只兼容 MQL5 |
| Exness API | 越南适用 Exness 账户 | 地区与品种限制 |
| 移动/网页 | 监控与手动交易 | 不运行 EA |
技术路线必须服从账户和资格。
历史数据质量决定回测上限
回测数据应明确来源、时区、报价粒度、缺口、点差、交易时段和合约变化。使用当前固定点差重放多年历史,会低估新闻和低流动性时段的成本;忽略缺失报价可能创造无法成交的理想价格。
数据清洗规则也要记录,不能在看到结果后删除不利时期。不同经纪环境的符号、后缀和合约规格可能不同,策略迁移前必须重新验证。
| 数据字段 | 检查 | 错误后果 |
|---|---|---|
| 时间 | 时区与夏令时 | 交易窗口错位 |
| 报价 | Bid/Ask 与粒度 | 成本低估 |
| 缺口 | 缺失和异常值 | 虚假成交 |
| 规格 | 合约与交易时间 | 点值错误 |
回测无法比输入数据更可靠。
把全部交易成本放进模型
算法结果必须扣除动态点差、适用佣金、隔夜费用、货币换算和滑点。高频或小目标策略对成本特别敏感,毛收益为正不代表净收益为正。
使用多种成本情景:正常、恶化和压力条件。还要模拟订单拒绝、部分执行和价格不再可用。官方说明 EA 在请求过期价格时可能出现 Invalid price,这不是回测中可忽略的技术细节。
| 成本或摩擦 | 模型方式 | 敏感策略 |
|---|---|---|
| 点差 | 按时段动态 | 短线 |
| 佣金 | 按手数双向 | 高频 |
| 滑点 | 分布与压力值 | 新闻突破 |
| 隔夜费用 | 按持仓日期 | 波段 |
| 拒单 | 失败与重试逻辑 | 快速执行 |
成本模型越理想化,实盘落差越大。
训练、样本外与滚动测试必须分开
开发者若在全部历史上反复调整参数,会把噪声误当规律。应预先划分训练区间、样本外区间和最终保留区间;参数只能在训练阶段选择,样本外结果用于检验泛化。
滚动测试模拟随时间重新评估策略,但每次规则必须固定并留档。不能在亏损区间后修改定义,再把同一区间称为独立验证。
| 阶段 | 用途 | 禁止 |
|---|---|---|
| 训练 | 开发与选择参数 | 声称独立验证 |
| 样本外 | 检查泛化 | 反复调参 |
| 最终保留 | 最后审核 | 提前查看 |
| 滚动测试 | 模拟时间推进 | 事后改规则 |
独立性的纪律比漂亮曲线更重要。
识别过度拟合和参数脆弱性
参数数量越多、搜索组合越广,越容易偶然找到完美历史结果。稳健策略不应在参数轻微变化后从盈利突然变成巨亏,也不应只依赖一个品种的一小段特殊行情。
对参数做邻域测试,改变点差、滑点、起始日期和成交延迟,并在相关品种与不同波动阶段观察。结果恶化是正常的,但结构完全崩溃说明策略脆弱。
| 压力变化 | 稳健表现 | 脆弱信号 |
|---|---|---|
| 参数微调 | 结果平缓变化 | 单点峰值 |
| 成本提高 | 风险可解释 | 立即失效 |
| 延迟增加 | 仍能控制订单 | 大量重复 |
| 日期平移 | 逻辑仍一致 | 只在特定起点有效 |
稳健性不是收益最高,而是变化后仍可解释。
代码审查和权限最小化
EA 可能需要算法交易权限,有些还请求 DLL 或 WebRequest。只有理解具体用途和目标地址时才授权。DLL 可以扩展本机能力,也扩大恶意代码风险;WebRequest 可能向外部服务发送数据或依赖不可用接口。
检查订单去重、手数边界、异常捕获、日志、时间比较和重启恢复。第三方编译文件看不到源代码时,风险更高,应至少核对可信来源、签名、版本和权限。
| 权限 | 合理用途 | 控制 |
|---|---|---|
| 算法交易 | 允许 EA 下单 | 独立总开关 |
| DLL | 本机扩展 | 仅可信库 |
| WebRequest | 指定外部接口 | 限制 URL |
| 文件访问 | 配置与日志 | 隔离目录 |
权限应按需要授予,而不是全部开启。
回测通过后必须做 Demo 前向测试
Demo 前向测试让算法面对实时到达的报价、网络、服务器响应和交易时段。测试目标不仅是收益,还包括是否漏单、重复、手数取整、止损设置、日志记录和重启恢复。
使用固定版本和参数,预先规定样本期与通过条件。Demo 条件与真实资金心理不同,也不能保证实盘执行,但能暴露回测无法看到的操作问题。
| 测试项 | 记录 | 通过条件 |
|---|---|---|
| 信号 | 预期与实际时间 | 无未知偏差 |
| 订单 | 请求、成交和拒绝 | 重试不重复 |
| 风险 | 手数与止损 | 不超硬上限 |
| 重启 | 持仓恢复 | 状态一致 |
没有前向证据的回测,只是开发假设。
真实账户从最小可验证规模开始
Demo 通过后也不应直接部署计划中的全部资本。真实账户会出现真实点差、费用、滑点、心理压力和资金约束,应从完全可承受损失的小规模开始,并保持与 Demo 相同的版本、参数和监控。
先规定观察期和最大亏损,不因早期盈利立刻放大。比较每笔实盘订单与 Demo 或理论预期,分离策略差异、执行差异和配置差异。无法解释的偏差出现时暂停,而不是增加交易量。
| 阶段 | 资本 | 目标 |
|---|---|---|
| Demo | 虚拟 | 验证逻辑与运行 |
| 小额实盘 | 可完全承受损失 | 测量真实摩擦 |
| 扩大评估 | 仍受总预算限制 | 确认稳定性 |
| 异常期 | 停止新增风险 | 调查原因 |
资本规模应随证据增加,而不是随信心增加。
建立算法之外的硬风险限制
策略自己的止损可能因代码错误、配置覆盖或连接问题失效,因此账户层还要设置独立限制:单笔手数、总名义敞口、同方向相关风险、每日亏损、最大回撤、最大订单频率和保证金底线。
限制应由独立监控或人工流程核对,不能全部依赖同一 EA。触发后默认停止新订单,并由受权人员确认现有持仓如何处理。快速强平也可能产生额外滑点。
| 限制 | 防止 | 触发动作 |
|---|---|---|
| 单笔手数 | 参数数量级错误 | 拒绝订单 |
| 订单频率 | 无限循环 | 停用算法 |
| 每日亏损 | 连续失效 | 停止新增风险 |
| 保证金底线 | 账户压力 | 减仓或停机 |
| 总回撤 | 长期资本侵蚀 | 进入审核 |
独立限制是防止单一代码错误扩散的最后屏障。
订单状态机必须防止重复和幽灵订单
算法发送请求后可能遇到超时,客户端不知道服务器是否已成交。直接重试可能产生第二笔订单。代码应使用唯一意图标识,查询服务器订单和持仓,再决定重试,并对请求中、已接受、已拒绝、部分成交和未知状态分别处理。
重启后不能只读取本地内存,应从服务器重建状态,核对 Magic Number、品种、方向、数量和保护订单。人工订单与其他 EA 也要隔离,避免误管。
| 状态 | 允许动作 | 禁止 |
|---|---|---|
| 请求中 | 等待或查询 | 立即重复发送 |
| 已成交 | 登记订单 | 当作失败 |
| 已拒绝 | 记录原因 | 无限重试 |
| 未知 | 服务器对账 | 凭本地猜测 |
幂等和对账比重试速度更重要。
Exness VPS 降低本地依赖但不是保证
VPS 是远程虚拟电脑,可让 EA 在个人电脑关闭时继续运行,并减少家庭网络影响。Exness VPS 资格与维持条件显示在本人 PA,可能基于余额或交易量,不能把固定门槛写成适合所有账户的永久数字。
托管仍可能维护、重启或故障,用户负责终端和 EA 的正确运行。VPS 靠近服务器也不保证固定延迟、无滑点或盈利。使用自己的 VPS 时同样要测量连接与可靠性。
| VPS 作用 | 可以改善 | 不能保证 |
|---|---|---|
| 持续运行 | 减少个人电脑依赖 | EA 永不停止 |
| 网络位置 | 可能降低延迟 | 固定成交价格 |
| 远程访问 | 便于管理 | 自动安全 |
| 托管维护 | 集中环境 | 零停机 |
VPS 是基础设施,不是策略保险。
VPS 终止与重装会删除数据
官方说明,未满足持续资格或闲置要求可能导致 VPS 被终止,所有用户数据会被清除且不可恢复。主动删除或重装同样会移除 EA、脚本、时区和自定义设置。因此代码和配置不能只保存在 VPS。
在重启、重装或变更终端数量前备份,并先停用自动交易、确认服务器持仓和挂单。恢复后用 Demo 校验,再连接真实账户。还应监控资格警告,而不是等服务消失。
| 事件 | 数据风险 | 前置动作 |
|---|---|---|
| 重启 | 运行暂时中断 | 停用并监控 EA |
| 重装 | 全部本地数据删除 | 完整备份 |
| 资格终止 | 数据不可恢复 | 监控 PA 警告 |
| 迁移 | 配置差异 | Demo 恢复测试 |
唯一副本放在 VPS 等于没有可靠备份。
部署需要版本、批准与回退
每次部署应有唯一版本、源代码提交、编译产物校验、参数文件、批准人、目标账户和发布时间。开发版不能直接覆盖正在交易的稳定版,也不能在多个实例同时运行同一策略而没有账户隔离。
发布前冻结代码并重复关键测试;发布后核对首个信号、手数、止损和日志。回退方案要说明是否先平仓、如何处理旧版本持仓以及怎样防止两个版本同时接管。
| 部署物 | 记录 | 回退检查 |
|---|---|---|
| 源代码 | 版本与审查 | 可重建旧版 |
| 编译文件 | 校验值 | 防止错包 |
| 参数 | 账户与环境 | 不能混用 |
| 持仓 | 版本所有权 | 避免重复管理 |
可回退的发布比快速上线更可靠。
持续监控要覆盖健康与风险
只看盈亏无法发现算法失联。监控应同时包含终端在线、最后报价、最后心跳、订单拒绝、延迟、CPU 与内存、磁盘、EA 状态、持仓差异、保证金和风险限额。
告警要有级别、接收人、升级时限和静默规则。告警过多会被忽略,告警太少则无法提前发现。每天还应把本地状态与服务器历史自动对账。
| 监控层 | 指标 | 告警示例 |
|---|---|---|
| 基础设施 | 在线、资源、磁盘 | 心跳中断 |
| 市场数据 | 报价年龄与差异 | 价格停滞 |
| 订单 | 拒绝与未知状态 | 重复失败 |
| 风险 | 敞口、回撤、保证金 | 突破硬限制 |
健康监控回答“是否在运行”,风险监控回答“是否应继续运行”。
新闻、换日和市场状态需要明确规则
重大数据、央行决定、开收盘、节假日和换日会改变点差、流动性、滑点和保证金。算法必须明确是否在这些窗口禁开新仓、缩小仓位或继续交易,不能依靠操作者临时记忆。
事件日历也可能延迟或缺失,策略应有价格和点差层面的保护。若实际点差超过上限、报价过旧或市场关闭,默认拒绝新订单。周末持仓还要考虑跳空。
| 状态 | 检测 | 默认动作 |
|---|---|---|
| 点差异常 | 实时 Bid/Ask | 暂停新单 |
| 报价过旧 | 时间戳 | 停止决策 |
| 重大事件 | 日历与规则 | 按预案降险 |
| 市场关闭 | 交易时段 | 不重复请求 |
无法判断市场状态时,最安全默认是不开新风险。
备份必须包含代码、配置与运行证据
备份至少包括源代码、编译文件、依赖、参数、终端版本、账户映射、部署说明、日志和事件记录,但不应把明文密码或 API 密钥混入普通压缩包。密钥由独立秘密管理保存并可轮换。
定期在隔离环境恢复,验证能否重建相同版本、加载参数、连接 Demo、处理持仓和产生日志。只看到备份文件存在不能证明它可用。
| 对象 | 保护 | 恢复验证 |
|---|---|---|
| 代码与依赖 | 版本库与校验 | 可重复构建 |
| 参数 | 批准副本 | 逐字段比较 |
| 密钥 | 秘密管理与轮换 | 最小权限 |
| 日志 | 只读归档 | 时间线完整 |
恢复演练是备份质量的唯一有效证明。
紧急停止必须提前演练
紧急停止分为禁止新订单、取消挂单、停止 EA、关闭特定持仓和全部降险,不能只有一个含义模糊的按钮。每级动作由谁批准、在哪个终端执行、网络中断时如何替代,都应写入运行手册。
停机前后从服务器确认订单,防止界面超时导致重复操作。关闭 EA 不会自动关闭已有持仓;终止 VPS 也不是安全平仓方式。至少每季度在 Demo 演练。
| 停止级别 | 动作 | 仍存风险 |
|---|---|---|
| 暂停信号 | 不生成新意图 | 旧请求可能在途 |
| 禁用 EA | 停止自动执行 | 持仓仍存在 |
| 取消挂单 | 移除未触发订单 | 现有仓位 |
| 主动平仓 | 降低市场敞口 | 滑点与流动性 |
停止自动化与消除市场风险是两个步骤。
用无责复盘调查每次异常
发生重复订单、风险越限、数据中断或异常亏损后,先保存代码版本、参数、日志、服务器历史、监控和时间同步信息。不要立即覆盖 VPS 或删除日志。建立从信号到成交的时间线。
区分直接原因、促成条件和防护为何未拦截。修复后增加自动测试和监控,再在 Demo 重现。只责怪操作者或市场,不能防止同类事故。
| 复盘层 | 问题 | 产出 |
|---|---|---|
| 时间线 | 事件按什么顺序发生 | 统一证据 |
| 直接原因 | 哪个组件失败 | 技术修复 |
| 防护缺口 | 为何没有阻止 | 新增限制 |
| 验证 | 修复是否有效 | Demo 回归测试 |
复盘目标是改进系统,而不是美化策略记录。
算法退役也需要受控流程
策略失效、环境变化或维护成本过高时应退役。先停止新订单,确认在途请求,决定现有持仓归属,取消不再需要的挂单与权限,并保存最终版本、参数、订单和评估报告。
撤销 API 密钥、WebRequest 许可、远程账户和定时任务,删除 VPS 前完成加密备份。不要让无人维护的 EA 留在隐藏终端继续交易。
| 退役步骤 | 检查 | 避免 |
|---|---|---|
| 停止新增 | 无在途请求 | 突然关闭进程 |
| 处理持仓 | 明确人工或策略所有权 | 无人管理 |
| 撤销权限 | 密钥和远程访问 | 遗留入口 |
| 归档 | 代码、日志和报告 | 删除证据 |
安全结束与安全启动同样重要。
监测策略漂移并建立重新准入门槛
算法上线后,市场结构、波动、点差、品种规格和执行环境都会变化。即使代码完全没有错误,历史优势也可能衰减。监控不能只判断当前是否盈利,而应比较实时行为与开发阶段定义的基线,包括交易频率、持仓时间、胜率、平均盈亏、最大不利变动、滑点、拒单率和成本占毛结果的比例。
基线必须使用区间而不是单点。短期连续亏损可能仍在历史分布内,单笔盈利也不能证明策略恢复。预先规定观察窗口、最少样本、黄色预警和红色停止条件,避免在看到结果后改变标准。样本不足时应标记为未知,而不是自动判定正常。
性能偏离要先分类。信号数量变化可能来自市场状态,也可能来自时区错误、数据中断或参数文件加载失败;滑点恶化可能来自波动,也可能来自网络延迟;仓位变大可能来自净值增长,也可能是小数位或合约规格变化。将统计漂移、技术异常和风险越限混在一起,会导致错误修复。
检测到黄色预警时,限制新仓或降低风险,同时保存版本、参数、行情摘要和执行日志。达到红色条件时停止新增风险,从服务器核对持仓,并启动独立审核。不能为了让曲线恢复而立即优化同一段近期数据,因为这会把实盘噪声重新过度拟合进策略。
重新准入需要回到受控流程:提出具体原因假设,在隔离分支修改,使用不重叠数据完成回归、样本外、压力和 Demo 前向测试,再由另一人或明确审核清单批准。旧持仓由哪个版本管理必须写清,防止修复版与旧版同时下单。
如果无法证明偏离由可修复技术问题引起,就应接受策略可能失效。暂停或退役不是失败,而是风险系统正常工作。任何重新上线都必须生成新的基线和观察期,不能沿用旧策略的信誉。
| 漂移指标 | 可能解释 | 优先行动 |
|---|---|---|
| 交易频率突变 | 市场、时区或数据错误 | 核对信号与数据 |
| 滑点持续恶化 | 波动、延迟或流动性 | 逐笔执行分析 |
| 手数分布变化 | 净值、规格或计算错误 | 验证仓位公式 |
| 回撤超基线 | 策略衰减或环境变化 | 停止新增风险 |
| 拒单率提高 | 权限、价格或连接 | 读取服务器与 Journal |
| 成本占比上升 | 点差或交易过频 | 重新评估净优势 |
漂移控制的目标不是保证策略永远盈利,而是在证据不足或行为超出设计范围时及时缩小损害。严格的暂停和重新准入规则,也能阻止开发者因沉没成本而让失效算法持续消耗账户。
常见问题
Exness 可以使用 EA 做算法交易吗?
可以在桌面 MT4 或 MT5 使用兼容 EA。MQL4 对应 MT4,MQL5 对应 MT5;移动和网页终端不运行 EA。
使用 VPS 能保证 EA 不会中断吗?
不能。VPS 可减少个人设备与网络依赖,但仍有维护、故障、资格终止和终端或 EA 错误,需要独立监控和备份。
Exness API 在所有地区都可用吗?
当前官方说明仅在越南地区可用,只支持适用 Exness 平台账户,并存在当前品种限制。
回测盈利后可以直接实盘吗?
不应直接实盘。还需样本外、压力、Demo 前向、故障和小额实盘验证,并计入真实成本与执行偏差。
关闭 EA 后持仓会自动关闭吗?
通常不会。停止自动化与处理服务器端持仓是不同动作,必须核对现有订单、挂单和保护设置。
结论
可靠的外汇算法交易是一套可审计的工程流程,而不是一个盈利曲线或 EA 文件。规则必须无歧义,数据和成本必须真实,训练与样本外要分离,代码权限应最小化。部署前完成 Demo 前向和故障测试,实盘从可承受的小规模开始,并以独立风险限制、服务器对账、健康监控和紧急停止保护账户。VPS 改善持续运行,却不能保证策略、终端或托管永不失败;其资格与数据删除风险也要持续管理。每次更新可回退,每份备份要经过恢复演练,每次事故要保存证据并增加防护。自动化改变执行速度,不改变市场风险和用户责任。上线后的策略还必须持续与预设基线比较,区分市场漂移、技术故障和普通统计波动。超过硬限制时先停止新增风险,再调查,而不是临时改变参数追赶亏损。重新上线必须经过独立数据、Demo 回归和明确批准。若优势已经无法被证据支持,受控退役比无限优化更负责任。所有账户、平台、API 与 VPS 条件都可能变化,使用前应再次核对当前官方资料和本人 PA。每次运行都应留下可追踪、可复核并可安全撤销的完整证据。
