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

MT4蜡烛图整体上移1点重绘的MQL实现技术问询

当然可以用MQL4实现蜡烛图整体偏移重绘

你的问题核心是因为价格服务器和经纪商的点差差异,导致图表显示的买价偏低于实际交易价,需要把所有蜡烛整体上移1点。直接用平台默认蜡烛图没法调整,但我们可以写一个自定义指标,绘制偏移后的蜡烛图来解决这个问题。

核心思路

MT4允许通过自定义指标绘制自己的蜡烛图,我们只需要获取每根K线的开、高、低、收盘价,给每个价格加上1点的偏移量,然后用蜡烛图样式重新绘制即可。这样就能覆盖(或者替代)默认的蜡烛图,实现整体上移的效果。

完整代码示例

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
#property indicator_width1 1
#property indicator_width2 1

double OpenBuffer[];
double HighBuffer[];
double LowBuffer[];
double CloseBuffer[];

int OnInit()
{
    // 绑定四个缓冲区对应蜡烛的开、高、低、收
    SetIndexBuffer(0, OpenBuffer);
    SetIndexBuffer(1, HighBuffer);
    SetIndexBuffer(2, LowBuffer);
    SetIndexBuffer(3, CloseBuffer);
    
    // 设置绘图样式为蜡烛图,并区分涨跌颜色
    PlotIndexSetStyle(0, STYLE_CANDLE);
    PlotIndexSetInteger(0, PLOT_CANDLE_COLOR, PLOT_CANDLE_COLOR_BODY);
    PlotIndexSetInteger(0, PLOT_CANDLE_BODY_COLOR_UP, Green);
    PlotIndexSetInteger(0, PLOT_CANDLE_BODY_COLOR_DOWN, Red);
    
    return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    // 计算需要处理的K线起始位置,避免重复计算
    int start = prev_calculated > 0 ? prev_calculated - 1 : 0;
    // 定义偏移量:1点,这里的Point会自动适配当前品种的点值(比如EURUSD是0.0001,JPY是0.01)
    double offset = Point * 1; 

    for(int i = start; i < rates_total; i++)
    {
        // 给每个价格加上偏移量
        OpenBuffer[i] = open[i] + offset;
        HighBuffer[i] = high[i] + offset;
        LowBuffer[i] = low[i] + offset;
        CloseBuffer[i] = close[i] + offset;
    }
    
    return(rates_total);
}

使用步骤

  1. 把上面的代码复制到MT4的MetaEditor中,保存为.mq4文件(比如命名为ShiftedCandles.mq4),编译通过。
  2. 回到MT4图表,右键点击图表 → 「插入」→ 「指标」→ 「自定义」,找到你刚编译的指标加载到图表上。
  3. 隐藏原始的默认蜡烛图:右键图表 → 「品种」→ 取消勾选「显示」,这样就只显示我们偏移后的蜡烛图了。

注意事项

  • 代码里的offset = Point * 1表示上移1点,如果需要调整偏移点数,直接修改数字即可(比如上移2点就改成Point * 2)。
  • Point变量是MT4内置的,会自动识别当前交易品种的1点对应的数值,不用手动修改,兼容性很好。
  • 你之前尝试的直方图方法确实不适用,因为直方图只能绘制单值数据,而蜡烛图需要同时处理开、高、低、收四个价格维度,这个自定义蜡烛指标才是正确的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:08:57