You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MQL5中实现类似TradingView的RSI指标叠加MA?

在MQL5中实现RSI叠加MA均线的方案

核心实现思路

要复刻TradingView里RSI加MA的配置,本质是先计算RSI指标值,再对RSI结果计算对应的移动平均线,以下是具体实现步骤和代码示例:

1. 基础框架搭建

先创建自定义指标的基础结构,定义两个缓冲区分别存储RSI值和MA值:

// 全局缓冲区定义
double RSI_Buffer[];
double RSI_MA_Buffer[];

int OnInit()
{
    // 绑定缓冲区到指标输出
    SetIndexBuffer(0, RSI_Buffer, INDICATOR_DATA);
    SetIndexBuffer(1, RSI_MA_Buffer, INDICATOR_DATA);
    
    // 设置指标显示属性
    IndicatorSetString(INDICATOR_SHORTNAME, "RSI with MA");
    PlotIndexSetString(0, PLOT_LABEL, "RSI");
    PlotIndexSetString(1, PLOT_LABEL, "RSI MA");
    PlotIndexSetInteger(0, PLOT_COLOR, clrSteelBlue);
    PlotIndexSetInteger(1, PLOT_COLOR, clrCrimson);
    
    return(INIT_SUCCEEDED);
}

2. 计算RSI值

利用MQL5内置的iRSI函数直接获取RSI结果,参数对应TradingView里的设置(比如RSI长度14,收盘价计算):

// 在OnCalculate函数中计算RSI
for(int i = 0; i < limit; i++)
{
    int pos = rates_total - limit + i;
    // 这里的14是RSI长度,PRICE_CLOSE对应收盘价,可根据截图调整
    RSI_Buffer[pos] = iRSI(_Symbol, _Period, 14, PRICE_CLOSE, pos);
}

3. 计算RSI的MA均线

根据截图里的MA类型(比如SMA/EMA),选择对应的计算方式:

  • 如果是简单移动平均(SMA),可以手动计算或用iMAOnArray:
// 手动计算SMA(示例长度9)
for(int i = 0; i < limit; i++)
{
    int pos = rates_total - limit + i;
    double sum = 0;
    int valid_count = 0;
    for(int j = 0; j < 9; j++)
    {
        if(pos - j >= 0)
        {
            sum += RSI_Buffer[pos - j];
            valid_count++;
        }
    }
    RSI_MA_Buffer[pos] = sum / valid_count;
}
  • 如果是指数移动平均(EMA),用iMAOnArray更简洁:
// 计算EMA(示例长度9)
for(int i = 0; i < limit; i++)
{
    int pos = rates_total - limit + i;
    RSI_MA_Buffer[pos] = iMAOnArray(RSI_Buffer, 0, 9, 0, MODE_EMA, pos);
}

关键调整点

  • 对照你的TradingView截图,修改代码里的RSI长度、MA类型、MA长度这三个核心参数;
  • 如果需要调整MA的计算数据源(比如不是收盘价),修改iRSI里的价格类型参数即可;
  • 指标周期自动匹配当前图表周期,无需额外设置。

内容的提问来源于stack exchange,提问作者lancegoh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:28