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

 
我说的画图是指 图上的交叉标记 和 能被EA代码调用获得的标记位置,只有这样才能被EA代码调用。 没人在意你的个人喜好、性格,事实不是我爱不爱听,而是我看不懂你说的什么,我看到的是代码,我可没本事也没兴趣判断写代码的人,如果大家说的根本不是一个意思,那是无法交流的。学有用的没错,可从这些代码证明 不知道有用的是什么,当然根本谈不上学了。 就像ea是指程序代码判断计算机自动下单和平仓。 如果你以为的EA是指Alert print给人一个提醒,让你人下单平仓的话,那就没法讨论的了,你可以坚持你以为的EA概念,也可以坚持你说的显示就是print alert了。 就像iMAOnArray需要数组,你给它一个单个double值,还指望它给出0,1下标的两个值,那是不可能的了。 其实你只需要 print 出你用到的计算的所有数据如ma1ma2ma3ma4,你就知道你在用什么比较了
 
啊,我终于明白你的意思了,你是说我虽然设了数组变量,但是我没有存储这些变量,只有存储了这些变量,才能调用。好,我再试试。谢谢,谢谢你的帮忙。
 
#property indicator_chart_window #property indicator_buffers 2 int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,buffer1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,buffer2); return(0); } int deinit() { return(0); } int start() { double buffer1[]; double buffer2[]; 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[i],buffer2[i])==true) {Print("穿过"); Alert("穿穿"); } return(0); } bool LineCrossedLine(double ExtBuffer1,double ExtBuffer2) //均线ExtBuffer1上穿均线ExtBuffer2(这个上穿是确定性的穿过) { double ma1=iMAOnArray(ExtBuffer1,0,0,0,MODE_SMA,0); double ma2=iMAOnArray(ExtBuffer2,0,0,0,MODE_SMA,0); double ma3=iMAOnArray(ExtBuffer1,0,0,0,MODE_SMA,1); double ma4=iMAOnArray(ExtBuffer2,0,0,0,MODE_SMA,1); IF(MA3小于MA4 && MA1大于等于MA2) return(true); else return(false); } 可还是不行啊?没结果啊?
 
#property indicator_buffers 2我加了这个语句, int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,buffer1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,buffer2); return(0); }是不是就可以呢?
 
还是没有啊,应该是数据传递出了问题,不知错在那 .按照你说的,我给了两个存储器,应该返回信号了。现在没有啊。
 
我的问题看似很简单,好像解决起来不那么简单。我的问题是当给出两条任意均线时,有一个函数能够帮我判断他们是否交叉。如果交叉,给我一个信号。
 

试试:

1)     if(LineCrossedLine(buffer1,buffer2)

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

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

4)     Print("ma1=",ma1," ","ma2=",ma2," ","ma3=",ma3," ","ma4=",ma4," ",); IF(MA3小于MA4 && MA1大于等于MA2)

 
double buffer1[]; double buffer2[]; 是在int init()前面的 https://www.mql5.com/zh/code/7438看明白没?
 
#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[i],buffer2[i])==true) {Print("穿过"); Alert("穿穿"); } return(0); } //+------------------------------------------------------------------+ 1、double buffer1[]; double buffer2[]; 是在int init()前面啊。2、iMAOnArray(ExtBuffer1,0,0,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); },发现不行,后来想是不是要用当前周期,才改的0,。3、if(LineCrossedLine(buffer1,buffer2) 出不来结果,你可以试试。没有调用。
 
用iMAOnArray是因为它是对数组进行操作的,而均线理应看做是与时间有关的数组啊。用不用iMAOnArray,不重要。如果用别的能做出当给出两条任意均线时,有一个函数能够帮我判断他们是否交叉。如果交叉,给我一个信号。就行。 是啊,我先看看有没有ma1,ma2,ma3,ma4.今天不行,要等到星期一,如果没有,那IF(MA3小于MA4 && MA1大于等于MA2) 就是空的。
原因: