问一个关于指标缓存区的问题。

 

我现在,在尝试写一个自定义指标。

这个我设计的指标,要用到多个数组缓存区,用的是“iMAOnArray”函数处理。

而我发现,居然缓存区不够用了,“#property indicator_buffers 8”。

请问有办法,在不超出缓存区的情况下解决问题,或者在不占用缓存区的情况下,使用辅助计算数组。

 

什么叫不够用? 

需要多少缓存数组是你自己可以定义的。 

 
luenbo:

什么叫不够用? 

需要多少缓存数组是你自己可以定义的。 

double         DBBuffer[];   
double         Var4Buffer[]; 
double         Var7Buffer[]; 
double         Var9Buffer[]; 
double         VarCBuffer[]; 
double         VarDBuffer[]; 
double         VarEBuffer[]; 
double         Var10Buffer[]; 

   SetIndexBuffer(0,DBBuffer);
   SetIndexBuffer(1,Var4Buffer);
   SetIndexBuffer(2,Var7Buffer);
   SetIndexBuffer(3,Var9Buffer);
   SetIndexBuffer(4,VarCBuffer);
   SetIndexBuffer(5,VarDBuffer);
   SetIndexBuffer(6,VarEBuffer);
   SetIndexBuffer(7,Var10Buffer);


缓冲区的个数不能超过8个或者是小于在自定义缓冲区属性中所给出的值。

 

#property indicator_buffers XX

XX你可自己定义,用于指标值的设置为INDICATOR_DATA,用于中间计算过程的设置为INDICATOR_CALCULATIONS。 

 
luenbo:

#property indicator_buffers XX

XX你可自己定义,用于指标值的设置为INDICATOR_DATA,用于中间计算过程的设置为INDICATOR_CALCULATIONS。 

这是MQL5的方法,那MQL4也可可以吗?
 
luenbo:

#property indicator_buffers XX

XX你可自己定义,用于指标值的设置为INDICATOR_DATA,用于中间计算过程的设置为INDICATOR_CALCULATIONS。 

已试可行,谢谢!

请问控制指标窗口图形线的函数,用哪个?

由于我用了多个辅助数组,这些数组也把图形输出到指标窗口,我想把它们隐藏掉。

 
#property indicator_minimum    0
#property indicator_maximum    100
#property indicator_level1 80.0
#property indicator_level2 16.18
#property indicator_levelcolor clrGray
#property indicator_levelwidth 1
#property indicator_levelstyle STYLE_SOLID

#property indicator_separate_window
#property indicator_buffers 8         //8条需要绘制的指标线

//--- plot M1_1
#property indicator_color1  clrRed
#property indicator_width1  2
//--- plot M1_2
#property indicator_color2  clrGreen
#property indicator_width2  2
//--- plot M4_1
#property indicator_color3  clrCyan
#property indicator_width3  2
//--- plot M4_2
#property indicator_color4  clrYellow
#property indicator_width4  2
//--- plot M2
#property indicator_color5  clrBlue
#property indicator_width5  1
//--- plot M3
#property indicator_color6  clrBrown
#property indicator_width6  1
//--- plot N1
#property indicator_color7  clrBlueViolet
#property indicator_width7  1
//--- plot N2
#property indicator_color8  clrGray
#property indicator_width8  1

//--- input parameters
input int      AV1_period  = 45;
input int      RSV4_period = 90;
input int      AV2_period  = 30;
input int      RSV2_period = 60;
input int      start_pos   = 200;

//--- indicator buffers
double         M1Buffer1[]; 
double         M1Buffer2[];
double         M4Buffer1[];
double         M4Buffer2[];
double         M2Buffer[];
double         M3Buffer[];
double         N1Buffer[];
double         N2Buffer[];
double         av1Buffer[];
double         rsv4Buffer[];
double         av2Buffer[];
double         rsv2Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(12);         //需要额外的4个指标缓存数组
//--- indicator buffers mapping
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,M1Buffer1,INDICATOR_DATA);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,M1Buffer2,INDICATOR_DATA);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,M4Buffer1,INDICATOR_DATA);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,M4Buffer2,INDICATOR_DATA); 
   SetIndexStyle(4,DRAW_LINE);  
   SetIndexBuffer(4,M2Buffer,INDICATOR_DATA);
   SetIndexStyle(5,DRAW_LINE);   
   SetIndexBuffer(5,M3Buffer,INDICATOR_DATA); 
   SetIndexStyle(6,DRAW_LINE); 
   SetIndexBuffer(6,N1Buffer,INDICATOR_DATA);  
   SetIndexStyle(7,DRAW_LINE);   
   SetIndexBuffer(7,N2Buffer,INDICATOR_DATA);
   //下面4个数组用于中间计算
   SetIndexBuffer(8,av1Buffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(9,rsv4Buffer,INDICATOR_CALCULATIONS); 
   SetIndexBuffer(10,av2Buffer,INDICATOR_CALCULATIONS); 
   SetIndexBuffer(11,rsv2Buffer,INDICATOR_CALCULATIONS);  
   
   SetIndexLabel(0,"M1");
   SetIndexLabel(1,"M4");
   SetIndexLabel(4,"M2");
   SetIndexLabel(5,"M3");
   SetIndexLabel(6,"N1");
   SetIndexLabel(7,"N2");
   //---
   return(INIT_SUCCEEDED);
  }