静态数组 ? - 页 2 123456 新评论 Agent86 2011.09.13 01:48 #11 好吧,至少我几乎是在正确的轨道上,但由于我不知道EMPTY_VALUE 和如何使用它,我在想尝试回环检测价值的变化,因为阻力和支撑价值保持不变,直到前一个指标。 总之,谢谢你,我必须在这方面多读一些书,我已经越来越接近了,但还是有点迷糊。) 似乎我花了太多时间来学习东西。我想我需要多读一些别人的代码,试着去理解它们,以获得更好的设计思路。 谢谢你的答复。 Agent86 2011.09.14 16:34 #12 RaptorUK: 有2个缓冲区(数组)保存着分形的价格值 . . . val1 & val2. 如果你想找到以前的分形值,你只需循环,增加一个移位值,并检查缓冲区的值,直到找到不是EMPTY_VALUE的值 (https://docs.mql4.com/customind/SetIndexEmptyValue) 好吧,我只是在这里大声思考。 所以我可以用1+代码的东西循环回v1[i]和v2[i]。 我不明白val1>0除了High[0]以外,它不是一直大于0吗? 还有,为什么val1只标记高分形,而不是所有的High[i]'s AHHH我想我明白了,因为if语句告诉它只做High[i]的。 那么好吧,让我再想一想。 val1是分形,然而v1[i]只是分形的高点,好吧,我想我已经解决了这一部分。 那么,我可以将v1[i]1++循环到EMPTY_VALUE之前的点(我必须解决这部分问题),这将是之前的High[i]分形。 我是不是越来越接近了? Simon Gniadkowski 2011.09.14 17:16 #13 Agent86: 好吧,我只是在这里大声思考。 val1是分形,但是v1[i]只是分形的高点,我想我已经解决了这部分问题。 那么,我可以将v1[i]1++循环到EMPTY_VALUE之前的那一点(我必须解决这部分问题),这将是之前的High[i]分形。 我是不是越来越接近了? 正确 . . :-) Agent86 2011.09.14 18:53 #14 RaptorUK: 正确的......:-) 呜呼!我很担心 谢谢你 Agent86 2011.09.16 03:21 #15 我弄错了,我可以在EMPTY_VALUE中填入0,它就会连续打印出0,所以这是不对的,也许这是对的,但不是我想要的效果。 不管怎么说。 //+------------------------------------------------------------------+ //| Agent86_5min.mq4 | //| Unfinished POS | //| //+------------------------------------------------------------------+ #property copyright "Unfinished POS by Agent86" //---- input parameters extern double TakeProfit=20.0; extern double Lots=0.1; extern double StopLoss=15.0; extern int MagicNumber=123486; double v1[]; double v2[]; double val1; double val2; //++++ These are adjusted for 5 digit brokers. int pips2points; // slippage 3 pips 3=points 30=points double pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (Digits == 5 || Digits == 3) { // Adjust for five (5) digit brokers. pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; } // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL int i=Bars; while(i>=0) { val1=iFractals(NULL, 0, MODE_UPPER,i); if (val1 > 0) v1[i]=High[i]; else v1[i]=v1[i+1]; val2=iFractals(NULL, 0, MODE_LOWER,i); if (val2 > 0) v2[i]=Low[i]; else v2[i]=v2[i+1]; i--; } for(val1=High[i]; v1[i] == EMPTY_VALUE ;i++) { Print (v1[i]); } //---- //---- return(0); } //+------------------------------------------------------------------+ 我以为for循环会把我带回一个信号,并为我打印出信号电平,但我什么也没得到,或者是0。 经过几天的思考和尝试,我试图对指标版本进行修改,增加第三个缓冲区,并试图在图表上用价格发出信号,但这也是徒劳的。 好吧,等等,我收回这句话,短版的EA我没有EMPTY_VALUE缓冲区,所以这很可能无论如何是行不通的,所以我的想法是测试EA,这样我就可以看到打印功能,看到结果,但指标版本我必须等待,所以我必须回帖,因为事实是这样。 无论如何,这是指标版本,但我对这一点没有信心,因为我不太确定我是否应该尝试在while语句内循环,或者创建一个新的循环,并再次重新创建val1=....。 //+------------------------------------------------------------------+ //| Support and Resistance | //| Copyright © 2004/5 Barry Stander | //| http://www.4Africa.net/4meta/ | //+------------------------------------------------------------------+ #property copyright "Support and Resistance Barry_Stander_4@yahoo.com" #property link "http://www.4Africa.net/4meta/" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 White //---- buffers double v1[]; double v2[]; double v3[]; double val1; double val2; double val3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- IndicatorBuffers(2); SetIndexArrow(0, 159); SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Red); SetIndexBuffer(0, v1); SetIndexLabel(0,"Resistance"); SetIndexEmptyValue(0,0.0); SetIndexArrow(1, 159); SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Blue); SetIndexBuffer(1, v2); SetIndexLabel(1,"Support"); SetIndexEmptyValue(1,0.0); SetIndexArrow(2, 225); SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White); SetIndexBuffer(2, v3); SetIndexLabel(2,"High A"); SetIndexEmptyValue(2,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i=Bars; //---- while(i>=0) { val1=iFractals(NULL, 0, MODE_UPPER,i); if (val1 > 0) v1[i]=High[i]; else v1[i]=v1[i+1]; val2=iFractals(NULL, 0, MODE_LOWER,i); if (val2 > 0) v2[i]=Low[i]; else v2[i]=v2[i+1]; i--; } for(val1=High[i]; v1[i] == 0 ;i++) // or v1[i] == EMPTY_VALUE { Print (v1[i]); } //---- return(0); } //+------------------------------------------------------------------+ 我现在放弃了创建第三个缓冲区/信号的尝试,只想看看我是否能打印出之前的信号的结果 我在代码中输入的EMPTY_VALUE的方式初始化了指标,但这一切都没有打印出来。 Simon Gniadkowski 2011.09.16 08:55 #16 你能解释一下这个for循环是如何工作的吗? for(val1=High[i]; v1[i] ==0 ;i++) Agent86 2011.09.16 19:18 #17 RaptorUK: 你能解释一下这个for循环是如何工作的吗? for(val1=High[i]; v1[i] ==0 ;i++) 我想我在想,既然while语句和v1[i]存储了高点,并且i--从Bars最高点开始向下计数,那么我将简单地再向上计数,而v1[i] ==EMPTY_VALUE 我想这将使i++向上递增到前一个高点,实际上我想它会超过这个高点到下一个EMPTY_VALUE。 所以我需要以相反的方式来做这件事 v1[i] = High[i]; i++ 那么这不是应该把我带到前一个高点吗,但我不确定如何正确地初始化它。 我会继续努力的。 Agent86 2011.09.17 16:43 #18 我把它改成了if(我只是想在这一点上看到任何打印,这样我至少可以看到指标在做什么。 我得到的都是0,所以当=Print(v1[i])时实际上没有任何数值。 这很奇怪,因为我怎么能让指标在这一点上工作呢? 哦,好吧,我会继续努力的。 Simon Gniadkowski 2011.09.17 17:02 #19 Agent86: 我把它改成了if(我只是想在这时看到任何打印的东西,这样我至少可以看到指标在做什么。 我得到的都是0,所以当=打印(v1[i])时,实际上没有任何数值。 这很奇怪,因为我怎么能让指标在这一点上工作呢? 哦,好吧,我会继续努力的。 也许你只是看到v1[0]的值? 同时打印i。 Print ("v1[", i, "]= ", v1[i]); Agent86 2011.09.17 18:27 #20 2011.09.17 11:56:15 2011.01.03 09:24 Agent86_5min EURUSD,M5: v1[-1]= 0 hmm有趣的是 ,我没有把它全部贴出来,但所有的行读数都是一样的=0 ,我想我还是应该看到v1[0]的实际值? ,当指标必须是if(>0)时,它怎么可能总是0? 我可能又要进入一个我无知的领域了。我想我可能会打印出来,这样我可能会尝试了解什么以及为什么我所有的尝试都失败了;而且我可能会以某种方式增加i++来获得下一个分形,然后以某种方式想出如何使用这些信息来做一些事情。 我可以打印High[i]或v1[i],但它总是0 打印High[0]或High[1]也是0 虽然我理解你发布的内容,打印i值似乎被卡住了,因为i--循环总是把它带到0,但即使如此它还是应该为i打印一个值,至少我认为是这样。 我明白为什么它要打印[-1],因为i=Bars。我明白这一点,但=0? 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
总之,谢谢你,我必须在这方面多读一些书,我已经越来越接近了,但还是有点迷糊。)
似乎我花了太多时间来学习东西。我想我需要多读一些别人的代码,试着去理解它们,以获得更好的设计思路。
谢谢你的答复。
有2个缓冲区(数组)保存着分形的价格值 . . . val1 & val2. 如果你想找到以前的分形值,你只需循环,增加一个移位值,并检查缓冲区的值,直到找到不是EMPTY_VALUE的值 (https://docs.mql4.com/customind/SetIndexEmptyValue)
所以我可以用1+代码的东西循环回v1[i]和v2[i]。
我不明白val1>0除了High[0]以外,它不是一直大于0吗?
还有,为什么val1只标记高分形,而不是所有的High[i]'s AHHH我想我明白了,因为if语句告诉它只做High[i]的。
那么好吧,让我再想一想。
val1是分形,然而v1[i]只是分形的高点,好吧,我想我已经解决了这一部分。
那么,我可以将v1[i]1++循环到EMPTY_VALUE之前的点(我必须解决这部分问题),这将是之前的High[i]分形。
我是不是越来越接近了?
好吧,我只是在这里大声思考。
val1是分形,但是v1[i]只是分形的高点,我想我已经解决了这部分问题。
那么,我可以将v1[i]1++循环到EMPTY_VALUE之前的那一点(我必须解决这部分问题),这将是之前的High[i]分形。
我是不是越来越接近了?
正确的......:-)
谢谢你
不管怎么说。
我以为for循环会把我带回一个信号,并为我打印出信号电平,但我什么也没得到,或者是0。
经过几天的思考和尝试,我试图对指标版本进行修改,增加第三个缓冲区,并试图在图表上用价格发出信号,但这也是徒劳的。
好吧,等等,我收回这句话,短版的EA我没有EMPTY_VALUE缓冲区,所以这很可能无论如何是行不通的,所以我的想法是测试EA,这样我就可以看到打印功能,看到结果,但指标版本我必须等待,所以我必须回帖,因为事实是这样。
我现在放弃了创建第三个缓冲区/信号的尝试,只想看看我是否能打印出之前的信号的结果无论如何,这是指标版本,但我对这一点没有信心,因为我不太确定我是否应该尝试在while语句内循环,或者创建一个新的循环,并再次重新创建val1=....。
我在代码中输入的EMPTY_VALUE的方式初始化了指标,但这一切都没有打印出来。
你能解释一下这个for循环是如何工作的吗?
for(val1=High[i]; v1[i] ==0 ;i++)
你能解释一下这个for循环是如何工作的吗?
for(val1=High[i]; v1[i] ==0 ;i++)
我想这将使i++向上递增到前一个高点,实际上我想它会超过这个高点到下一个EMPTY_VALUE。
所以我需要以相反的方式来做这件事 v1[i] = High[i]; i++
那么这不是应该把我带到前一个高点吗,但我不确定如何正确地初始化它。
我会继续努力的。
我得到的都是0,所以当=Print(v1[i])时实际上没有任何数值。
这很奇怪,因为我怎么能让指标在这一点上工作呢?
哦,好吧,我会继续努力的。
我把它改成了if(我只是想在这时看到任何打印的东西,这样我至少可以看到指标在做什么。
我得到的都是0,所以当=打印(v1[i])时,实际上没有任何数值。
这很奇怪,因为我怎么能让指标在这一点上工作呢?
哦,好吧,我会继续努力的。
也许你只是看到v1[0]的值? 同时打印i。
,我没有把它全部贴出来,但所有的行读数都是一样的=0
,我想我还是应该看到v1[0]的实际值?
,当指标必须是if(>0)时,它怎么可能总是0?
我可能又要进入一个我无知的领域了。
我想我可能会打印出来,这样我可能会尝试了解什么以及为什么我所有的尝试都失败了;而且我可能会以某种方式增加i++来获得下一个分形,然后以某种方式想出如何使用这些信息来做一些事情。
我可以打印High[i]或v1[i],但它总是0
打印High[0]或High[1]也是0
虽然我理解你发布的内容,打印i值似乎被卡住了,因为i--循环总是把它带到0,但即使如此它还是应该为i打印一个值,至少我认为是这样。
我明白为什么它要打印[-1],因为i=Bars。我明白这一点,但=0?