请观看如何免费下载自动交易
请在Facebook上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
16
等级:
(1)
已发布:
\MQL5\Include\RMA\
RmaCore.mqh (13.34 KB) 预览
RmaDisplay.mqh (13.66 KB) 预览
RmaTypes.mqh (5.87 KB) 预览
RMA_Engine.mq5 (20.93 KB) 预览
RMA_Panel.mq5 (9.35 KB) 预览
RMA.mq5 (19.54 KB) 预览
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

概述

本专家顾问基于丹尼尔·亚历山大·布洛赫博士在《基于RMA的系统化交易课程》一书中 提出的相对移动平均线(RMA) 框架进行交易。它实现了该论文中所有的四种交叉策略 及其自适应交叉平仓策略,且每个进场和出场点均以分位数空间而非价格形式表示。

其理论基础在于:价格窗口作为分布所包含的信息量,要比作为平均值所包含的信息量更为丰富。在每根K线中,RMA会提取W个收盘价组成的滑动窗口,将其重新表示为相对于自身均值的收益率,并以[0, 1]区间内的分位数形式 报告最新数据在该分布中的排名。 因此,该论文的目标是利用该排名在分布两极之间的波动:当其从最小值向最大值移动时做多,当其反转时做空。 由于分位数代表的是排名而非距离,因此诸如0.9之类的阈值在每个交易品种和每种波动率环境下都具有相同的含义,这也正是该规则具有可移植性的原因。

注: 这并非某些图表平台所展示的“RMA”(怀尔德平滑法,一种EMA变体)。尽管缩写相同,但它们是完全不同的对象。

该EA本身不包含任何数学计算。所有计算均由配套指标RMA_Engine 完成,EA通过iCustom 加载该指标,并在每根收盘K线时使用CopyBuffer 读取数据。 这种分离是刻意为之,并带来了两项宝贵的特性:EA无法与图表在特定K线的分位数计算结果上产生分歧,因为计算结果只有一个;且规则从未直接触及订单,因此无需经纪商参与,即可通过脚本在历史数据上重现交易。


交易机制

四个交易阶段。 该策略基于窗口自身分布的穿越走势进行交易。 当价格触及极值时,将触发 该方向的交易信号——这是该策略的起始测试;随后,当分位数沿遍历方向穿越某个分位区间时,入场信号即被触发。极值本身并非触发条件,穿越行为才是,因此入场信号可在遍历路径的任意位置触发。这些名称描述的是价格走势,而非持仓方向:

  • 多头穿越反转。 分位数离开最高点并向最低点下行。EA通过做 来跟随这一下跌趋势。
  • 空头交叉反转。 与上述情况相反。分位线离开最低点并向上攀升至最高点,EA通过做多 跟随该走势。
  • 多头交叉反转(Long-cross-revert)。 从最高点开始的下跌在未触及最低点前反转回升。EA顺势做多,跟随价格回升至最高点。
  • 空头交叉反转。 从最低点开始的上涨在未触及最高点前反转下跌,EA跟随其下跌趋势做空

这四种情况共同涵盖了部分走势可能的两种解决方式。每个未平仓头寸都属于一个特定“段”,而该“段”决定了应适用哪种平仓测试以及反转将演变为何种走势,因此同一分位数读数既会平仓一个头寸,又会持有另一个头寸。

贯穿分销环节的四种交叉策略

同一分布中的四个阶段:反向阶段涵盖从一端极值向另一端极值的完整横向移动,而回转阶段则发生在横向移动尚未到达远端极值便折返时。

自适应平仓。 这正是市场状态检测器大显身手之处。本文定义了两种基础平仓方式,以及一种在二者之间进行选择的第三种方式:

  • 完整分布交叉。 假设横向移动完成,因此一侧的平仓与另一侧的建仓同时发生。从最高点建立的空头头寸仅在分位数实际触及最低点并反转上行时才平仓;由于该反转本身即为反向新交易的起点,平仓将直接反转为该新交易。
  • 极值反转触发。 对远端极值不作任何假设。当出现首个确凿证据表明当前趋势已停止时,即平仓:例如分位数区间连续向错误方向移动、重新穿越中位数区域,或出现单次幅度足够大的价格波动。
  • 自适应交叉平仓。 这是论文中的规则,也是EA所实现的:在扩张和过渡阶段(此时部分穿越的可能性较高)使用反转触发机制,一旦确认收缩趋势,则切换为完全交叉策略。在任何市场状态下,反转走势段始终使用反转触发机制。

跑长检验的作用在于防止复归触发器因噪声而误触发。当分位数持续沿同一方向移动时,带符号的区间步长会不断累积;一旦方向改变,累积值便会重置,因此“倒退两个区间”意味着趋势确实已经反转,而非仅仅暂停。

安全退出机制。 在上述两种策略退出条件之前,均设有不利走势检查机制。均值回归头寸在构建之初就会暂时处于“越界”状态,因此“越界”本身不能作为退出条件;真正的预警信号是:在处于“越界”状态的同时, 观察到分位数持续向越界方向进一步偏移。 这正是中位数错误一侧的低D_k 读数所描述的情况,这也是唯一完全忽略最小盈利设置的退出条件,因为其目的并非锁定目标盈利,而是停止助长已经对交易不利的趋势。

当该策略因亏损触发平仓时,它还会阻止在同一方向重新入场,直到该分位数重新越过中位数,从而确保该策略不会立即再次向市场提交相同的亏损交易。 如果此时波动区间正在扩大,EA则会转而采取相反 方向的交易,其逻辑是:持续失效的均值回归信号表明存在趋势,而非更好的价格。这两个趋势跟踪阶段是该系统中唯一非对称的部分。


推荐设置

设置
推荐值
备注
交易品种
EURUSD
开发和测试工具。分位数量表具有自归一化特性,因此规则可直接应用于其他交易品种而无需重新校准,但以下设置仅在此处经过测试。
图表时间周期
H2
测试时间周期。窗口以K线为单位计算,因此相同W值下较短的时间周期仅表示市场走势跨度较短。在H2时间周期上的平均持仓时间约为一天。
账户类型
净额结算或对冲
该EA每次最多持有一笔头寸,并通过平仓后重新开仓来反向操作,因此两种账户类型均可适用。
先决条件
必须编译 RMA_Engine
在挂载EA之前,请先编译Indicators\RMA\RMA_Engine.mq5。若未生成.ex5文件,iCustom调用将失败,且EA会因文件缺失而无法初始化,并显示相应错误信息。
历史数据要求
W 加上回溯期
当引擎尚无法响应时,EA 将在任何 K 线处停滞,因此历史数据较短会导致信号缺失,而非产生错误信号。
重要提示: 请务必先在模拟账户上进行测试。原论文中的“结果”部分被列为未来工作,因此该论文仅提供了框架及其运作机制,而非经验性的历史业绩记录。下文中的所有业绩数据均来自该实现方案的一次历史回测,仅作为您自行测试的起点,而非从研究中继承的、经过验证的交易优势。 过往表现并不保证未来结果。


主要特点

忠实于论文

  • 实现了全部四种交叉策略,即两条反向腿和两条复原腿,而非简化的成对策略。
  • 自适应交叉策略退出机制会根据市场状态在“全分布交叉”与“极值回调触发”之间切换,完全遵循论文规定。
  • 分位数采用论文附录中的定义,即窗口的纯经验累积分布函数 (CDF)。当论文正文与附录内容不一致时,以附录为准,且差异会在源代码中记录,而非默默修补。

一次计算,一个位置

  • 规则读取的每个数值均通过 CopyBuffer 从 RMA_Engine 获取,因此图表与交易数据不会出现偏差。无需额外实现数学运算来保持同步。
  • 规则位于一个类中,该类绝不会调用 OrderSend、读取持仓或进行输出。它接收一个包含十个字段的 K 线结构,并返回一条指令,这正是该策略无需经纪商即可进行测试的原因。
  • 下单、账务处理和风险管理位于一个独立的类中,出于同样的原因,与交易规则完全分离。

仅基于最终数据做出决策

  • 缓冲区从第 1 位置开始读取,绝不从 0 开始。第 0 根 K 线仍在形成中,而每条规则都是针对收盘价已确定的 K 线编写的。
  • 预热K线、历史数据中的缺口,或是尚未完成计算的引擎,都会产生相同的结论:不针对该K线做出决策。绝不会从缺失的读数中推断出任何信息。
  • 账户是否已开仓会在任何操作执行前确定,因此一个K线要么是平仓K线,要么是开仓K线,绝不会兼而有之。

经真实经纪商验证的成交

  • “平仓并反向开仓”指令要求经纪商在相反交易应执行的时刻平仓,但经纪商并不总是在首次尝试时就能满足该要求。被拒绝的平仓请求会被锁定,并在每个报价周期内重试直至成交,而非被放弃;且反向交易绝不会叠加在仍在持有的头寸之上。
  • 入场单将根据实际成交价格而非请求价格入账,因此滑点不会影响用于计算平仓规则和优化评分的点数数据。
  • 手数大小受限于该交易品种的最小、最大及步长限制。
  • 未平仓头寸将保存在全局变量中,因此,在终端重启后仍存在的头寸将被视为实际交易继续执行,而非孤立头寸。

操作控制

  • 可选的固定止损和止盈(以点数为单位)、可选的交易时段过滤器(可正确处理跨越午夜的交易时段),以及可选的交易时段结束平仓功能。这些属于部署控制而非框架组成部分:本文关注交易信号本身,而将风险控制范围交由操作者决定。
  • 可选的图表状态块,显示当前分位数、运行状态和交易段,并带有入场和出场标记;此外还有详细模式,会记录每次拒绝及其原因。这两项默认均处于关闭状态,因此EA会静默交易。
  • 自定义优化标准,返回按交易次数平方根和胜率加权的净点数;因此,在净结果相同的情况下,400笔交易的连续交易序列将优于40笔交易序列,同时避免交易次数完全主导排名。交易次数少于10笔的序列得分为零。


回测结果

在EURUSD货币对上 进行了一次回测 时间范围为2025年5月1日至2026年7月26日(H2时间框架), 约14个月,采用100%真实 tick 数据,以10,000美元保证金进行1:500杠杆交易。

指标
数值
总净利润
以10,000美元本金计算,净利润为362.51
交易总数
138
盈利系数
1.15
夏普比率
0.82
最大权益回撤
463.87 (4.52%)
盈利交易
46.38%
平均盈利 / 平均亏损
42.80 / -30.82
多头/空头胜率
46.58% / 46.15%

胜率略低于五成,但该系统仍能保持盈利,因为平均盈利大于平均亏损——这正是允许反转行情充分发展的均值回归策略的收益特征。多头和空头的表现几乎完全一致,这符合该系统在设计上具有对称性的预期。

本次回测未采用出厂默认设置。 共有六项参数与默认值不同,若直接加载出厂版本的EA,将无法复现这些数据。测试参数如下:InpRegimeLookback 200(默认20),InpRangeHistoryLookback 400(默认 100),InpExitTargetUpper 0.9 和InpExitTargetLower 0.1(两者默认均为 0.0,这会选择极值逻辑而非直接的分位数目标),InpStopLossPips 50(默认 0,无止损),以及InpUseTimeFilter 设为 true 且时间范围为 01 至 23 小时(默认关闭)。其余所有参数均保持默认值。

RMA 专家顾问在策略测试器中的权益曲线

测试期间的权益曲线:表现平稳,回撤幅度较小,而非仅靠一次幸运的连续盈利。

RMA 专家顾问的策略测试报告

该运行的完整策略测试报告,显示了设置、交易统计数据以及余额和权益曲线。


安装与文件结构

包含一个专家顾问、一个必需指标、一个可选面板以及七个头文件。文件布局至关重要:专家顾问通过相对路径RMA\RMA_Engine 加载引擎,而头文件以<RMA\...> 形式被包含,因此每个文件都必须位于其对应的RMA 子文件夹中。请在编译专家顾问之前先编译指标。

文件
作用
描述
Experts\RMA\RMA.mq5
协调器
所有输入、iCustom调用、每根K线对引擎状态的读取,以及信号引擎、交易管理器和显示模块的运行顺序。本身不包含任何策略逻辑。
指标\RMA\RMA_Engine.mq5
必需指标
计算所有 RMA 系列并发布十九个缓冲区。若缺少此指标,EA 将无法初始化。
Indicators\RMA\RMA_Panel.mq5
可选面板
将一组引擎缓冲区镜像到具有独立缩放比例的子窗口中,用于那些在引擎 0 到 1 轴上无法读取的系列。仅供显示。
Include\RMA\RmaTypes.mqh
共享词汇表
状态模式和跨状态枚举以及缓冲区映射。这是EA、引擎和面板之间达成一致的唯一部分。
包含\RMA\RmaCore.mqh
数值核心
SMA、RMA 系列、标准化收益率分布以及分位数函数。
Include\RMA\RegimeDetector.mqh
运行状态分类
基于相对极值比(经斜率、z-分位数和变异系数验证)的扩张、收缩及两种过渡状态。此功能用于选择退出规则。
Include\RMA\AdverseMonitor.mqh
方向一致性
d_med_w(以中位数为中心的分位数)和 D_k(其近期步长的上行占比)。为安全止盈提供依据。
Include\RMA\SignalEngine.mqh
规则
准备状态、四个入场策略、三个平仓策略及其之间的自适应切换、安全平仓、重新入场模块以及反转策略。接受一个K线数据,返回一条操作指令,不涉及其他任何内容。
包含\RMA\TradeManager.mqh
执行
下单、手数限制、止损和目标价、仓位同步、重试平仓、交易时段控制、交易腿持久化、点差核算以及优化评分。
Include\RMA\RmaDisplay.mqh
图表状态
状态块以及入场和出场标记。标签仅创建一次并在原地更新,因此不会出现重复对象,也不会产生重绘闪烁。


输入参数

九个输入组。前两个被转发至引擎并改变其计算结果;其余的则控制规则、订单和显示。


关键参数
默认值
窗口
InpWindowSize、InpSmoothingPeriod
106 根K线,10
状态检测
InpEpsilonLow、InpEpsilonHigh、InpSlopeThreshold、InpRegimeLookback、InpVariationRatioLow、InpZScoreExpansion、InpRangeHistoryLookback
0.15、3.0、0.0001、20、0.1、1.0、100
不利走势
InpUseAdverseExit、InpAdverseLookback、InpAdverseThresholdDown、InpAdverseThresholdUp
true, 10 根K线, 0.3, 0.7
入场
InpEntryUpperThreshold、InpEntryLowerThreshold、InpEntryMinDiff、InpCloseThreshold
0.9、0.1、0.0(任何转数均计入)、0.1
平仓
InpExitTargetUpper、InpExitTargetLower、InpExitProfitMinPips
0.0、0.0(两个值均为零时,系统将采用极值逻辑)、0.0(关闭)
交易
InpLotSize、InpMagicNumber、InpTradeComment
0.1 手, 20251230, “RMA”
风险
InpStopLossPips、InpTakeProfitPips、InpUseTimeFilter、InpStartHour、InpEndHour、InpEODClosePositions
0(无)、0(无)、false、8、20、false
在图表上
InpShowDisplay、InpAttachEngine、InpShowPanels、InpPanelAdverse、InpPanelRmaValues、InpShowRegimeBand、InpVerbose
默认全部关闭,因此该EA会静默交易
注意: 两个窗口输入参数和策略组会直接传递给 RMA_Engine,因此更改它们会改变规则所读取的数据序列。如果您还手动将引擎附加到图表上,请为其设置相同的值,否则图表描述的窗口将与实际交易的不同。


研究依据

实现依据如下:

  • Daniel Alexandre Bloch,《基于RMA的系统化交易课程》,可在SSRN 上获取。

该论文贡献了框架及其运作机制:分位数表示法、四种交叉策略,以及根据市场状态在这些策略之间进行选择的“自适应交叉退出”机制。该论文未提供历史业绩记录,因为当前版本中的“结果”部分被列为未来工作。 本实现的价值在于提供了一种以统一尺度表达的交易策略——该尺度在所有交易品种中具有相同含义——并为读者提供了基础,以便按照论文的初衷,对其他交易品种和时间周期进行自主测试,或针对特定资产校准交易窗口。

一篇配套文章推导了相关数学理论,详细讲解了每个模块的实现过程,并深入阐述了这四个分支以及止损逻辑:布洛赫相对移动平均线(RMA)框架在 MQL5 中的实现

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

Session Scalping Zones Session Scalping Zones

适用于MetaTrader 5的基于交易时段的超短线交易指标。该指标会自动标记亚洲时段的高点和低点,并在伦敦开盘时,当价格突破或回测这些水平时生成超短线交易信号。 该指标可绘制动态交易时段区间,发送警报和推送通知,并包含可选的趋势、成交量和时间过滤器。适用于任何交易品种的M1、M5和M15图表。

Trading Panel EA Trading Panel EA

Pro Manager 是一款专为自营交易公司和专业交易员打造的一体化 MT5 交易助手。借助盈亏平衡、平均止盈、魔术号管理和自动网格等强大工具,您可以更快地执行交易、更智能地管理头寸、更高效地控制风险,并实现日常交易任务的自动化。

加速震荡(AC) 加速震荡(AC)

加速/减速技术指标(AC)用于衡量当前驱动力的加速和减速。

离散 离散

离散技术指标由价格和交易量的变化决定。