【问题标题】:Translating MQL4 ibands() to Matlab将 MQL4 ibands() 转换为 Matlab
【发布时间】:2018-01-03 12:58:47
【问题描述】:

我正在尝试将指标从 MQL4(Metatrader 语言)翻译到 Matlab。布林带代码如下:

for(int i=Bars;i>=0;i--)
{
    BANDS=iBands(Symbol(),0,20,2,1,0,1,i+1);
}

iBands() documentation 将 8 个输入列为:

symbol 
timeframe   
period    
deviation   
bands_shift 
applied_price   
mode     
shift

bands_shiftshift 外,我了解所有这些。问题:如果i = Bars 是数据的整个范围,为什么i+1 不会产生超出范围的错误?据我所知,这是 20 个周期、2 个标准差布林带的代码。对于给定的时间间隔,相关的布林带值是否是为前一个时间间隔计算的值(因此在第四个逗号之后是 1)?那么i+1 会做什么呢?鉴于此代码,我将如何在 matlab 中实现?我的尝试,使用this 移动标准差和this 移动平均:

moving_average = movemean(EURUSD_closes(1:end-1),20); %end-1 in order to shift by 1 
moving_average = [NaN; moving_average]; %adding NaN to make BANDS the length of price

moving_std = movestd(EURUSD_closes(1:end-1),20,'backward');
moving_std = [NaN; moving_std1];

BANDS = moving_average + 2*moving_std;

我认为这不会提供与 MQL4 代码相同的输出。任何提示都将不胜感激!

【问题讨论】:

    标签: matlab mql4


    【解决方案1】:

    根据我对布林带的了解,您似乎可能遇到了实施问题。你试过MATLAB中Bollinger函数的输出吗?

    对于窗口大小小于 20 的边缘情况,布林带的实现方式可能有所不同。您可能需要联系 MQL4 作者以检查所使用的公式。当我在 Python 中实现和在 Google Finance 中看到的指标时,我注意到了不同之处。不过,如果您正确实现了,窗口大小为 20 的值,您将看到相同的值。

    除非您非常确定 FEX 代码,否则您应该使用 stdmean 来实现。

    【讨论】:

      【解决方案2】:

      如何理解iBars+1和一个“缺失Out of Range Error

      MQL4 在“反向时间域索引”空间中工作。因此,iBar 显示了历史 TimeSeriesDataSET 的“深度”,而最近(实时)柱的索引为 [0]

      总是[0]

      这意味着,对于任何技术指标的计算,编码人员必须以这种方式安排处理。

      这也意味着,对于任何新柱,数据存储层的内部表示必须以某种方式将 所有 DataCELL 向“左”“移动”一个(在 TimeDOMAIN 中向后) History 的方向)为仍然索引为 [0] 的新条创建一个“空间”(TimeDOMAIN 中的 Now 时刻)。

      虽然“物理地”移动 DataSTORE 的所有当前“深度”将是一个绝对巨大的资源(时间、CPU、..),但数据存储层工作得更智能,调整每个索引头new bar event plus 使用某种形式的弹性 DataSTORE 容量规划/按需调整大小,以便在 DataSTORE 持续增长期间最小化 mem-alloc(s)。

      这意味着,对 Out of Range Error 的测试不支持 MQL4 语言的用户代码命名空间。

      如何理解bands_shiftshift

      调用iBands() 必须说明哪个Bar 要求函数计算结果。

      shift 为此提供输入。索引遵循上述规则。

      一旦完成布林带计算,人们可能希望将曲线偏移一些柱 - 将图表转置到 TimeDOMAIN { +N > right } -- 使可视化的图形满足人们的期望或愉悦。

      bands_shift 为该图的临时转换提供输入。

      另请注意,Google、Y!Finance、MATLAB 和 MQL4 图表之间观察到的差异只是必须出现并说明其他(未知)细节很难从屏幕上显示的线条中解码。

      applied_price := { PRICE_CLOSE | ... | ..._TYPICAL | ..._WEIGHTED } 提供了一个输入,用于选择进入布林线演算的适当价格类型。

      mode := { MODE_UPPER | MODE_MAIN | MODE_LOWER } 为接收 { upper_band |布林带轴 | lower_band } PriceDOMAIN 值。因此,“惰性方法”是调用 iBands() 三次以获得树线布林带,或多次调用光谱色布林带热图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2020-02-15
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多