SetIndexBuffer
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 值表示缓冲器在指标媒介计算中使用,而不是用来绘画的。
返回值
注释
在捆绑后,动态数组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);
}
//+------------------------------------------------------------------+