最后由 llwznet 于 2026-8-28 12:33 编辑
【学习笔记】"一次一单"源码整理 + 入场条件可视化排查(附实盘实测)
大家好,最近在论坛看到【【一次一单源码】一周时间给客户破解的,结果不开仓】出处:https://www.eahub.cn/thread-202934-1-1.html,这个朋友分享的源码,出于学习目的下载下来研究了一下。原帖提到"不开仓",这个描述很有意思——如果是代码逻辑问题,通常回测和实盘会一起挂;如果回测正常而实盘异常,更可能是某些初始化/定时器/可视化层面的问题,而不是策略核心本身。于是我把源码通读了一遍,做了清理、整理和可视化增强,现在不仅回测能开仓,我在 1 分钟实盘测试中也已经正常开仓。这里把排查思路、改动内容和实测效果分享出来,供感兴趣的朋友参考。
一、先说说"实盘不开仓"这个疑点拿到源码后,我首先在策略测试器里跑了老版本,发现回测是会开仓的。实盘不开仓"。那问题就不在"策略逻辑算不出信号",而在于实盘加载后某些非交易模块没有正确启动,或者交易者看不到 EA 到底卡在哪一步。
顺着这个方向读源码,很快找到几个可以整理和补强的地方:
1. 授权相关代码的历史残留。这个源码早期版本带过授权机制(DLL 调用 + SN 校验函数),前面的修改者已经把核心授权逻辑注释掉了,EA 本身是可以正常交易的。但源码里还留着被注释的 DLL 导入块、授权校验函数、SN 解码函数等死代码。这些内容不参与运行,但会让源码显得臃肿。我把这些历史残留彻底清理掉,让代码回归干净。
2. OnTimer 定时器被连带关掉。源码里有一个靠定时器驱动的信息标签模块(杠杆 / 风险提示 / 保证金等),原本在初始化时通过 EventSetMillisecondTimer 启动。由于它和授权逻辑写在一起,前面关闭授权时把这部分也一并注释掉了。后果是:EA 加载后信息标签不刷新,交易者看不到 EA 是否在正常运行。我把定时器重新在 OnInit 里启用,恢复了这部分信息展示。(该模块只负责画标签,不影响交易逻辑本身。)
3. 24 条编译器告警。MetaEditor 在 strict 模式下编译,原版会报 24 条 warning,主要是 datetime→int 隐式转换和局部变量未初始化告警。我逐个补了显式 (int) 强转、给裸局部变量补了默认初值、删除了一个未使用的变量声明。整理后重新编译达到 0 errors / 0 warnings。
4. 策略逻辑本身是完整的。
- 风控:移动止损 + 多条件平仓(回布林带 / 保本 / 反转 / 部分平仓)。
是一套模块齐全的"布林带突破 + 网格 + 移动止损"体系,核心逻辑没有缺失。
二、关键增强:入场条件可视化监控面板做完代码清理后,我发现即使逻辑正确,交易者 still 很难判断"为什么现在不开仓"。布林带的收口/突破、Zigzag 过滤状态、突破确认条件等七七八八的判定都藏在 OnTick 的嵌套 if 里,不读源码根本不知道自己卡在哪。
于是我在图表上加了一个实时入场条件监控面板:
- 全部满足时直接提示"已满足入场条件:开多 BUY / 开空 SELL";
- 同时标注当前图表周期和布林带参数,比如 M1·Bands=96。
这相当于把 EA 的"内心世界"实时展示在图表上。如果不开仓,一眼就能看出是布林带没收口、还是价格没突破、还是 Zigzag 过滤未就绪。实测过程中,面板上的条件变化和市场走势完全对应,确实能解释为什么某一根 K 线后突然开仓、为什么另一些时候一直等待。
三、我的改动清单(只清理 + 增强、不动策略逻辑)- ① 清理历史残留:移除被注释的 DLL 导入、授权校验、SN 解码等死代码;
- ② 恢复定时器与信息标签:EventSetMillisecondTimer 重新启用,杠杆 / 风险提示 / 保证金标签恢复刷新;
- ③ 消除 24 条告警:类型转换补 (int)、裸变量补初值、删除死变量;
- ④ 新增入场条件监控面板:ShowEntryPanel + ecLabel,7 个条件绿红显示,全部满足提示开多/开空方向;
- ⑤ 新增图表指标参考线(可选开关):ShowIndicatorsOnChart 开启后,在图表上画出布林上轨/中轨/下轨和 Zigzag 最新转折价位的水平参考线,方便对照;
- ⑥ 新增 Zigzag 过滤开关(可选):UseZigZagFilter 放到参数面板,默认开启,用户可按需关闭;
- ⑦ 编码规范:保持 UTF-16 LE,括号平衡校验通过。
原则:尊重原作者实现,只做清理和可视化增强,交易逻辑一行没动。
四、实测结果- 重新编译:0 errors / 0 warnings;
- 入场监控面板:能实时解释为什么不开仓(比如布林带宽未收口、ZZ 未就绪、价格未突破上轨等),也能在条件全部满足时明确提示方向。
五、一点心得拿到"回测正常、实盘异常"的 EA,第一反应不应该是去改策略参数,而是先检查:
- OnInit / OnTimer 这些骨架函数有没有被无意中关掉;
把这四件事理清楚,问题往往就浮出水面。后面如果再遇到类似"不开仓"的反馈,我会优先给对方看入场条件面板,而不是直接改参数——知道卡在哪一步,比盲目调参重要得多。
顺便介绍一下自己(承接各类量化开发)借着这个帖子简单介绍下。我长期做 MT4 / MT5 量化开发,熟悉 MQL4 / MQL5 双语言,能承接以下业务:
- ✅ EA / 指标 定制开发、修改、调试、优化:老旧 EA 翻新、提速、加风控;
- ✅ MT4 ⇄ MT5 互转:一套策略跨平台运行;
- ✅ 指标开发:各类技术指标、信号面板、多周期多品种监控;
- ✅ 面板 UI 增强:实时信息面板、历史累计统计、新闻风控展示等可视化;
- ✅ 授权保护:本地授权验证、网络验证,保护正版作品;
- ✅ 疑难杂症排查:不开仓、乱开仓、止损不触发、回测与实盘不一致等。
有需求的朋友欢迎交流,先看东西再谈,靠谱不啰嗦。
—— 亮亮出品 |
|