静态数组 ? - 页 4 123456 新评论 Agent86 2011.09.21 02:52 #31 对于第二个循环中的i=Bars,它打印了所有的数组元素,但没有打印值,而且所有的=0 我很困惑 在第一个循环中去掉了结尾的i--,但没有影响。 Simon Gniadkowski 2011.09.21 12:42 #32 只要做一个小小的改动,你的代码似乎就可以做一些事情了 . . 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]=0 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]=0 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]=0 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]=0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]=0 当你阅读关于数组的书时,你是否看到它是这样说的? "在声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:" static array ? C-Trader (Watch out Freedom ArrayCopy with arrays of Agent86 2011.09.21 13:20 #33 RaptorUK: 只要做一个小小的改动,你的代码似乎就可以做一些事情了 . . 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]=0 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]=0 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]=0 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202 2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]=0 当你阅读关于数组的书时,你是否看到它是这样说的? "在声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:" 是的,我做到了 我的理解是,在start()之前,double v1[]决定了全局的数据类型。 然后[i]初始化数组,告诉它数组中有多少个元素,在这种情况下,1维的元素=Bars,但是在i--的递增过程中,这个数字会改变。 对吗? 因此,如果它正在减少元素的数量,那么如果元素的数量不再存在,缓冲区如何存储和发布指标? 或者我想我应该说,当他们递减[i]时,这些元素会发生什么? 它们就这样消失了吗?它们是仍然存储在v1[i]中被引用,还是已经消失? 如果我能够弄清楚这一点,也许我就能够理解如何引用它们,或者如果它们消失了,那么我就能够弄清楚如何保留它们以供使用。 我不明白的是,else语句似乎可以引用v1[i]=v1[i+1],那么当我在这一点上打印时,如果v1[i]=0,它怎么能引用v1[i]。 这在某种意义上来说,=0是有意义的,因为如果数组是空的,那么它就会把空数组打印成0,因为数组中没有任何元素。 我不确定我是否真的理解它,但我一直在思考这个问题,并反复阅读文件。 现在考虑到Bars,如果Bars有多个数字与之相关,那么维度可能与我所想的不同。 所以我想我也要多读一些这方面的资料,以确保我明白我到底是什么。 我以为它只是一个单一的数字计数,如Bar=图表中的条数。 当我打印Bars时,在5分钟的图表上给了我1002,我想这是一个单一的维度。 我会继续努力的。 Simon Gniadkowski 2011.09.21 13:39 #34 如果你想让一个数组变大(或变小),你需要使用ArrayResize......一个数组就像其他的变量一样,只是可以有很多的数组,你可以很容易地访问。 复制这段代码并作为一个脚本运行,你认为输出结果会是什么? //+------------------------------------------------------------------+ //| TestArray.mq4 | //| Copyright © 2011, MetaQuotes Software Corp. | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, MetaQuotes Software Corp." #property link "" // #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double test[]; test[39] = 45.6; Print("test[39]= ",test[39] ); return(0); } //+------------------------------------------------------------------+ Agent86 2011.09.21 13:59 #35 2011.09.21 07:54:26 none EURUSD,M5:removed 2011.09.21 07:54:26 none EURUSD,M5: uninit reason 0 2011.09.21 07:54:26 none EURUSD,M5: deinitialized 2011.09.21 07:54:26 none EURUSD,M5: test[39] = 0 2011.09.21 07:54:26 none EURUSD,M5: initialized 这是脚本产生的结果,我准确地复制了它 我只是双击它,它就运行了,这是出现在专家标签中的内容 脚本的日志只是说 2011.09.21 07:54:26 脚本无 EURUSD,M5: 删除 2011.09.21 07:54:26 脚本无 EURUSD,M5: 载入成功 我想我应该看到45.6作为输出 ? 我错了吗 ? 我创建了自己的固定数组[5] = {1,2,3,4,5}。 而且似乎可以打印[5]或打印[3]等。 让我把大括号放进去,再看看这个脚本吧 static array ? Automated Trading Championship 2011 I greatly doubt about Simon Gniadkowski 2011.09.21 14:02 #36 好的,很好。现在编辑这一行。 ..再试一次。 double test[]; to double test[40]; Agent86 2011.09.21 14:10 #37 2011.09.21 08:07:58 none EURUSD,M5: uninit reason 0 2011.09.21 08:07:58 none EURUSD,M5:deinitialized 2011.09.21 08:07:58 none EURUSD,M5: test[39]=45.6 该死的,我得走了,几个小时后回来。 也许我可以在开车时再考虑一下这个问题 Simon Gniadkowski 2011.09.21 15:30 #38 真的没有什么可考虑的......。 "当声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:" 你需要声明数组中的项目数量 . Agent86 2011.09.21 16:10 #39 有趣的是 我以为元素数量的声明是用v1[i]完成的? 因为i=Bars,我以为这和说v1[Bars]是一样的,不管这个数字是多少。 如果它没有被声明,我不明白如果我也不能引用它,指标怎么会知道v1[i]是什么? 同样的脚本在指标版本上工作,并将其存储在v1[]的缓冲区中,那么它是如何知道如何引用缓冲区来画线的? 它目前在指标上工作。这是一个不同的主题吗? Simon Gniadkowski 2011.09.21 16:38 #40 是的,指标缓冲区 的处理方式与普通数组不同。 v[i]不是在声明数组,它只是其中的一个元素 ......但是double v[]; 是一个零元素的数组 ......所以 v[anything] 总是 = 0 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我很困惑
在第一个循环中去掉了结尾的i--,但没有影响。
只要做一个小小的改动,你的代码似乎就可以做一些事情了 . .
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]=0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]=0
"在声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"
只要做一个小小的改动,你的代码似乎就可以做一些事情了 . .
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]=0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[8]=0
"在声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"
我的理解是,在start()之前,double v1[]决定了全局的数据类型。
然后[i]初始化数组,告诉它数组中有多少个元素,在这种情况下,1维的元素=Bars,但是在i--的递增过程中,这个数字会改变。
对吗?
因此,如果它正在减少元素的数量,那么如果元素的数量不再存在,缓冲区如何存储和发布指标?
或者我想我应该说,当他们递减[i]时,这些元素会发生什么?
它们就这样消失了吗?它们是仍然存储在v1[i]中被引用,还是已经消失?
如果我能够弄清楚这一点,也许我就能够理解如何引用它们,或者如果它们消失了,那么我就能够弄清楚如何保留它们以供使用。
我不明白的是,else语句似乎可以引用v1[i]=v1[i+1],那么当我在这一点上打印时,如果v1[i]=0,它怎么能引用v1[i]。
这在某种意义上来说,=0是有意义的,因为如果数组是空的,那么它就会把空数组打印成0,因为数组中没有任何元素。
我不确定我是否真的理解它,但我一直在思考这个问题,并反复阅读文件。
现在考虑到Bars,如果Bars有多个数字与之相关,那么维度可能与我所想的不同。
所以我想我也要多读一些这方面的资料,以确保我明白我到底是什么。
我以为它只是一个单一的数字计数,如Bar=图表中的条数。
当我打印Bars时,在5分钟的图表上给了我1002,我想这是一个单一的维度。
我会继续努力的。
如果你想让一个数组变大(或变小),你需要使用ArrayResize......一个数组就像其他的变量一样,只是可以有很多的数组,你可以很容易地访问。
复制这段代码并作为一个脚本运行,你认为输出结果会是什么?
2011.09.21 07:54:26 none EURUSD,M5: uninit reason 0
2011.09.21 07:54:26 none EURUSD,M5: deinitialized
2011.09.21 07:54:26 none EURUSD,M5: test[39] = 0
2011.09.21 07:54:26 none EURUSD,M5: initialized
这是脚本产生的结果,我准确地复制了它
我只是双击它,它就运行了,这是出现在专家标签中的内容
脚本的日志只是说
2011.09.21 07:54:26 脚本无 EURUSD,M5: 删除
2011.09.21 07:54:26 脚本无 EURUSD,M5: 载入成功
我想我应该看到45.6作为输出 ? 我错了吗 ?
我创建了自己的固定数组[5] = {1,2,3,4,5}。
而且似乎可以打印[5]或打印[3]等。
让我把大括号放进去,再看看这个脚本吧
好的,很好。现在编辑这一行。
..再试一次。
2011.09.21 08:07:58 none EURUSD,M5:deinitialized
2011.09.21 08:07:58 none EURUSD,M5: test[39]=45.6
该死的,我得走了,几个小时后回来。
也许我可以在开车时再考虑一下这个问题
真的没有什么可考虑的......。
"当声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"
你需要声明数组中的项目数量 .
有趣的是
我以为元素数量的声明是用v1[i]完成的? 因为i=Bars,我以为这和说v1[Bars]是一样的,不管这个数字是多少。
如果它没有被声明,我不明白如果我也不能引用它,指标怎么会知道v1[i]是什么?同样的脚本在指标版本上工作,并将其存储在v1[]的缓冲区中,那么它是如何知道如何引用缓冲区来画线的?
它目前在指标上工作。这是一个不同的主题吗?
是的,指标缓冲区 的处理方式与普通数组不同。
v[i]不是在声明数组,它只是其中的一个元素 ......但是double v[]; 是一个零元素的数组 ......所以 v[anything] 总是 = 0