3

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

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

iBands()文档将 8 个输入列为:

symbol 
timeframe   
period    
deviation   
bands_shift 
applied_price   
mode     
shift

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

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 代码相同的输出。任何提示都将不胜感激!

4

2 回答 2

2

以我对布林带的了解很少,您似乎可能遇到了实施问题。您是否尝试过在 MATLAB 中输出Bollinger函数?

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

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

于 2014-02-09T05:55:48.153 回答
1

如何理解iBars+1和“失踪Out of Range Error

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

总是[0]

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

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

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

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

如何理解bands_shiftshift

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

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

一旦完成布林带计算,人们可能希望将曲线偏移一些柱 - 在 TimeDOMAIN { +N << left | -N >> right } -- 让可视化的图形满足一个人的期望或愉悦。

bands_shift为这个图的 ad-hoc 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() 三次以获得树线布林带,或多次调用光谱色布林带热图。 在此处输入图像描述

于 2014-07-11T14:26:35.387 回答