函数参数
double iMA(
string symbol, // 交易品种
int timeframe, // 时间周期
int ma_period, // 平均周期
int ma_shift, // 平移
int ma_method, // 平均方法
int applied_price, // 应用价格
int shift // 位移
);
1. symbol
(交易品种)
用途:指定计算移动平均线的金融产品。
取值:
NULL
或""
:使用当前图表的产品(如当前打开的EURUSD图表)。明确指定产品名(如
"GBPUSD"
):跨品种分析。
示例:
iMA("EURUSD", 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0); // 计算EURUSD的移动平均
2. timeframe
(时间周期)
用途:选择K线的时间框架。
取值:
使用预定义枚举值(如PERIOD_M1
,PERIOD_H4
,PERIOD_D1
)或直接输入分钟数:0
:当前图表周期。1
(M1)、5
(M5)、60
(H1)、1440
(D1)等。
示例:
iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0); // 使用H1周期
3. ma_period
(平均周期)
用途:定义计算移动平均的周期长度。
取值:正整数(≥1),常用值如20(20日均线)、50、200。
注意:周期过短易受噪音干扰,过长则滞后明显。
示例:
iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_CLOSE, 0); // 50周期EMA
4. ma_shift
(平移)
用途:将移动平均线向右平移指定周期数,用于技术分析中的“前瞻”或调整信号位置。
取值:非负整数(通常0或小整数)。
示例:
iMA(NULL, 0, 20, 2, MODE_SMA, PRICE_CLOSE, 0); // 右移2周期,延迟信号
5. ma_method
(平均方法)
用途:选择移动平均的计算方法。
取值:预定义枚举值:
MODE_SMA
(简单移动平均)MODE_EMA
(指数移动平均)MODE_SMMA
(平滑移动平均)MODE_LWMA
(线性加权移动平均)
示例:
iMA(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0); // 使用EMA
6. applied_price
(应用价格)
用途:指定计算移动平均的基础价格类型。
取值:预定义枚举值:
PRICE_CLOSE
(收盘价,最常用)PRICE_OPEN
(开盘价)PRICE_HIGH
(最高价)PRICE_LOW
(最低价)PRICE_MEDIAN
(中间价,(高+低)/2)PRICE_TYPICAL
(典型价,(高+低+收)/3)PRICE_WEIGHTED
(加权收盘价,(高+低+2×收)/4)
示例:
iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_TYPICAL, 0); // 基于典型价计算
7. shift
(位移)
用途:获取历史K线的移动平均值。
取值:非负整数:
0
:最新一根K线的值。1
:前一根K线的值,依此类推。
示例:
double ma_prev = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); // 前一根K线的MA值
完整示例:绘制20周期SMA
// 在OnCalculate函数中调用:
int start = rates_total - prev_calculated;
for(int i = start; i >= 0; i--) {
double ma_value = iMA(
NULL, // 当前品种
0, // 当前时间周期
20, // 20周期
0, // 不平移
MODE_SMA, // 简单移动平均
PRICE_CLOSE, // 基于收盘价
i // 从最新K线开始倒推
);
Buffer[i] = ma_value; // 存储到指标缓冲区
}
常见问题与调试
返回值无效(如
0
或2147483647
):检查
symbol
是否正确(区分大小写)。确认
timeframe
和ma_period
是否有效(如周期≥1)。
信号滞后:
减少
ma_period
或改用MODE_EMA
提升灵敏度。
跨品种数据缺失:
确保目标品种已添加到“市场观察”窗口。
评论区