MQL4 - 创建自动换档阵列?

时间:2018-03-24 06:10:50

标签: arrays mql4

我正在制作自定义指标...

设置为IndexBuffers的Double Arrays在每次创建新柱时自动向右移动。 和常量一样,例如Open [],Close []等。 原因很明显......当图表加载时,可以使用相同的代码,如图表更新时,无需重新计算现有的条形图。

int start()                         
{
   int Counted_bars;
   Counted_bars=IndicatorCounted(); 
   i=Bars-Counted_bars-1;           
   while(i>=0)                      
   {
      IndicatorBuffer[i] = [Some-calculations];
      i--;                          
   }
   return (1);                          
}

有没有办法声明一个数组,每当创建一个新的条形图时,该数组也会自动移动?最好使用Existing API。所以喜欢:

enum Range{Low, Mid, high};
Range[] BarRange;  //A Range value corresponding to each bar, calculates in the start loop.

如何使其与其他阵列保持同步?

2 个答案:

答案 0 :(得分:0)

声明一个新数组并将其指定给SetIndexBuffer(number of array,arrayName, INDICATOR_CALCULATIONS),以便在绘制时保持不可见。如果你需要一个结构,它可以使用仅double类型的数组 - 那么你必须使用其他东西(可能会将struct更改为class并填入{{1并检查每个栏以扩展它或添加新元素)

答案 1 :(得分:0)

不要惊慌:

最初的想法

enum Range{  Low,
             Mid,
             high
             };
     Range[] BarRange;

将(编辑2018 / Q1)超出编译器编译此类代码的意愿,

然而:

只需稍加修改的方法(使用基于此机制的大量基于阵列的分析和增强交易工具):

#define getLow  0
#define getMid  1
#define getHigh 2

double array_of_almost_structs[][];
    //                         | |
    //                         | +----------+
    //                         |            |
    // fill data as needed  row# ~ bar#, col# ~ { getLow | getMid | getHigh }

因此可以规避语法限制。

CustomIndicator 代码单元接口还有其他要点:

鉴于您的代码执行单元应该通过 CustomIndicator 进程到进程接口使用,因此会出现更多问题。

MQL4 / 5代码的 ExpertAdvisor 类型会调用 iCustom() 接口代理。

这些细节阻止了您对MQL4 / 5代码的 CustomIndicator 类型的创新,因为“远程”调用启动器将无法正确“选择”-data-来自任何更智能的“远程”存储的元素,而不是通过“nailed”-down plain double array1D[];隐式对齐/寻址,“注册”到分布式 CustomIndicator {{1通过调用 <->

ExpertAdvisor 数据管理机制

对此没什么关系。