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

Relative Moving Average Indicator - MetaTrader 5脚本

显示:
9
等级:
(2)
已发布:
RMA_Engine.mq5 (20.93 KB) 预览
RMA_Panel.mq5 (9.35 KB) 预览
\MQL5\Include\RMA\
RmaCore.mqh (13.34 KB) 预览
RmaDisplay.mqh (13.66 KB) 预览
RmaTypes.mqh (5.87 KB) 预览
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

概述

这是对丹尼尔·亚历山大·布洛赫博士在《RMA系统化交易课程》中 介绍的相对移动平均线(RMA) 框架进行的忠实移植,基于MetaTrader 5平台。 经典移动平均线将价格窗口简化为一个平滑数值,该数值仅反映价格水平,却无法体现其稀有性:一个高收盘价可能与周围所有价格相去甚远,也可能虽高却在该窗口内完全属于常态。 RMA 则解答了第二个问题。它将滞后窗口视为一个微型分布,对当前价格在该窗口内的位置进行排序,并以[0, 1] 量表报告该排序值——该量表在每种交易品种及每种波动率状态下均具有相同含义。

注: 这并非某些图表平台所展示的“RMA”(即怀尔德平滑法,一种EMA变体)。尽管首字母缩写相同,但二者是完全不同的概念。此处RMA指的是布洛赫(Bloch)构建的指标:相对于滑动均线测量的价格统计量,并投影到归一化回报率的分布上。

该框架包含三个层次,代码与之完全对应:

  • W个收盘价的滑动窗口的简单移动平均线(SMA),被视为局部均衡点并固定为零。
  • RMA 系列指标,即 每个窗口基准点相对于该平衡点的偏差,其计算为纯比率sma / (x - 1),分别在最后一个收盘价、第一个收盘价、中间收盘价以及窗口最小值和最大值处进行计算。由于是比率,这些指标不依赖于量级,且在不同交易品种间具有可比性。
  • 分位数将滑动 窗口重新表述为标准化收益率(收盘价 / SMA - 1),并对该分布中的当前值、最小值和最大值进行排序。这是纯粹的经验累积分布函数(CDF),完全照搬自论文附录中的定义,其中f_w 是下游所有操作实际基于的序列。

RMA构建:价格窗口→SMA→标准化分布→分位数

构建过程如下:收盘价的滑动窗口转化为简单移动平均线(SMA),收盘价被重新表述为围绕该SMA的标准化收益率分布,而当前价格在该分布中的排名即成为其在[0, 1]尺度上的分位数。

除此之外,该引擎还附带两个衍生指标。一个“状态检测器” 利用论文中的“相对极值比率”(并辅以最小二乘法斜率、z-分数和变异系数)来将标准化收益率的分布归类为扩张、收缩或过渡状态。逆向走势监测器 会输出d_med_w(即以中位数为基准重新归一化的分位数)以及D_k(即近期相邻K线中上涨步数的占比),后者作为方向一致性指标,能精确判断“当前走势正在反转”,而非仅凭主观臆测。

本程序包含两个模块。RMA_Engine 负责计算所有序列,并将全部十九个序列作为缓冲区输出,因此专家顾问或其他指标可以直接从图表上读取精确数值,而无需重新实现数学计算,从而避免出现步调不一致的情况。RMA_Panel 则完全不进行任何计算: 它仅定位已附加到图表上的引擎,并将该引擎的一组缓冲区镜像到独立的子窗口中——因为RMA系列指标以百分比的分数为单位进行测量,而d_med_w以零为基准,因此这两者在引擎的0到1轴上均无法直接读取。


引擎绘制的图表

引擎会打开一个独立窗口,其纵轴固定在 [0, 1] 范围内,并绘制六个曲线图:

图表
外观
说明
运行状态
位于所有元素后方的全高彩色带
绿色表示扩张,红色表示收缩,琥珀色表示扩张转为收缩,蓝色表示收缩转为扩张。当走势尚未确定时,图表上不会显示任何内容,因此热身阶段不会以一片代表“尚未确定”的色彩开场。
f_w
粗蓝线
当前收盘价的分位数:即最新标准化收益率在其所属窗口内的排名位置。这是主要序列。
f_min / f_max
红色和绿色虚线
窗口最小值和最大值的分位数,即f_w所穿越的包络线的下限和上限。
alpha_lo_mean / alpha_hi_mean
紫色和橙色线
平滑分位数水平:f_w 及其补集的指数移动平均线(EMA),形成一个较慢的背景,使 f_w 中的尖峰在该背景下显得尤为突出。

在两个入场阈值和中位数处绘制了三条水平引导线。它们并非硬编码,而是基于配套专家顾问所接收的相同输入构建而成,因此重新调整阈值时,引导线会随之移动,而非让图表在规则上产生隐性矛盾。

如何解读。当 f_w 紧贴上导线时,意味着当前收盘价处于其观察窗口所见历史最高点,此时将触发向下穿越信号;而 f_w 位于下导线处则为镜像情况。 中位数是趋势必须保持在其右侧的水平线,穿越该水平即为自然平仓点。彩色带为该读数提供了上下文,因为该策略的运作节奏是在扩张阶段开始时开仓,并在收缩阶段平仓。


推荐设置

设置
推荐值
备注
符号
任意
分位数刻度具有自归一化特性,因此无需针对每个符号进行校准,读数即具有实际意义。开发过程及下方的截图均以欧元兑美元(EURUSD)为例。
时间周期
M30 至 H4
适用于任何时间周期。窗口以K线为单位进行测量,因此相同窗口宽度(W)下,较短的时间周期仅表示市场中较短的一段走势。
窗口大小 (W)
106根K线
默认值。本文旨在根据不同资产对窗口进行校准,因此此值仅为起点,而非具体建议。
所需历史数据
W + 状态回溯柱数
默认设置下为 126 根K线。每个图的起始点取其所属模块首次能给出结果的位置,而非该数据集最长的预热期,因此分位数会先于状态区间出现。


主要特点

忠实于论文

  • 分位数的定义采用论文附录中的定义,即f_i = (1 / |W_i|) * sum_j I( W_ij <= v_i ),并按原文实现。 当论文正文与附录定义不一致时,以附录为准,且差异会在源代码中明确记录,而非默默修正。
  • 区域分类遵循“相对极值比”方法,优先测试“收缩”状态,因为这是最严格的判定标准且需要验证,而“扩张”状态则被刻意设计为更容易达到。
  • 未添加源代码中未要求的任何平滑处理、阈值或滤波器。

设计为可供其他程序读取

  • 所有十九个序列均作为指标缓冲区公开,其中六个用于绘图,十三个仅用于计算,因此 EA 可以读取图表中显示的相同数值,两者绝不会出现不一致。
  • 缓冲区映射位于单个共享头文件中,因此引擎、面板和任何消费者都使用统一的语法,而不会因缺乏编译错误警告而产生分歧。
  • 数学运算完全位于仅头文件的类中,不依赖图表或订单,因此相同的代码可以驱动脚本或测试框架,无需任何模拟代码。

正确的增量重新计算

  • 每次迭代都从prev_calculated-1 开始重新计算,而非从prev_calculated 开始。 该索引处的K线在前一次调用时仍在形成,其收盘价直到现在才最终确定;若不进行处理,将导致半成形的数值被冻结到所有依赖它的系列中,而K线之间的分位数差异也将变成两个未完成数值之间的差异。
  • 预热阶段的K线携带EMPTY_VALUE 而非零,因此处于预热中途的消费者会看到“缺失”而非一个合理的数值。
  • 在过渡带内,状态分类具有路径依赖性,因此会保留每根K线的历史数据,而非一个连续的累积字段——正是这一点使得增量处理能够从前一根K线处继续接续数据链。

借用第二个轴的面板

  • 引擎会自动打开被请求的面板,并首先检查图表,以确保已包含这些面板的模板,或在输入变更后的重新初始化过程中,不会在第一个面板后面堆叠第二个副本。面板随引擎一起被移除,但仅在实际移除时才发生,因此切换时间框架会将您带回离开时的布局。
  • 面板通过匹配图表上的短名称来查找引擎,而不是构建自己的句柄,因此它绝不会分叉成第二个、具有不同参数设置的计算结果,并绘制在真实结果旁边。


截图

EURUSD M30图表上的RMA_Engine振荡器窗口,显示分位数、阿尔法频带和状态背景

欧元兑美元(EURUSD)M30时间周期的引擎窗口:f_w 及其包络线和平滑分位数均值,显示在彩色区域背景之上。

欧元兑美元M30图表上的D_k和d_med_w指标面板

逆向面板:d_med_w 以零为中心,其上方显示 D_k,即方向一致性读数。

RMA系列直通面板,包含rma_w、min和max指标,应用于欧元兑美元M30图表

RMA 系列面板:rma_w 带有独立标尺显示的窗口最小值和最大值,以及当前价格穿行的包络线。


安装与文件结构

包含两个指标和四个头文件。文件布局至关重要:引擎通过相对路径RMA\RMA_Panel 加载面板,而头文件以<RMA\...> 的形式被包含,因此两者都必须位于各自的RMA 子文件夹中。

文件
作用
描述
Indicators\RMA\RMA_Engine.mq5
主指标
在实时K线图上运行三个模块,绑定全部十九个缓冲区,绘制六个曲线图和状态带,并打开面板。本身不包含任何数学计算。
Indicators\RMA\RMA_Panel.mq5
直通式面板
在图表上定位引擎,并将其中一组缓冲区镜像到具有独立比例尺的子窗口中。提供两种模式:不利走势(D_k, d_med_w)和RMA系列(rma_w, rma_min, rma_max)。
Include\RMA\RmaTypes.mqh
共享词汇表
状态和跨状态枚举、缓冲区映射,以及绘图和调色板计数。这是引擎、面板和任何消费者达成共识的唯一位置。
Include\RMA\RmaCore.mqh
数值核心
SMA、五成员RMA家族、标准化收益率分布、分位数函数、窗口范围以及平滑α边界。
Include\RMA\RegimeDetector.mqh
运行状态分类
扩张、收缩及两个过渡状态,基于极值比包络线,并通过斜率、z 分数和变异系数加以验证。
Include\RMA\AdverseMonitor.mqh
方向一致性
d_med_w,即以中位数为中心的分位数;以及 D_k,即其近期各K线间变动的上行占比。


从您自己的代码中读取缓冲区

使用iCustom 获取RMA\RMA_Engine 的句柄,并通过CopyBuffer 读取以下任意索引。索引 0 至 6 对应绘图序列,7 至 18 仅用于计算,但这十九个索引均可读取。

索引
序列
含义
0, 1
状态带,颜色索引
背景的高度及其配色槽。不包含数值,仅表示颜色。
2
f_w
窗口内最近一次归一化回报的分位数,取值范围在 [0, 1] 之间。主序列。
3, 4
f_min, f_max
窗口最小值和最大值的分位数。
5, 6
alpha_lo_mean, alpha_hi_mean
下限和上限α值的指数移动平均值。
7
sma
窗口的简单移动平均线,单位为价格。
8 至 12
rma_w, rma_1, rma_mid, rma_min, rma_max
RMA系列指标:sma除以最新、最早、中间、最小和最大收盘价,再减去1。
13
范围
窗口内归一化收益率的分布范围,即状态检测器所读取的数值。
14, 15
alpha_lo, alpha_hi
原始分位数 f_w 所处的水平及其补集。
16
regime
作为双精度数的区域编号:0 表示扩张,1 表示收缩,2 表示滚动,3 表示突破,4 表示未知。
17, 18
D_k, d_med_w
方向一致性与中位数中心分位数。
请注意: 即使指标中的每个输入组 没有值,它也会在iCustom 调用中占据一个参数槽位。若省略其中一个,其余参数将向上移动一个位置,这会导致加载一个配置了错误参数的工作指标,并导致程序无声失败。请严格按照声明的顺序传递输入参数,包括各组参数。


输入参数


参数
默认值
窗口
InpWindowSize, InpSmoothingPeriod
106 根K线,10
状态检测
InpEpsilonLow、InpEpsilonHigh、InpSlopeThreshold、InpRegimeLookback、InpVariationRatioLow、InpZScoreExpansion、InpRangeHistoryLookback
0.15、3.0、0.0001、20、0.1、1.0、100
不利走势
InpAdverseLookback
10根K线
参考线
InpEntryUpperThreshold、InpEntryLowerThreshold
0.9, 0.1
面板
InpAutoAttachPanels、InpPanelAdverse、InpPanelRmaValues、InpAdverseThresholdDown、InpAdverseThresholdUp
true、true、false、0.3、0.7
制度背景
InpShowRegimeBand 加上每种制式一种颜色
true, 深绿色 / 红色 / 琥珀色 / 蓝色
注意: 在非可视化的策略测试运行中,这些面板会被自动跳过,因此没有图表可绘制的地方不会显示任何内容。


研究依据

实现依据如下:

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

有一点需要明确说明,因为这是源自原文本身:该论文的“结果”部分被留作未来研究课题。它提供了一个框架及其运作机制,而非实证交易记录。 该指标为您提供的,是在一个具有普适性尺度的市场状态描述,这为您的自主测试奠定了基础,而非直接继承自原始文献的已验证交易优势。

一篇配套文章详细讲解了每个模块的数学原理和实现方法,并构建了基于这些缓冲区的专家顾问(EA):《布洛赫相对移动平均线(RMA)框架在MQL5中的实现》。

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

SpreadAudit——基于M1历史数据的经纪商实际点差 SpreadAudit——基于M1历史数据的经纪商实际点差

该脚本从M1K线图的spread字段中提取您经纪商的实际点差,并输出中位数、 第90百分位数和第99百分位数,单位包括价格、点数和ATR百分比,并按每小时将平均点差和最大点差导出为CSV文件。 此功能用于根据您账户的实际成本测试交易策略,而非基于凭空想象的“典型”点差。

Clock (Spread) Clock (Spread)

该指标的功能 Clock (Spread).mq5 是一款 MetaTrader 5 图表指标,会在图表角落显示一个小型文本标签,内容包括: 倒计时至当前K线收盘(格式为 HH:MM:SS 或 MM:SS,具体取决于时间周期) 当前点差(卖价 − 买价,单位为点),显示在计时器旁边的括号内。 更新日志: 2.20 版: - 点差颜色现根据方向动态变化(绿色 = 上升,红色 = 下降) - 添加了可配置的点差颜色输入参数

Trading Panel EA Trading Panel EA

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

离散 离散

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