理解编程范式(第 1 部分):开发价格行为智能系统的过程化方式(基础篇)
用过程化思路搭价格行为系统
在 MT5 里做价格行为智能系统,最直白的入口是过程化编程:把「取数据—判形态—下指令」拆成顺序执行的函数,而不是先抽象成对象。对老交易员来说,这种写法读起来像把盯盘动作逐条写进脚本,改一处逻辑不影响全局结构。
过程化方式的核心是把 K 线状态、形态识别、信号过滤分别写成独立模块。比如先拉最近 N 根收盘价,再判断吞没或 pin bar,最后用成交量或 ATR 做二次过滤。MT5 的 MQL5 原生支持直接调用时间序列数组,回测时一根根 bar 推进,和手动复盘节奏一致。
下面这段演示了过程化取价与简单吞没判断的骨架。注意 CopyClose 返回的数组下标 0 是最新 bar,循环要从老往新比才符合形态定义。外汇与贵金属杠杆高,任何形态信号都只是概率倾向,实盘前务必在策略测试器跑足样本。
class="type">class="kw">double close[class="num">10]; CopyClose(_Symbol,_Period,class="num">0,class="num">10,close); class="type">bool isBullishEngulf=class="kw">false; for(class="type">int i=class="num">9;i>class="num">0;i--) if(close[i]<close[i-class="num">1] && close[i-class="num">1]>close[i-class="num">2]) isBullishEngulf=true;
「MQL5 写法的路线选择」
做 MT5 交易工具时,代码怎么组织并不是只有一条路。编程范式相当于写代码的指导性蓝图,不同范式就像去同一个目的地可以选不同路线,用 MQL5 完成任务也存在多种写法。 本系列两篇会拆开讲构建交易工具所需的基本范式,重点放在短洁、能跑出结果的做法上,而不是堆砌语法。 每讲一种风格,都会直接写一个能用的智能交易系统来演示,读者开 MT5 新建 EA 就能对照复现。
◍ 三种范式先认门
写 MQL5 前得先分清路数。过程化、函数化、面向对象,是这套语言里能落地的三种主要范式,各自管不同的开发场景。 本文先拆前两种:过程化是主轴,函数化因为写法相近顺带讲;OOP 留到下一篇。 范式不是装饰,它直接决定你怎么组织 EA 逻辑、指标计算和风控模块。选错范式,后期改策略成本会明显抬高。
把交易逻辑拆成一条顺序指令链
过程化编程的本质,是把一个交易问题压扁成一条计算机能逐行跟跑的指令链。就像给 EA 写开仓条件:先取均线值,再比价,最后发订单——每一步都是显式改变程序状态的命令,而不是甩给引擎一个模糊目标。
它的几个硬性质直接决定你 MT5 脚本好不好维护:函数把买卖规则封成独立模块,改一处不影响全局;自上而下的设计让你先写「日线趋势过滤」再拆到「小时级入场」,子任务单独调;变量在运行期反复被改写,比如 ticket 从 -1 变成真实订单号,这就是过程化状态变更。
顺序执行意味着语句严格一条接一条跑,碰到 for 循环扫品种、 if 判信号才跳转。模块化加可重用性,让你写好的 IsNewBar() 函数在十个指标里直接抄,冗余低、排错快。可读性对老手也友好——线性流程顺着读就能看出逻辑断点。
外汇与贵金属杠杆高、滑点跳空频繁,过程化 EA 若没在顺序里显式处理 TradeResult 返回码,可能漏单或重复开仓,实盘前务必在策略测试器跑历史 Tick 验证。
「MT5 里把函数当变量的不变性写法」
在 MQL5 写 EA 或指标时,过程化思路常让全局变量在 OnInit、OnTick 之间被反复改写,调试时很难追溯某根 K 线到底用的哪份状态。函数化思路反其道:数据一旦生成就原样不动,要变就生成新副本,老数据继续留着。这样回测里每一 tick 的输入是可预测的,不会冒出隐蔽的副作用把信号搞歪。 函数作为一等成员是这套写法落地的关键。MQL5 里函数指针能赋给变量、能当参数传、也能被别的函数返回,于是可以拼出高阶函数,把“算信号”“过滤噪声”“发单”拆成小块再组合。声明式风格顺带让代码读起来像在说“要什么”而不是“先干嘛再干嘛”,后期改逻辑不容易牵一发动全身。 递归和高阶函数在处理不定层级的形态识别时很实用,比如从一根 K 线往上数 N 层嵌套回调。但注意 MT5 栈深有限,递归层数过多会直接崩 EA;外汇与贵金属杠杆高、跳空频繁,任何代码结构改动都先开 MT5 策略测试器跑一遍历史再上模拟盘。
◍ 用 EMA 边界写价格行为 EA 的入场判定
把前面那套过程化思路落到实盘,最轻量的做法是用一根 EMA 当多空分水岭,不叠加其它指标。MQL5 自带移动平均线指标,直接挂进 Expert Advisor 就能跑,省去自己写均线内核的麻烦。 多头触发只看一根已收盘 K 线:它必须是阳线(收盘价大于开盘价),且整根实体被 EMA 压在下方——也就是最低价和最高价都高于均线值。空头反过来,阴线且最高最低均低于 EMA。这种写法把「价格行为」收敛成边界条件,逻辑一眼可审。 离场交给三层兜底:用户设定的账户盈亏百分比、传统止损、或止盈单任一触发即平掉所有持仓。外汇与贵金属杠杆高,百分比平仓阈值建议先在策略测试器里用 2020—2023 年 H1 数据回测,再上模拟盘。 开 MT5 新建 EA,把 EMA 周期先设 20,阳线边界判定那段可直接套下面的函数骨架,改周期只看 iMA 句柄参数。