学习为什么、以及如何设计算法交易系统(基础篇)
📘

学习为什么、以及如何设计算法交易系统(基础篇)

第 1/3 篇

算法交易系统的设计起点

在 MT5 里做算法交易,第一步不是写代码,而是先想清楚系统要解决什么市场问题。很多交易者直接照搬指标金叉死叉,结果在震荡市里被反复打脸,根源在于没定义清楚策略的边界条件。 以 MetaTrader 5 为例,它的策略测试器支持基于真实分笔的逐笔回测,这是验证系统逻辑的基础设施。2022 年 4 月该平台相关技术文被浏览 3389 次、收到 19 条讨论,说明手动转自动的需求一直很实。 外汇与贵金属杠杆高、跳空频繁,任何算法系统都只是概率工具,可能盈利也可能连续回撤。开 MT5 后先建一个空 EA 框架,把进出场假设写成注释,比直接堆指标更有用。

「用代码把情绪锁在交易之外」

做交易的人大多败给同一件事:不是看不懂图,而是临场被情绪带偏。手动下单时,浮亏会诱发扛单,浮盈会诱发早跑,纪律写在纸上却很难落在账户里。 MQL5(MetaTrader 5 内建语言)的价值正落在这里:你把入场、出场、仓位写成预定参数,程序按规则跑,人为干预被物理隔离。情绪对决策的影响概率因此显著下降,系统是否执行只取决于代码逻辑而非心态。 设想两位策略完全相同的投资者,都在上升趋势买入持有、逆转时卖出:A 严格按规则走,B 随情绪临场改主意。长期看,A 的权益曲线更平滑,B 容易出现不该有的回撤与踏空——差别不在认知,在执行的机械程度。 后面我们会用一条双均线交叉系统做载体,从 MQL5 基础语法写到可运行脚本,让你在 MT5 里自己编译验证。外汇与贵金属杠杆高、波动烈,任何自动化系统都只降低情绪干扰,不消除爆仓风险,请仅作教育用途实测。

◍ 动手前先备齐这套环境

写算法交易之前,先把三样东西落在本地:MT5 终端、券商开的模拟账户、以及 MQL 编辑器。MT5 是目前零售外汇与贵金属交易者覆盖率最高的执行与回测终端,下单和策略验证都靠它。 模拟账户必须用。任何自己写的 EA、指标或脚本,都先在虚拟资金环境下跑,实盘账户只留到最后接真金白银。外汇和贵金属本身杠杆高、滑点跳空频繁,没经过模拟验证的代码直接上实盘,爆仓概率会显著放大。 MQL 编辑器有三种打开方式:终端顶部「工具」菜单里点 MetaQuotes 语言编辑器;直接点工具栏的编辑器图标;或者终端聚焦时按 F4。编辑器是后续写代码和设计交易系统的主战场。 新建文件时会让你选程序类型,本文只碰三类:智能交易系统(EA)按你设的参数自动分析和下单;自定义指标做初步计算的图形化呈现;脚本只执行单次动作,靠手动请求触发,不像 EA 跟着逐笔报价实时跑。

用 Alert 在 MT5 弹出第一句代码

打开 MetaEditor 后新建一个 Script(脚本)类型文件,名称填 Hello World,作者和链接随意,参数页留空直接 Finish。系统会生成带 OnStart() 入口函数的骨架,我们只在两个花括号之间补一行调用即可。 MQL5 里 Alert() 负责向终端弹窗输出一段预设文本,括号里用英文双引号包裹字符串,行尾以分号结束语句。下面这段就是最小可运行体,编译后错误选项卡应为 0 error / 0 warning。 按 F4 回到 MT5,导航窗里Scripts下找到刚写的脚本,拖到任意图表,会立刻弹出写死的「Hello World!」提示框。这一步不碰行情,但能确认你的编译—部署链路是通的,后续接价格行为逻辑前先保证这块不出错。 外汇与贵金属杠杆高,脚本误触虽不直接下单,但环境配置混乱可能让你在实盘图表上跑错程序,建议先用模拟盘终端验证逻辑。

MQL5 / C++
class=class="str">"cmt">//+----------------------------------------------------------+
class=class="str">"cmt">//|                                                Hello World!.mq5 |
class=class="str">"cmt">//|                                     Copyright class="num">2022, MetaQuotes Ltd. |
class=class="str">"cmt">//|                                         [MQL5官方文档] |
class=class="str">"cmt">//+----------------------------------------------------------+
class="macro">#class="kw">property copyright "Copyright class="num">2022, MetaQuotes Ltd."
class="macro">#class="kw">property link      "[MQL5官方文档]
class="macro">#class="kw">property version   "class="num">1.00"
class=class="str">"cmt">//+----------------------------------------------------------+
class=class="str">"cmt">//| Script program start function                            |
class=class="str">"cmt">//+----------------------------------------------------------+
class="type">void OnStart()
  {
   Alert("Hello World!");
  }
class=class="str">"cmt">//+----------------------------------------------------------+

「双均线穿越的逻辑雏形」

用两条简单移动平均线(SMA)确认趋势,是入门级量化思路里最直白的一种。SMA 本身滞后,因为它取指定周期的平均收盘价,信号永远晚于裸价行为一步;但正因如此,它过滤了部分噪音,适合拿来识别已形成的倾向。 具体规则只有两条:20 周期 SMA 上穿 50 周期 SMA,视为买入信号;20 周期 SMA 下穿 50 周期 SMA,视为卖出信号。这里 20 和 50 是常见日线/小时线组合,读者可在 MT5 里直接拖两个 SMA 指标验证交叉频率。 外汇与贵金属杠杆高、滑点大,均线交叉在震荡市会连续假突破,实盘前务必用策略测试器跑历史数据。本思路仅作 MQL5 编程练习用,任何账户真金白银跟随需自担风险。 下一步就是把这些规则写成程序,让 EA 自动识别穿越并下单,而不是靠肉眼盯盘。

◍ 先把交易思路画成流程图再写代码

想让 MT5 里的 EA 不写歪,动键盘前先拿一张图把策略步骤钉死。以双简单移动平均线交叉为例,蓝图里要标清:哪条快线、哪条慢线、金叉怎么开、死叉怎么平,系统才会严格按你画的顺序跑,而不是边写边改把自己绕晕。 这一步不碰任何收益承诺,只解决「代码和思路对不上」的老毛病。你可以用纸笔、思维导图或任意示意图,核心是把「条件→动作」链路可视化;MQL5 里后面要落地的每个判断,都能在图里找到对应框。 外汇与贵金属杠杆高、滑点跳空频繁,蓝图再清楚也只是降低编码误差,不消除实盘风险。下一篇我们再拆 MQL5 基础语法和这套设计具体要用到的函数。

常见问题

先从把交易思路画成流程图开始,明确进出场条件,再考虑写代码,避免边写边改。
把买卖规则写成固定逻辑让程序执行,人工只做监控,可显著减少临场冲动交易。
小布可把你的口头策略转成流程图与雏形代码,并提示常见逻辑漏洞,省去从零梳理。
需备好交易终端、编辑器及基础语法环境,确保能编译运行最小提示样例再扩展。
适合理解逻辑雏形,但震荡市易频繁假穿越,建议先加过滤条件再实盘验证。