请教这个自己编写的超前指标为什么不显示啊?

 

请教这个自己编写的超前指标为什么不显示啊?只要求显示经过计算的那根均线。

是哪里的语句错了吗?

研究了整夜都没发现错误之处,郁闷了!!

请各位高手帮忙解决!

多谢!!!


#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern double FastEMA=8.3896;
extern double SlowEMA=17.5185;
extern double SignalEMA=9.0503;

double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double ind_buffer5[];


int init()
  {
   SetIndexBuffer(0,ind_buffer1);
   SetIndexBuffer(1,ind_buffer2);
   SetIndexBuffer(2,ind_buffer3);
   SetIndexBuffer(3,ind_buffer4);
   SetIndexBuffer(4,ind_buffer5);
   SetIndexShift(0,1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexDrawBegin(0,20);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   IndicatorShortName("MA");
   SetIndexLabel(0,"MA");
  
//---- indicator short name
   
  

//---- indicator buffers mapping
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {

   int    counted_bars=IndicatorCounted();
   
   int limit;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
   for (int i=0;i<limit;i++)
      {
      ind_buffer2[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);

      ind_buffer3[i]=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
  
      ind_buffer4[i]=ind_buffer2[i]-ind_buffer3[i];
//---- signal line counted in the 2-nd buffer

      ind_buffer5[i]=iMAOnArray(ind_buffer4,0,SignalEMA,0,MODE_EMA,i);
   
      ind_buffer1[i]=9*ind_buffer5[i]-7*ind_buffer2[i]+8*ind_buffer3[i];
      }
      
//---- done
   return(0);
//----
   
//----

  }
//+------------------------------------------------------------------+
 

5 啊 5 !!!!!

#property indicator_buffers 5
#property indicator_color1 Blue
#property indicator_color2 Blue

#property indicator_color3 Blue

#property indicator_color4 Blue

#property indicator_color5 Blue

 

9*ind_buffer5[i]-7*ind_buffer2[i]+8*ind_buffer3[i];

结果可能不在坐标范围,如何显示。

Print (ind_buffer1[i]);调试

 
DxdCn 写道 >>

9*ind_buffer5[i]-7*ind_buffer2[i]+8*ind_buffer3[i];

结果可能不在坐标范围,如何显示。

Print (ind_buffer1[i]);调试

2009.04.26 18:09:31 MACD预测器 EURUSD,M5: macd1=15461882259.7255,macd2=1.3251,macd3=1.3251,macd4=-0.0001,macd5=1717986917.6

以上是我把所有的5个数组都显示出来了,可以看到是ind_buffer5 有问题的。

ind_buffer5[i]=iMAOnArray(ind_buffer4,0,SignalEMA,0,MODE_EMA,i);

这样才导致了ind_buffer1的数值有问题。但是我不知道为什么这个ind_buffer5是ind_buffer4的平均数组而已,怎么会有这么大的值呢?

2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2901,macd2=1.2901,macd3=1.2901,macd4=0,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2894,macd2=1.2903,macd3=1.2902,macd4=0.0001,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2896,macd2=1.2903,macd3=1.2902,macd4=0.0001,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.29,macd2=1.2902,macd3=1.2902,macd4=0,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2911,macd2=1.2899,macd3=1.29,macd4=-0.0001,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2916,macd2=1.2896,macd3=1.2899,macd4=-0.0002,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2927,macd2=1.2892,macd3=1.2896,macd4=-0.0004,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2932,macd2=1.2889,macd3=1.2894,macd4=-0.0005,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2925,macd2=1.2889,macd3=1.2894,macd4=-0.0004,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2914,macd2=1.2892,macd3=1.2895,macd4=-0.0003,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2909,macd2=1.2893,macd3=1.2895,macd4=-0.0002,macd5=2147483647

为什么macd5始终是=2147483647,而macd1的数值19327352824.2909在小数点后边的值应该是正确的,但是前边的1却始终是这么大的数字。

看来问题还是出在了macd5(ind_buffer5)。是我的计算的公式有问题吗?我看了MACD的公式代码,

for(int i=0; i<limit; i++)
      ind_buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      ind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA,0,MODE_SMA,i);

我只是多增加了个数组而已。怎么结果就这么大的差别?

另外发现一个奇怪的问题!!当我把#property indicator_buffers 5 中的5改为1再编译后,原来主图中不显示的指标却显示出来了。只是显示了3条线,数值也都是正确的:

2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2905,macd2=1.2904,macd3=1.2902,macd4=0.0002,macd5=0.0002
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2914,macd2=1.2901,macd3=1.2901,macd4=-0,macd5=0.0001
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2915,macd2=1.2899,macd3=1.29,macd4=-0.0001,macd5=0.0001
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2917,macd2=1.2896,macd3=1.2898,macd4=-0.0002,macd5=0
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2916,macd2=1.2894,macd3=1.2897,macd4=-0.0003,macd5=-0
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.291,macd2=1.2893,macd3=1.2896,macd4=-0.0003,macd5=-0.0001
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2906,macd2=1.2892,macd3=1.2895,macd4=-0.0003,macd5=-0.0002
2009.04.26 18:22:11 MACD预测器 EURUSD,M5: macd1=1.2902,macd2=1.2891,macd3=1.2894,macd4=-0.0004,macd5=-0.0002
但是,当我在主图中点击鼠标右键点击指标属性后,没有任何的参数改动情况下只要点击“确定”按钮,原来显示的线又一次消失了,数值依然变为:

2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2927,macd2=1.2892,macd3=1.2896,macd4=-0.0004,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2932,macd2=1.2889,macd3=1.2894,macd4=-0.0005,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2925,macd2=1.2889,macd3=1.2894,macd4=-0.0004,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2914,macd2=1.2892,macd3=1.2895,macd4=-0.0003,macd5=2147483647
2009.04.26 18:23:04 MACD预测器 EURUSD,M5: macd1=19327352824.2909,macd2=1.2893,macd3=1.2895,macd4=-0.0002,macd5=2147483647

不再显示了。

请问这个作何解释呢?

麻烦您了,版主!!

 

try:

IndicatorBuffers(5);
SetIndexBuffer(0,ind_buffer1);

...........................

limit=Bars-counted_bars;

for (int i=0;i<limit;i++)
{
ind_buffer2[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);

ind_buffer3[i]=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

ind_buffer4[i]=ind_buffer2[i]-ind_buffer3[i];
//---- signal line counted in the 2-nd buffer

}
for (int i=0;i<Bars;i++)
{

ind_buffer5[i]=iMAOnArray(ind_buffer4,0,SignalEMA,0,MODE_EMA,i);
}

limit=Bars-counted_bars;

for (int i=0;i<limit;i++)
{

ind_buffer1[i]=9*ind_buffer5[i]-7*ind_buffer2[i]+8*ind_buffer3[i];
}

//////////////////

iMAOnArray有时候有古怪的

 
DxdCn 写道 >>

try:

IndicatorBuffers(5);
SetIndexBuffer(0,ind_buffer1);

...........................

limit=Bars-counted_bars;

for (int i=0;i<limit;i++)
{
ind_buffer2[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);

ind_buffer3[i]=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

ind_buffer4[i]=ind_buffer2[i]-ind_buffer3[i];
//---- signal line counted in the 2-nd buffer

}
for (int i=0;i<Bars;i++)
{

ind_buffer5[i]=iMAOnArray(ind_buffer4,0,SignalEMA,0,MODE_EMA,i);
}

limit=Bars-counted_bars;

for (int i=0;i<limit;i++)
{

ind_buffer1[i]=9*ind_buffer5[i]-7*ind_buffer2[i]+8*ind_buffer3[i];
}

//////////////////

iMAOnArray有时候有古怪的

多谢版主的热心帮助!!!

依照版主的方式,问题被解决了!!O(∩_∩)O~

 
声明: 我不是版主,只是帮你的一个普通中国人!!!
 
DxdCn 写道 >>
声明: 我不是版主,只是帮你的一个普通中国人!!!

好! 顶!

 
不过最好不好写超前指标!意义不大!
原因: