如何创建订购交易机器人的需求规范·综合运用
📋

如何创建订购交易机器人的需求规范·综合运用

(3/3)·很多人以为扔一句'做个顺势EA'就能拿到能跑的机器人,结果来回返工烧钱又烧信任

新手友好 第 3/3 篇
把'帮我写个能赚钱的机器人'直接贴进自由职业版块,多半换来的是反复改需求和无休止扯皮。程序员只能按你写的规则写代码,你没写清楚的边界他只能自己猜,猜错就是你的实盘在买单。外汇贵金属杠杆高,模糊需求跑出的逻辑可能在你睡着时连开十单。

「信号别一闪就废:给确认留个时间窗」

突破类系统里,信号刚冒头就直接进场往往吃亏。更稳的做法是等二次确认——比如阻力位被破后,再等价格回踩突破位附近才动手,这样入场位置更干净。 但回踩不会无限等。必须给信号一个生存期:突破信号最多有效 5 根柱线,或者撑到当前交易时段结束,超时未确认就直接作废。这个参数把「犹豫」量化成了可执行的规则。 在 MT5 里把生存期写成输入变量,就能叠加别的过滤器(如成交量阈值)一起卡信号。实测中,加了生存期过滤的突破策略,无效信号占比倾向下降,系统品质有概率提升。外汇与贵金属波动剧烈,这类参数仍需在真实账户前用历史数据验证。

◍ 让 MagicNumber 替你分仓记账

写发单函数时,别只给一个写死的 MagicNumber。按形态编号、入场日期甚至信号序号去算不同的 magic,同一套 EA 里就能并行跑多组策略,之后在 MT5 优化器里分别筛参数,互不串味。 单子不一定一次就成交。你得先定规矩:首攻失败是挂起等新 tick 还是直接重试?最多允许几次?日志里写什么、什么格式、要不要推送到手机?推送频率得卡住,避免被经纪商当成 DDoS 掐断。 订单注释字段顺手用起来,复盘时按注释筛历史快得多。注意交易服务器有时自己会往这字段塞内容,所以你自己的日志最好另开一列或者前缀标好,别被覆盖。 若策略带止损止盈,算法要写清:是开仓成功立刻挂,还是等下一 tick 确认持仓后再挂?比如只允许在价格朝盈利方向走够 N 点后才把止损从市价外推到成本线,这种细节不写明白,回测和实盘会对不上。

止损止盈与尾随的算法落点

砍掉亏损、让利润奔跑,翻译成算法就是每笔持仓必须挂保护性止损,而盈利单不该被固定止盈框死。止损和止盈的距离直接改写交易结果,很多人在来回试最优数值,但更稳的思路是把波动率、趋势方向和支撑阻力位一起塞进距离计算里。 MT5 上不少现成函数库能直接拿来用,你不必从零写 ATR 通道或挂单逻辑,在需求里写清规则就能交给程序拼装。下面这段伪结构列出了规范里该钉死的四类点,复制进你的 EA 设计文档就能用。 [CODE] // 1. 止损止盈距离算法:基于波动与价位 double sl_dist = iATR(_Symbol,_Period,14,0) * 2.0; // 2. 尾随停止:触发条件与步幅 trailing_trigger = PositionGetDouble(POSITION_PROFIT) > sl_dist * 1.5; trailing_step = sl_dist * 0.5; // 3. 挂单是否尾随及算法 bool trail_pending = true; // 挂单也跟尾随 // 4. 浮动盈亏监控平仓 if(PositionGetDouble(POSITION_PROFIT) >= take_level) ClosePosition(); if(PositionGetDouble(POSITION_LOSS) <= -stop_level) ClosePosition(); [/CODE] 上面代码里 ATR(14) 乘 2 只是示例参数,实盘外汇或贵金属波动剧烈,杠杆风险高,距离和步幅都得你自己在策略测试器里跑过再定。尾随挂单这开关默认开,但碰上跳空行情可能不成交,需加滑点容差。 把浮动盈亏监控写进每 tick 检查,而不是等定时器,能少漏掉几次极端扫单。规范里写‘等等’的部分,建议补一条:净值回撤超阈值时全局禁开新仓,这比单纯盯单笔盈亏更防黑天鹅。

MQL5 / C++
class=class="str">"cmt">// class="num">1. 止损止盈距离算法:基于波动与价位
class="type">class="kw">double sl_dist = iATR(_Symbol,_Period,class="num">14,class="num">0) * class="num">2.0;
class=class="str">"cmt">// class="num">2. 尾随停止:触发条件与步幅
trailing_trigger = PositionGetDouble(POSITION_PROFIT) > sl_dist * class="num">1.5;
trailing_step = sl_dist * class="num">0.5;
class=class="str">"cmt">// class="num">3. 挂单是否尾随及算法
class="type">bool trail_pending = true; class=class="str">"cmt">// 挂单也跟尾随
class=class="str">"cmt">// class="num">4. 浮动盈亏监控平仓
if(PositionGetDouble(POSITION_PROFIT) >= take_level) ClosePosition();
if(PositionGetDouble(POSITION_LOSS) <= -stop_level) ClosePosition();

「用时间和反向信号清场」

除了常见的止盈止损,MT5 里还有一种更灵活的退场思路:不盯盈亏绝对值,而是靠时间窗口和反向信号来取消挂单或平掉仓位。对外汇、贵金属这类高波动品种,这种玩法能帮你避开「单子挂了一整天却错过真正行情」的坑,但杠杆风险始终存在,别当成免死金牌。 具体可落地的触发条件有七类:基于浮动盈亏数值直接砍;价格从挂单开盘价跑出设定距离就撤(往往代表机会已溜走);到达指定时间点;走过指定根数 K 线;经过指定时间间隔;出现相反信号;原本有利的技术形态或设置失效。 实战中,把「相反信号」和「形态消失」两条写进 EA,比纯时间退出更省噪音。你可以在策略测试器里分别回测「第 3 根柱线后强制撤单」与「反向吞没即平」两种逻辑,看哪类在欧美盘重叠时段胜率倾向更高。

◍ 先别急着写手数算法

不少人在搭 EA 的第一阶段就把仓位计算塞进去,但这步建议往后放。优化阶段多一个手数输入参数,很容易在历史数据上过拟合,反而看不清策略本身行不行。 用固定手数测第一个版本最干净。等你在历史样本外跑过前瞻测试,再叠几个月实盘,把算法的弱点和优势摸透,才值得加资金管理。 常见的手数算法有这几种:固定量不看盈亏;按余额或净值比例;跟随近期盈利亏损;基于最近 N 笔做翻倍或逆翻倍;按设定止损对应的风险百分比;以及文斯(Vince)这类风险模型。 加仓算之前先确认一件事——你的系统得明显优于随机交易。靠资金管理方法把亏钱系统救成赚钱系统,概率上不现实,那只是自欺。外汇和贵金属杠杆高,乱加仓算法会放大回撤风险。

让 EA 自己交代每一笔单子

EA 是 24 小时自主跑的程序,人不可能一直盯屏,所以必须给它一套自报机制。最朴素的做法是用 Print() 把流水账写进日志:在发单之前,先把信号、形态、当时市场价、交易请求参数全记下来,这样事后复盘才知道它当时“看见了什么”。 如果 OrderSend 或 CTrade::Send 返回失败,千万别只闷头重试。把返回代码(retcode)连同请求内容写进日志,对照交易服务器文档查原因——是禁交易时段、点差超限,还是保证金不足,定位快得多。需求文档里应提前定死三件事:什么场景必须写日志、每条记哪些字段、格式怎么统一(时间戳、分隔符、小数位)。 新手常栽在环境中断上:终端重启、VPS 掉线、券商服务器断连,EA 可能悄无声息地停了。用 SendNotification() 推手机通知,或 Mail() 发邮件,比事后发现漏单再拍大腿划算。外汇和贵金属杠杆高,这类静默失效可能直接放大成实亏,环境监控不是可选项。

「柱线开盘信号与柱内刷单的边界」

EA 在 MT5 里靠 OnTick() 响应 NewTick 事件,一根柱线存活期间能进来几十甚至上百次逐笔报价,逻辑若每次都跑就会反复触发。以均线交叉为例,若不在柱线开盘第一次 tick 锁信号,可能出现交叉闪现又消失,导致同一根柱内多次开平仓。 只在开盘做信号的写法要点有两个:第一次 tick 取指标值和账户环境后,用静态标志位跳过后续 tick;若首 tick 因点差或流动性没成单,要决定是放弃本柱还是延后补单,而不是无脑追。 验证手段很直接:在「每次逐笔报价」或「基于真实逐笔报价的每次逐笔报价」模式跑可视化测试,若历史某段一根柱里出现 3 次以上同方向操作,基本能断定代码没隔离柱内重复信号。直接把指标拖到图表对照不同周期,比看日志更快定位。

◍ 开盘触发与剥头皮的致命敏感点

新手写 EA 建议先锚定新柱线开盘事件,逻辑只在 bar 起点跑一次,调试成本最低。验证方法很直接:把测试器设为「仅开盘价」跑出的权益曲线,必须和「每次逐笔报价 / 基于真实逐笔报价的每次逐笔报价」两种模式的结果对得上,对不上说明代码里混进了未来函数或跨 bar 引用了盘中价。 在 bar 内部吃逐笔流做决策的系统要难一个量级,持续报价下的状态机、成交回执和重算逻辑都得自己兜底,MetaTrader 5 的调试器要结合真实 tick 回放逐步跟。 剥头皮机器人对外盘条件极度挑剔:点差跳一点、佣金改一档、网络多 20 毫秒、历史有缺口或 VPS 掉速,都可能让策略从盈利变爆仓。外汇和贵金属本身高杠杆高波动,这类系统实盘前务必在模拟盘压测极端滑点。 别把真剥头皮和扛点马丁混为一谈。后者靠吃 90%–99% 的历史胜率迷惑人,每单只博几个点但容忍数十到数百点浮亏,逻辑赌的是价格回归概率。回测漂亮,实盘也可能先赚几个月,但一次 50–100–300 点的单向爆发就能把之前利润全吐回去。

逆势加仓只是在推迟爆仓

很多算法交易者不愿意去打磨信号质量,而是靠在一个方向上不断加单、按价位或浮亏手动改手数来「改善」曲线。网格、马丁格尔翻倍加仓、亏损摊薄都属于这一类技术解法。 这类写法让 EA 逻辑变重,程序出错概率上升,更麻烦的是多出来的可调参数会直接放大过拟合风险。历史回测里它们往往看起来平缓,但本质不是提升系统稳定性,只是把崩溃时间点往后挪。 更稳的路子是先在一个品种上搭几套互不相干的简单系统做组合,再慢慢铺到不同金融产品上。和那种塞满优化参数的复杂马丁类 EA 比,简单系统的组合抗市场切换的能力明显更强,外汇和贵金属杠杆高,逆势翻倍一旦碰上单边极易大幅缩水,实盘前务必在 MT5 策略测试器里跑极端行情样本。

「怎么从报价里挑出靠谱的EA开发者」

在自由职业板块下发完智能交易系统订单后,往往会同时收到好几个开发者的回函。成本和质量怎么比,第一步不是看谁吹得牛,而是看对方有没有反过来问你需求规范里的细节。 有经验的开发者通常不会拿之前做过的复杂系统来镇场,也不会跟你扯交易哲学或编程有多难。他们惜时,会把精力放在弄清你的具体指标触发条件和下单逻辑上。 如果订单描述本身够清楚,负责任的程序员会直接给出报价和工期;若发现规范里有模糊点,他会先标出来让你补,而不是闷头按猜测写。 要注意,需求补得越晚,咨询和返工越可能推高总费用和交付时间。优秀开发者开工前会把不明确的点一次问清,你拿到这类回函,优先聊清楚再定人,比单纯比低价更稳。外汇与贵金属EA开发本身高风险,代码逻辑漏洞可能放大实盘亏损。

◍ 别急着下结论

手工核对过几周盈利,不等于 EA 在历史回测里一定不亏。策略测试器能跑任意历史区间,短期手工观察往往只覆盖了趋势单边段,震荡或极端波动年份一拉出来就可能翻红为绿。 程序员写不出点石成金的代码:策略本身亏损,他最多加趋势、成交量类过滤器压住假信号,或帮你把参数对年份、波动率做优化暴露弱点,但交易系统分析得你自己做。 代码层几乎必有暗病——算法对但写错、逻辑分支漏判都常见。需求文档里要写明发送订单、算止损等每一步必须处理返回码并记日志,用预定义宏替换定位报错行,不然你和开发者沟通会卡在「好像没报错但就是不对」。 把这三件事(过滤器思路、自己跑优化、规范错误码)先落进需求再发包,比催进度更有用。外汇贵金属高杠杆,回测顺滑也只是概率优势,真金白银前留好样本外验证的余地。

把需求草稿丢给小布先过一遍
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到信号生存期和环境状态的检查模板,你先把策略要点填进框架,再发给开发者能少走大半弯路。

常见问题

取决于策略周期, scalp 类可能只看当前柱,波段类可跨数根柱;文档里要明确过期取消还是转挂单。
必须写明加仓倍数、最大层数、净值回撤硬止损,并单独列一节说明你知晓其放大亏损的阴暗面。
可以,利用内置的策略拆解卡把信号、下单、风控点列出来,导出文本就能作为自由职业版块订单描述的底稿。
开盘价只需OnTick判断新柱,柱内要处理实时报价与重绘,需求不写清会让开发者低估工作量。
他写不出你没定义的盈利逻辑,也不能替你承担策略失效的实盘风险,验证与参数假设归你。