自适应移动平均指标 自适应移动平均指标 (Adaptive Moving Average,AMA) 技术指标用于构造对价格序列噪声具有低灵敏度的移动平均,并且其特征在于趋势检测的最小滞后。这一指标是由Perry Kaufman在其著作《更聪明的交易》中开发和描述的。 不同的价格序列平滑算法的缺点之一是,意外的价格跳跃会导致虚假趋势信号的出现。另一方面,平滑导致关于趋势停止或变化的信号不可避免地滞后。开发这一指标就是为了消除这两个缺点。
参数iAMA() 函数用于创建指标的句柄:
返回自适应移动平均指标的句柄。只有一个缓冲区。 int iAMA( string symbol, // symbol name ENUM_TIMEFRAMES period, // period int ama_period, // AMA period int fast_ma_period, // fast Moving Average period int slow_ma_period, // slow Moving Average period int ama_shift, // horizontal shift of the indicator ENUM_APPLIED_PRICE applied_price // price type or handle );symbol [in] 其数据将用于计算指标的金融工具的交易品种名称。NULL表示当前交易品种。 period [in] 周期值可以是ENUM_TIMEFRAMES枚举值之一,0表示当前时间框架。 ama_period [in] 效率计算周期数。 fast_ma_period [in] 市场快速波动时计算平滑率的快速周期数。 slow_ma_period [in] 没有趋势时计算平滑率的慢速周期数。 ama_shift [in] 指标相对于价格图表的偏移。 applied_price [in] 应用的价格,可以是 ENUM_APPLIED_PRICE 价格常数中的任一个或者是另一个指标的句柄。 返回指定技术指标的句柄,如果失败,则返回 INVALID_HANDLE。 要从未使用的指标中释放计算机内存,请使用指标句柄传递到 IndicatorRelease()。
在EA中声明输入参数和全局变量以创建指标: //+------------------------------------------------------------------+//| TestTrendAMA.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2023, MetaQuotes Ltd."#property link "https://www.mql5.com"#property version "1.00"//--- enumsenum ENUM_LINE_STATE { LINE_STATE_NONE, // Undefined state LINE_STATE_UP, // Upward LINE_STATE_DOWN, // Downward LINE_STATE_TURN_UP, // Upward reversal LINE_STATE_TURN_DOWN, // Downward reversal LINE_STATE_STOP_UP, // Upward stop LINE_STATE_STOP_DOWN, // Downward stop LINE_STATE_ABOVE, // Above value LINE_STATE_UNDER, // Below value LINE_STATE_CROSS_UP, // Crossing value upwards LINE_STATE_CROSS_DOWN, // Crossing value downwards LINE_STATE_TOUCH_BELOW, // Touching value from below LINE_STATE_TOUCH_ABOVE, // Touch value from above LINE_STATE_EQUALS, // Equal to value };//--- input parametersinput uint InpPeriod = 9; /* Period */input uint InpPeriodFast = 2; /* Fast EMA Period*/input uint InpPeriodSlow = 30; /* Slow EMA Period*/input int InpShift = 0; /* AMA Shift */input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE; /* Applied Price *///--- global variablesint handle=INVALID_HANDLE; // Indicator handleint period=0; // AMA calculation periodint period_fast=0; // Fast EMA calculation periodint period_slow=0; // Slow EMA calculation periodint ind_digits=0; // Number of decimal places in the indicator valuesstring ind_title; // Indicator description创建 ENUM_LINE_STATE 枚举是为了简化获取指标线的状态,即其相对于另一个指标或任何级别的线的形状和位置。
在振荡指标文章中的ATR指标参数部分可以查找有关枚举的更多信息。 在EA中使用仪表板时,声明全局变量,包括面板类文件: //+------------------------------------------------------------------+//| TestTrendAMA.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2023, MetaQuotes Ltd."#property link "https://www.mql5.com"#property version "1.00"//--- includes#include <Dashboard\Dashboard.mqh>//--- enumsenum ENUM_LINE_STATE { LINE_STATE_NONE, // Undefined state LINE_STATE_UP, // Upward LINE_STATE_DOWN, // Downward LINE_STATE_TURN_UP, // Upward reversal LINE_STATE_TURN_DOWN, // Downward reversal LINE_STATE_STOP_UP, // Upward stop LINE_STATE_STOP_DOWN, // Downward stop LINE_STATE_ABOVE, // Above value LINE_STATE_UNDER, // Below value LINE_STATE_CROSS_UP, // Crossing value upwards LINE_STATE_CROSS_DOWN, // Crossing value downwards LINE_STATE_TOUCH_BELOW, // Touching value from below LINE_STATE_TOUCH_ABOVE, // Touch value from above LINE_STATE_EQUALS, // Equal to value };//--- input parametersinput uint InpPeriod = 9; /* Period */input uint InpPeriodFast = 2; /* Fast EMA Period*/input uint InpPeriodSlow = 30; /* Slow EMA Period*/input int InpShift = 0; /* AMA Shift */input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE; /* Applied Price *///--- global variablesint handle=INVALID_HANDLE; // Indicator handleint period=0; // AMA calculation periodint period_fast=0; // Fast EMA calculation periodint period_slow=0; // Slow EMA calculation periodint ind_digits=0; // Number of decimal places in the indicator valuesstring ind_title; // Indicator description//--- variables for the panelint mouse_bar_index; // Index of the bar the data is taken fromCDashboard *panel=NULL; // Pointer to the panel object
|