请观看如何免费下载自动交易
请在Twitter上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
EA

SessionReopenEA - MetaTrader 5EA

Gianluca Gangemi
Gianluca Gangemi
  • MQL5 / MetaTrader 5 developer 在  Freelance
  • 意大利
  • 591
MQL5 开发者,专注于 MetaTrader 5 自动化:智能交易系统(EA)、风险控制,以及从 MT5 到 Python 的研究流程。

我编写的 EA 具备服务器端止损、保证金水平保护、敞口上限,以及终端或 VPS 重启后的状态恢复——这些正是决定一个系统能否存活的部分,而不仅仅是能否编译通过。

我的主要工作是验证:真实 tick 回测、在第一次运行之前就固定的样本内/样本外划分,以及能够指出结果何时只是噪声的样本外检验。我不会把优化结果的第一行交给您,并且会以书面形式告诉您哪些结论是数据无法支持的。
| Chinese English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
显示:
20
等级:
(4)
已发布:
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务


在芝加哥商品交易所(CME),黄金设有每日维护休市时段。休市结束后首小时的交易涨幅往往超出随机波动所能解释的范围,且在长达11年的样本中,这一现象在每个日历年都会出现——而当天其余各小时的走势则基本持平。

该专家顾问在市场重新开盘时买入,持仓固定时间,并设置基于波动率调整的服务器端止损,除此之外不再进行任何操作。每交易日仅进行一笔交易。不进行均价法、不采用网格交易、不使用马丁格尔策略、不进行回本操作。

数据,以及在我发现成本模型有误后的数据

基于11年每小时数据的测算,在开盘时入场并持仓两小时:

按研究中计入的成本计算 按测试人员测得的成本
每笔交易 +3.34 个基点 +1.60 个基点
t统计量 7.40 3.42
胜率 59.3% 50.8%
盈利系数 1.63 1.30
盈利年份 11年中的11年 11年中的10年

左侧一栏是我若在多数人停手的地方停止分析,原本会发布的内容。 随后,在MetaTrader自带的策略测试器中进行的真实 tick 回测显示, 重新开仓时的真实往返成本约为60点,而非我研究中计算的19点 —— 因为M1K线图中的点差 字段 是按K线汇总的,导致重新开仓时的点差被低估了大约三倍。

经过这一修正后,该策略的优势依然存在,但强度已不足原来的半数, 而胜率则变成了靠有利的回报率而非高频交易支撑的“抛硬币”式结果。右侧一栏才是真实的数据,也是本EA构建的基础。

它不是什么

这并非一种谋生手段,源文件的标题在描述任何参数之前就已明确指出这一点。 以承受 20% 回撤的资金规模计算,该策略年化 收益约为+3.3%,最大回撤为 4.6%, 夏普比率为 1.23,每年约 200 笔交易——这也意味着大约每 9 年中会有 1 年出现亏损。 以0.01手计算,这相当于每年约130个货币单位,而该数字衡量的是仓位规模,而非策略本身。

若仅单独考察其2.5年的回测窗口,t值为+1. 12—— 不显著 。 该策略两年盈利的回测结果本身并不能证明什么;真正起决定性作用的是这11年的样本数据。

在我对其产生信任之前,该结果经历了哪些考验

上述任何一项都可能让该策略彻底失败,之所以将它们列出,是因为如果没有人尝试过突破这些考验,那么所谓的“结果”便不成立:

  • 这并非跳空。 记录 显示, 突破时的平均跳空 幅度为 −0.011——该波动发生在市场开盘 时。
  • 这并非K线构建的伪影。 通过独立获取的M1K线 重建 小时线后,在所有73个重叠交易日中,其结果与H1序列均精确一致至0.0000。
  • 这也不是异常值。 剔除1%极端值后的 均值为 +0.70,而全样本 均值为 +0.75;中位数为+0.48。
  • 这也不是点差标准化 造成的——虽然这本应 是显而易见的陷阱,因为MT5 K线采用买入价,而开盘后的点差更宽:但点差在整个小时内保持平稳,因此无法解释该效应的任何部分。
  • 这并不需要精确的重新开盘价位。 晚15分钟 入场 仍有收益,晚30分钟 入场 仍有收益,但晚45分钟则不再有效。
  • 每周开盘价并不属于该策略的范畴。 周日 的数据为+1.11个基点,t值为0.88——与噪声无异——而日数据则为+3.90个基点,t值为8.32。这就是为什么 存在 InpSkipMonday参数,且其默认值为true。

输入参数及其设定依据

输入 含义
InpEntryHour 重新开放的服务器时间。采用服务器时间是经过深思熟虑的:该经纪商的时钟遵循美国夏令时,因此重新开放时间全年固定在某个服务器时间点,而如果采用UTC触发机制,则每年会发生两次一小时的偏移。
InpEntryWindowMin 仅在该整点后的这几分钟内进行建仓。
InpHoldHours 在按时平仓前持仓的小时数。
InpSkipMonday 跳过每周的重新开放。请参见上文的周日数据。
InpLots 固定手数。绝不调整仓位。
InpStopAtrMult 止损 = 此值 × 每小时平均波动范围。默认值为 2.0,而非第一个版本使用的 1.5 —— 详见下文。
InpRangeBars 以均值波动范围为单位的H1K线数。480约等于20个交易日。
InpMaxSpreadPts 若点差恶化至此值以下,则拒绝入场。

关于止损倍数。 按 修正后的成本计算,1.5×可带来+1.60个基点(t值为3.42),而2.0×可带来+1.91(t值为4.07),且触发率从2.6%降至1.3%。 点差进一步扩大时收益仍会持续提升——但止损仍需保留,因为“移除止损会改善回测结果”这种逻辑,恰恰是让马丁格尔策略看似盈利的原因。止损的作用是限制尾部事件;而时间止盈则限制其余情况。

在相信上述任何内容之前,请先进行测试

并且必须基于真实 tick 数据,以每个 tick 为单位 进行测试。在我另一段代码中,同一套规则在同一时期内,采用 1 分钟 K 线建模时结果为 −15,627,而采用真实 tick 数据时结果为 +79,000。如果回测报告未说明其建模模式,就无法明确告知你其实际测量的结果。

由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/77060

Any Indicator Alert - alerts, push notifications and multi-timeframe for any custom indicator, no source code needed Any Indicator Alert - alerts, push notifications and multi-timeframe for any custom indicator, no source code needed

将其附加到图表上,输入任意自定义指标的名称,它就会根据该指标自身的缓冲区向您发出提醒——弹出窗口、声音提示、手机推送通知或电子邮件。它通过 iCustom 读取指标,因此无需源代码:您只需下载一个已编译的 .ex5 文件即可。 它还可以从更高时间周期读取该指标,并重新检查已收盘的K线,以告知您该指标是重新绘制还是仅存在滞后。 该工具以“探索”模式启动,该模式会列出指标的所有缓冲区及其各自的内容,因为“哪个缓冲区包含信号”正是阻碍大多数人使用 iCustom 的关键问题。

SuperTrend TV EA SuperTrend TV EA

一款通过iCustom仅在收盘K线时交易SuperTrend TV指标的专家顾问,随附审计报告,证明每笔交易均与信号匹配且未遗漏任何信号

Trade Excursion Report: MFE and MAE of every closed trade, to CSV Trade Excursion Report: MFE and MAE of every closed trade, to CSV

针对每笔已平仓交易导出一行CSV数据,其中包含对账单上未显示的数值:该交易曾达到的最高未实现盈利(MFE)、曾承受过的最大未实现亏损(MAE)、实际保留的MFE金额、交易跨过的K线数量以及持仓时长。 该指标的计算方式与“交易波动”指标相同,但将结果写入文件而非绘制在图表上,因为针对这些数据值得探讨的问题,是图表无法解答的:获利率是否取决于入场时间? 我提前平仓的交易是否恰恰是持仓时间最长的?周一的亏损交易达到的MAE是否与周五不同?只要生成CSV文件,这些问题只需通过一个数据透视表即可解答。 输出格式为分号分隔且带标题行,位于 MQL5\Files 目录下;可在任何电子表格软件中打开。测量限制:波动值取自所选时间周期的K线高低点;单根K线内的价格路径无法确定。“K线”列报告了每笔交易的分辨率,汇总统计时将单根K线交易单独计数,而非将其平均计算在内。

CGoldSymbol - find the broker's gold and size the position correctly on it CGoldSymbol - find the broker's gold and size the position correctly on it

无论经纪商如何称呼该黄金符号,本程序都能识别;从交易终端读取合约规格,而非自行推测;并将账户货币计价的风险转换为该经纪商对应的正确手数。