真心求助公式代码错误在哪? - 页 4 12345 新评论 okwh 2013.03.28 06:06 #31 我说的画图是指 图上的交叉标记 和 能被EA代码调用获得的标记位置,只有这样才能被EA代码调用。 没人在意你的个人喜好、性格,事实不是我爱不爱听,而是我看不懂你说的什么,我看到的是代码,我可没本事也没兴趣判断写代码的人,如果大家说的根本不是一个意思,那是无法交流的。学有用的没错,可从这些代码证明 不知道有用的是什么,当然根本谈不上学了。 就像ea是指程序代码判断计算机自动下单和平仓。 如果你以为的EA是指Alert print给人一个提醒,让你人下单平仓的话,那就没法讨论的了,你可以坚持你以为的EA概念,也可以坚持你说的显示就是print alert了。 就像iMAOnArray需要数组,你给它一个单个double值,还指望它给出0,1下标的两个值,那是不可能的了。 其实你只需要 print 出你用到的计算的所有数据如ma1ma2ma3ma4,你就知道你在用什么比较了 wgaga 2013.03.28 08:55 #32 啊,我终于明白你的意思了,你是说我虽然设了数组变量,但是我没有存储这些变量,只有存储了这些变量,才能调用。好,我再试试。谢谢,谢谢你的帮忙。 wgaga 2013.03.28 09:17 #33 #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); } 可还是不行啊?没结果啊? DxdCn老师,你在吗?还是不行啊! 示例: 使用 MetaTrader 4客户端初学者的常见错误 测试者: 在 MetaTrader 4 wgaga 2013.03.28 09:33 #34 #property indicator_buffers 2我加了这个语句, int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,buffer1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,buffer2); return(0); }是不是就可以呢? wgaga 2013.03.28 19:46 #35 还是没有啊,应该是数据传递出了问题,不知错在那 .按照你说的,我给了两个存储器,应该返回信号了。现在没有啊。 wgaga 2013.03.29 22:27 #36 我的问题看似很简单,好像解决起来不那么简单。我的问题是当给出两条任意均线时,有一个函数能够帮我判断他们是否交叉。如果交叉,给我一个信号。 okwh 2013.03.30 05:55 #37 试试: 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) okwh 2013.03.30 05:59 #38 double buffer1[]; double buffer2[]; 是在int init()前面的 https://www.mql5.com/zh/code/7438看明白没? wgaga 2013.03.31 01:59 #39 #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) 出不来结果,你可以试试。没有调用。 DxdCn老师,你在吗?还是不行啊! 示例: 使用 MetaTrader 4客户端初学者的常见错误 测试者: 在 MetaTrader 4 wgaga 2013.03.31 02:08 #40 用iMAOnArray是因为它是对数组进行操作的,而均线理应看做是与时间有关的数组啊。用不用iMAOnArray,不重要。如果用别的能做出当给出两条任意均线时,有一个函数能够帮我判断他们是否交叉。如果交叉,给我一个信号。就行。 是啊,我先看看有没有ma1,ma2,ma3,ma4.今天不行,要等到星期一,如果没有,那IF(MA3小于MA4 && MA1大于等于MA2) 就是空的。 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
试试:
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)