德马克指标(DeMarker,DEM)是一种常用的技术分析指标,由著名技术分析师 Thomas R. DeMark 创立。该指标主要用于确定价格波动的高点和低点,有助于分析市场过度买入或过度卖出的状态。其计算方法与相对强弱指数(RSI)相似,但 DeMarker 指标主要关注价格的最高价和最低价。
德马克指标(DeMarker,DEM)是MT4自带的技术指标之一,在MT4上方菜单栏依次点击-插入-技术指标-振荡指标-DeMarker,在弹出的指标属性框中设置好相关参数后,点击“确定”即可将指标插入到当前图表中。如下图所示:
在MT4平台上,要获取DeMarker指标数据,可以使用iDeMarker()函数。iDeMarker()函数的结构如下:
double iDeMarker(
string symbol, // 交易品种名称
int timeframe, // 图表时间周期
int period, // 指标计算的平均周期值
int shift // 指标索引/序号
);
其中参数说明:
- symbol,交易品种名称,当前窗口货币对为 Symbol(),要自行定义参数,可以参考 input string symname = “XAUUSD”;
- timeframe,图表周期,指一分钟 M1 到月线 MN1 共 9 个图表周期。要自行定义参数,可以参考用 int 或者 ENUM_TIMEFRAMES,如:input ENUM_TIMEFRAMES Period_x = PERIOD_CURRENT;0 和 PERIOD_CURRENT 都代表当前图表周期。
- period,指标计算的平均周期值参数,默认 14,要自行定义参数,用 int 就可以,如 input int dem_period = 14;
- shift,获取对应指标线的索引/序号,0指当前最新 K 线所对应的值,然后从右往左分别是 1、2、3、4…,这种规则排序。
获取当前图表中从右侧开始第二个 K 线,也就是 1 号 K 线对应的 DeMarker 值,参考代码:
double DeMarker_1 = iDeMarker(Symbol(), 0, 14, 1);
跨图表获取黄金 XAUUSD 一小时 H1 图表中最新 0 号 K 线对应的 DeMarker 值,参考代码:
double XAUUSDDeMarker_0 = iDeMarker("XAUUSD", PERIOD_H1, 14, 0);
跨图表获取美元兑日元 USDJPY 三十分钟 M30 图表中最新 0 号 K 线对应的 DeMarker 值,参考代码:
double USDJPYDeMarker_0 = iDeMarker("USDJPY", PERIOD_M30, 14, 0);
如果要获取多个单位的 DeMarker 指标的值,可以定义数组并结合 for() 循环来编写。总的来说,DeMarker 指标的编程不是很复杂,实际外汇ea编程开发中根据需要调整 iDeMarker() 函数的参数即可。
以下是一个使用德马克指标的简单示例:
// 定义参数
input string SymbolName = "EURUSD"; // 交易品种名称
input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // 图表时间周期
input int DeMarkerPeriod = 14; // 指标计算的平均周期值
// 在策略或指标初始化时创建数组
double DeMarkerArray[];
// 在策略或指标开始运行时计算 DeMarker 值
int OnInit()
{
ArrayResize(DeMarkerArray, DeMarkerPeriod);
for (int i = 0; i < DeMarkerPeriod; i++)
{
DeMarkerArray[i] = iDeMarker(SymbolName, TimeFrame, DeMarkerPeriod, i);
}
return (INIT_SUCCEEDED);
}
// 在策略或指标每次更新时打印最新的 DeMarker 值
int OnCalculate(...)
{
double latestDeMarker = DeMarkerArray[0];
Print("最新的 DeMarker 值: ", latestDeMarker);
return (rates_total);
}
通过这个简单的示例,你可以了解如何在 MQL4 编程中使用 iDeMarker() 函数来获取和处理 DeMarker 指标数据。在实际编程中,你可以根据自己的需求修改和优化代码,以更好地利用 DeMarker 指标分析市场走势。