SetIndexBuffer

该函数在全局 水平使用一维动态 双精度 数组捆绑指定指标缓冲区。

bool  SetIndexBuffer(

   int                    index,         // 缓冲指数

   double                 buffer[],      // 数组

   ENUM_INDEXBUFFER_TYPE  data_type      // 要存储的东西

   );

参量

index

[in]指标缓冲区的数字,编号从0开始,该数字在#property indicator_buffers中减少申报价格。

buffer[]

[in]  在自定义指标程序中表明一组数组。

data_type

[in] 数据存储类型在指标数组里。默认是 INDICATOR_DATA (计算指标的值),也可以使用 INDICATOR_COLOR_INDEX 值;在这种情况下缓冲区为先前指标缓冲区存储颜色指数。可以在#property indicator_colorN 水平上指定64种颜色INDICATOR_CALCULATIONS 值表示缓冲器在指标媒介计算中使用,而不是用来绘画的。

返回值

如果成功,返回 true, 否则 - false

注释

在捆绑后,动态数组buffer[]将在共同数组中编入索引,尽管 时间序列 索引已经在界限数组中预先安装,如果想要转变指标数组元素的接入命令,在使用SetIndexBuffer()函数后捆绑数组使用 ArraySetAsSeries()函数。注释表明通过SetIndexBuffer()。 函数不能改变建立指标缓冲区中的动态数组的大小,对于指标缓冲器来说,所有大小转变的操作都可以通过程序的子系统来执行。

示例:

//+------------------------------------------------------------------+

//|                                              TestCopyBuffer1.mq5 |

//|                        Copyright 2009, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "2009, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"



#property indicator_separate_window

#property indicator_buffers 1

#property indicator_plots   1

//---- 图 MA

#property indicator_label1  "MA"

#property indicator_type1   DRAW_LINE

#property indicator_color1  clrRed

#property indicator_style1  STYLE_SOLID

#property indicator_width1  1

//--- 输入参量

input bool               AsSeries=true;

input int                period=15;

input ENUM_MA_METHOD     smootMode=MODE_EMA;

input ENUM_APPLIED_PRICE price=PRICE_CLOSE;

input int                shift=0;

//--- 指标缓冲

double                   MABuffer[];

int                      ma_handle;

//+------------------------------------------------------------------+

//| 自定义指标初始化函数                                                |

//+------------------------------------------------------------------+

int OnInit()

  {

//--- 指标缓冲绘图

   if(AsSeries) ArraySetAsSeries(MABuffer,true);

   Print("Indicator buffer is timeseries = ",ArrayGetAsSeries(MABuffer));

   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);

   Print("Indicator buffer after SetIndexBuffer() is timeseries = ",

         ArrayGetAsSeries(MABuffer));



//--- 更待指标缓冲访问单元命令

   ArraySetAsSeries(MABuffer,AsSeries);



   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);

//---

   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);

   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[])

  {

//--- 复制缓冲区MABuffer中的移动平均值

   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);



   Print("MABuffer[0] = ",MABuffer[0]);// 取决于AsSeries值

                                      // 将收到旧值

                                      // 或者为当前未完成的字节



//--- 为下一次调用返回prev_calculated值

   return(rates_total);

  }

//+------------------------------------------------------------------+

另见

自定义指标属性 访问时间序列和指标