真心求助公式代码错误在哪? - 页 5

 

1)     if(LineCrossedLine(buffer1,buffer2)

2)     LineCrossedLine(double ExtBuffer1[],double ExtBuffer2[])

3)     iMAOnArray(ExtBuffer1,0,0,0   既然用iMAOnArray,为什么参数都是0??

看来你不明白我问的什么,那就把3)的问法换换。后来想是不是要用当前周期(??),才改的0。似乎你不知道iMAOnArray的period参数是什么意思?

似乎你也根本不注意1) 2)指什么。  虽然你说是数组,可你定义和传入参数用的都是值 不是数组,iMAOnArray就更毫无意义了 

 

在MT中时间周期的对应英文是timeframe, 可不是 period.

MT中的peroid大致对应中文说的 用来计算的点数或坐标单位数,如5点移动平均这个5.

网上文字交流,大家如果说的根本不是一个意思,就没法交流的

比如你把 1) 2)和你原来的代码比较一下,大概你就知道问题在哪里了

 
哦,我明白了。 #property indicator_chart_window #property indicator_buffers 2 double buffer1[]; double buffer2[]; int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,buffer1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,buffer2); return(0); } int deinit() { return(0); } int start() { for(int i=0;i<4;i++) { buffer1[i]=iMA(NULL,0,5,0,MODE_SMMA,PRICE_MEDIAN,i); buffer2[i]=iMA(NULL,0,8,0,MODE_SMMA,PRICE_MEDIAN,i); } if(LineCrossedLine(buffer1,buffer2)) {Print("穿过"); Alert("穿穿"); } return(0); } //+------------------------------------------------------------------+ bool LineCrossedLine(double ExtBuffer1[],double ExtBuffer2[]) //均线Buffer1上穿均线Buffer2(这个上穿是确定性的穿过) { double ma1=iMAOnArray(ExtBuffer1,0,1,0,MODE_LWMA,0); double ma2=iMAOnArray(ExtBuffer2,0,1,0,MODE_LWMA,0); double ma3=iMAOnArray(ExtBuffer1,0,1,0,MODE_LWMA,1); double ma4=iMAOnArray(ExtBuffer2,0,1,0,MODE_LWMA,1); if(ma3<ma4 && ma1>=ma2) return(true); else return(false); },对吗?
 
我真不知道MT中的peroid是什么意思,我完全是靠看别人的程序来理解的。我不想让它移动平均,我是否可以用1呢?就像均线的意思是这点的值是在它之前的5个收盘价的平均值,下一个点是向后错一位的5个收盘价的平均值,这个理解对吗?我给出的已经是均线了,如果再平均,那就不是我要的数值了,iMAOnArray(ExtBuffer,0,1,0,MODE_LWMA,i)这样对吗?也就是说,0代表当前值,还是1代表当前值,就它一个值的移动平均,应该是它本身了吧?
 
DxdCn老师,非常感谢。出来了。接下来就是看如何把它用到ea里了。我看了好多ea好像都没有用存储器的,不知道能否用。我会去试试的。再次感谢您,您让我从中学到了好多东西。谢谢!
 
DxdCn老师,还是不对,print 没有出来,Alert 出来了,但是时间对不上,图上的Moving Average明显交叉了,可就是没有print 图上没交叉Alert 出来了,我要的结果和程序的结果不一致。
 
我在 bool LineCrossedLine(double ExtBuffer1[],double ExtBuffer2[]) //均线Buffer1上穿均线Buffer2(这个上穿是确定性的穿过) { double ma1=iMAOnArray(ExtBuffer1,0,1,0,MODE_LWMA,0); double ma2=iMAOnArray(ExtBuffer2,0,1,0,MODE_LWMA,0); double ma3=iMAOnArray(ExtBuffer1,0,1,0,MODE_LWMA,1); double ma4=iMAOnArray(ExtBuffer2,0,1,0,MODE_LWMA,1); Print("ma1=",ma1," ","ma2=",ma2," ","ma3=",ma3," ","ma4=",ma4," ",);if(ma3<ma4 && ma1>=ma2) return(true); else return(false); }, 中间if前加了 Print("ma1=",ma1," ","ma2=",ma2," ","ma3=",ma3," ","ma4=",ma4," ",);但是看不到print 出来。
 
DxdCn老师,还是不对啊。Alert 有,但提示的时间不对,print没有,说明什么呢? 是不是编写方法有问题呢?不应该用iMAOnArray?
 
DxdCn老师,你在吗?还是不行啊!
原因: