如何创建订购指标的需求规范·进阶篇
把想法画出来:截图与原型工具怎么选
写需求规范时,纯文字经常说不清界面长相和逻辑分支。用 ScreenPresso 做截图标注最省力:箭头、文本框、形状都能拖出来,还支持录屏,私人使用免费,截图直接拖进自由职业者订单对话框即可。 若需要更重的编辑,PicPick 可作补充,同样免费且二者互补。界面草图别手绘,Pencil 能在 5–10 分钟内拉出任意面板原型,自带流程图模块,适合把复杂算法画成可视逻辑。 流程图专门用来暴露条件分支与循环,数学向的计算可用 Excel 列公式,SmartArt 则快速出示意图。核心就一条:给开发者的交付物里,图文+流程图+表三者缺一不可,描述越直观,返工概率越低。
◍ 把指标思路拆成可编码的算法步骤
指标本质是某种交易思路的可视化。动手写需求前,先用文字加示意图把思路讲透,否则开发端很容易按自己的理解跑偏,返工成本远高于前期沟通。 接着把计算与显示逻辑写成一串有序操作。凡是出现术语,必须当场给死定义,比如「日线范围 = 当日最高价减最低价」「平均范围 = 近 N 日日线范围的均值」「横盘 = 实体都在窄通道内重复的蜡烛区」。双方对词意等同,代码才不会歪。 算法按执行先后切阶段,用数字、列表、粗体标清,别在规范里前后跳。一个模块写明白再进下一环。下面这段就是按最终程序运行顺序排的示例骨架:先取日线范围,再算 N 日平均,判定横盘带宽,最后在满足条件的 K 线旁标信号。 MT5 上验证时,可先把 N 写死为 20,加载到 EURUSD 日线,肉眼核对平均范围数值与脚本输出是否一致,再谈参数优化。外汇与贵金属波动突变频繁,这类统计型定义在高波动周可能失效,需带止损纪律。
「把需求拆成可验收的指标规格」
做定制指标最怕需求一句话带过。把思路写成『分阶段验收』的规格,能直接决定你后续在 MT5 里调参和排错的效率。 以基于振荡器的之字折线为例,第一阶段先锁死极值判定:WPR 下 Value > -20 判超买、Value < -80 判超卖,这两个阈值必须做成外部参数。超买烛台高点打黄点(H),超卖低点打绿点(L),两 H 之间出现至少一个 L 才搜 LL 点——LL 不一定是 L,只是区间内最低价蜡烛。 第二阶段才是趋势染色:连续三个 HH 且逐级抬高,夹在中间的 LL 也抬高,这五点之间的折线腿染红;若后续极值继续抬高,再染两段蓝,视为上涨倾向。下跌镜像处理。注意这里用的是『倾向』而非确认,外汇与贵金属波动大,假突破概率不低。 第三步把振荡器类型做成枚举参数,默认 WPR,并为 CCI、Chaikin、RSI、Stochastic 各配一对带前缀的阈值(如 CCImax、STOmin)。第四步要求图形面板可最小化、拖动、切换振荡器并删除指标——这类面板用 CTRL_OBJECT 事件处理,别在主循环里轮询鼠标。 另一个实战规格是 NRTR 改 MQL5 并加通知:原 MQL4 代码在 mql5 代码库 7760 号。通道翻色时发推送和邮件,但要加 StartHour / EndHour 避开夜间,且每根柱线只发一次、仅在收盘突破后发,所有消息写日志。三个缓冲区 Up / Down / Trend(-1或1) 必须暴露给 iCustom 调用。 跨币种相除指标则更简单:EURUSD 与 GBPUSD 汇率相除得 EURGBP 参考线,独立窗口里绿线算值、红线真值,从当前时间向左画,M1 图表上每隔一分钟打垂直标记。逐笔报价刷新,空间占用比主图密,不标间隔会读歪。 下面这条是 NRTR 翻转时通知文本的字段样例,直接对应上面第 5 点格式要求,复制进 StringFormat 就能用: NRTR on EURUSD H1 has turned upwards. Up=1.23560, Down=1.23300, Brick=260 pips
NRTR on EURUSD H1 has turned upwards. Up=class="num">1.23560, Down=class="num">1.23300, Brick=class="num">260 pips
给 MT5 指标写需求时别漏掉这些点
指标本质是价格或时间序列的可视化工具,下单给开发前先把绘制类型定死:折线最干净,直方图常做振荡器,箭头符号能标出入场离场甚至挂 NRTR 通道,区域通道和之字折线各有适用场景,Heiken-Ashi 这类异种 K 线要用柱线或蜡烛条重绘。多个数据序列记得让程序员给每个缓冲区起易懂名,不然数据窗口里一堆 Buffer1、Buffer2 根本没法用。 颜色别只写「用红蓝」,若要根据多空动态变色,必须把判定条件写成明确算法,例如收盘价上穿均线转绿、下穿转红,含糊一句「自适应配色」开发出来八成不是你要的。绘制位置(主图还是子窗口)、是否跨品种跨周期抓取数据也要写清——若目标品种历史柱线不足,指标该报错还是等待,这条不写就容易在黄金 M1 上跑出空值。 计算触发频率直接决定回测速度。每笔报价都跑 Calculate 最准但最慢;若只在新柱成型后算一次,用该指标的 EA 在策略测试器里能明显提速。下面这段 Chaikin Volatility 的参数声明就是反面教材变正面教材:把程序员习惯的短名换成交易者能读懂的中文注释,终端参数窗才不至于劝退用户。 [CODE] //--- 平滑类型枚举 enum SmoothMethod { SMA=0,// 简单均值 EMA=1 // 指数均值 }; //--- 输入参数 input int InpSmoothPeriod=10; // 平滑周期 input int InpCHVPeriod=10; // CHV 计算周期 input SmoothMethod InpSmoothType=EMA; // 平滑方法 [/CODE] 逐行拆:enum 定义两种均值法,SMA 对应简单移动、EMA 对应指数移动;三个 input 变量分别暴露平滑周期(默认 10 根)、CHV 自身周期(默认 10 根)、以及用哪种平滑,注释直接显示给用户,比 i1/i2 强太多。 重绘是历史指标最坑的点。同一 EURUSD M5 参数,今天开终端跑一天和明天冷启动再跑,数值对不上就说明算法依赖启动时刻。老手能嗅出这种毛病,需求里应明确要求「禁止基于启动时刻的重绘」或让开发标注风险。 报警和图形面板现在 MQL5 能玩很花:PlaySound、Alert、推送通知、邮件乃至 SendFTP 发报告都能加;想要面板拖拽缩放、响应鼠标滚轮和组合键,提前列清事件清单。解释性截图别堆细节,二到三张放大比例、标准蓝红配色的形态识别图,比一整屏花哨标注更有用。 验收阶段用可视化测试器跑不同行情段,让开发做代码分析揪慢函数,必要时手加时间计数器看哪段最耗时。出错就附集合文件、品种周期、服务器类型和终端版本号,黄金外汇杠杆高、跨周期取数易错,这些日志齐了问题才复现得了。
class=class="str">"cmt">//--- 平滑类型枚举 enum SmoothMethod { SMA=class="num">0,class=class="str">"cmt">// 简单均值 EMA=class="num">1 class=class="str">"cmt">// 指数均值 }; class=class="str">"cmt">//--- 输入参数 class="kw">input class="type">int InpSmoothPeriod=class="num">10; class=class="str">"cmt">// 平滑周期 class="kw">input class="type">int InpCHVPeriod=class="num">10; class=class="str">"cmt">// CHV 计算周期 class="kw">input SmoothMethod InpSmoothType=EMA; class=class="str">"cmt">// 平滑方法
◍ 把工具请下神坛
写清楚需求规范,本质是把你脑子里的交易逻辑翻译成开发者能落地的参数与边界。MQL5 的自由职业板块里,有经验的程序员能做出任意复杂度的指标或 EA,但前提是订单描述别只写“年化 5-6、存款 1000 美元”这类空目标——评论区里就有人这样下单被拒,因为缺乏可验证的入场、止损与品种约束。 直接拿前文那几条提示去和开发者沟通,比闷头想“从哪开始”有用。外汇和贵金属杠杆高、滑点无常,任何程序都只是执行你策略的锤子,不是印钞机,实盘前务必在 MT5 策略测试器里跑一遍历史数据。 工具链就摆在终端里,下载最新版客户端就能调参数、看回测。把它当日常扳手,别当神签,订单沟通越具体,拿到手的东西才越接近你真正想盯的盘。