指标问题 - 页 4 12345678 新评论 Agent86 2011.10.03 01:06 #31 SDC: 或者是像这样? 但你真的应该使用 IndicatorCounted(),因为如果你这样做,你的指标在每一个新的刻度线上都会重新绘制所有的对象,而不是一次性绘制所有对象,并在新的条形图形成时添加新的对象。 这和你的另一篇关于外部bools的文章也给了我一些其他的想法,谢谢 我的关注点需要更广泛,但因为我是新手,我倾向于关注代码的一个部分,而忽略了其他部分,如外部。 我现在才开始接触数组,在理解缓冲区方面有很大的困难,但最近开始克服了这个问题。 谢谢,这也会给我一些新的想法。 Agent86 2011.10.03 01:12 #32 SDC: 你必须考虑你在做什么,当你创建一个指标时,你将你的代码应用于图表上的每一个条形,这意味着你需要获得这些历史条形的macd指标值。 在你的原始代码中,你做到了。 最后一个参数1是图表中第1条的macd值,即当前条的前一个条,索引为第0条。很明显,你不想在整个历史图表中使用macd的单一值来进行条件运算。 你需要将macd索引到与每个条形图相同的条形图索引中,例如,在条形图500中你需要这样做 最后一个参数必须改变,以匹配你的指标应用其算法的条数。 这就是为什么你需要它在循环内,所以你可以使用循环周期迭代器的最后一个参数,因此你可以得到你的macd值,因为它是历史图表中的每一个条形。 我希望这能帮助你弄清楚一些事情。 对,我确实解决了这个问题。 然而,当添加诸如if(val1 > 0 && faster > slower)之类的代码时,当在循环外声明更快和更慢时,这将无法工作。 AHHHHH 我明白了,因为移位是(i),所以我需要它在循环内 OOOOPPPS LOL blackmore 2011.10.03 01:14 #33 Agent86: 为什么for(int i = Bars-1 ? <----------------------- Bars的索引就像数组一样,第一个bar=0,而不是1。所以最后一个Bar是Bars-1; 为什么这比for(int i = Bars?? <----- 见上文。 请指示,谢谢 还有。 我想这对所有的人来说都是如此,而不仅仅是指标/自定义指标?<------我和 WHRoeder: 讨论的是相当普遍的问题。没什么特别的。 我们只是互相讨论了变量的声明和它们的赋值,等等,关于循环。 Agent86 2011.10.03 01:26 #34 diostar: 还有。 for(int i=Bars; i>=0; i--) 是我使用的代码 for(int i=Bars-1; i>=0: i--) 是我建议的。 我以为Bars=当前图表中的条数,至少根据字典是这样的。 所以--i我认为是从最高条数开始倒数,比如1002或其他什么,然后把--i倒数到实际的-1。 因为当i>=0时,它应该倒数到实际的-1,然后再变成假的。如果它是0或更大,它将是真实的,并最后循环一次,直到它达到-1。 至少我是这样认为的,它的工作方式是这样的?我错了吗? 如果i=0和++i并向上计数,那么我认为它将计数到最后一栏。 但是在这种情况下,你说的Bars-1并不是所有的收盘Bars,而是包括尚未收盘的Bar[0],还是什么? 我不太明白Bars-1和Bars之间的区别。它是否与当前的Bar 0有关,因为当简单地提到Bars时,它没有被计算在内? 请指教 谢谢 Ian Venner 2011.10.03 01:35 #35 是的,因为你有一个0条,所以Bars给你图表中的条数,包括0条。 所以考虑一个小图表,图表中只有2个条形,bar[0]和bar[1]。 Bars给你计数,所以Bars == 2 如果你想让你的指标从图表中的最后一个柱子开始应用 你可以试试i=Bars。 正如我们所知,Bars = 2,但没有bar[2]的索引,最后一个bar是Bar[1]。 所以你需要做的是i=Bars-1 blackmore 2011.10.03 01:44 #36 Agent86: 当i=Bars时,close[i]是否存在? 当i=Bars-1 时,close[i]是否存在? 我认为Bars=当前图表中的条数,至少根据字典是这样。 所以--i我认为是从最高条数开始倒数,比如1002或其他什么,然后倒数--i到实际的-1, close[1002], close[-1]是否存在? 因为当i>=0时,它应该倒数到实际的-1,然后再变成假的。如果它是0或更大,它将是真实的,并且最后一次循环,直到它达到-1<---- at close[-1],它返回0。不是假的 至少我是这样认为的,它的工作方式是这样的?我错了吗?<---见下面的参考文献。 如果 i=0 和 ++i 并向上计数,那么我认为它将计数到最后一栏。<--- 它将顺从地做到这一点。 但在这种情况下,你说的Bars-1并不是真正的所有收盘Bars,而是实际上包括尚未收盘的Bar[0],还是什么?<---在这种情况下,收盘价将返回当前Bid tick价格 我不太明白Bars-1和Bars之间的区别。它是否与当前的Bar 0有关,因为当简单地提到Bars时,它不被计算在内? 请指教 谢谢欢迎 double Close[] 系列数组,包含当前图表中每个条形的收盘价。 系列数组元素的索引顺序是相反的,即从最后一个到第一个。当前的条形图是数组中的最后一个,其索引为0。最古老的条形图,即图表中的第一个,索引为Bars-1。 Agent86 2011.10.03 01:55 #37 我明白了,由于某些原因,我认为缓冲区对这个问题的处理有些不同,因为从技术上讲,我甚至没有声明数组中的元素数量,所以我认为缓冲区已经解决了这个问题。 总之,我明白了,这很有意义,谢谢 blackmore 2011.10.03 03:13 #38 Agent86: 我明白了,由于某种原因,我认为缓冲区对这个问题的处理有点不同,因为从技术上讲,我甚至没有声明数组中的元素数量,所以我认为缓冲区已经解决了这个问题。 不管怎样,我确实理解了这一点,而且很有意义,谢谢 什么?我没有意识到你实际上指的是指标缓冲区。现在我知道了,请阅读以下参考资料:https://www.mql5.com/en/articles/1500 (1) 指示器缓冲区和用户数组 - 它们既相同又不同。 & 指示器缓冲区的大小不由用户决定的原因,与它已经被计算出来无关。 double ExtMapBuffer1[]; 这是一个普通的数组。但没有指明尺寸,也没有进行初始化。这个数组以后将被设置为一个数据缓冲区。 (2) 输出和输入的指标缓冲区(上面的数据缓冲区)可能看起来相同,但不同。 SetIndexBuffer(0,ExtMapBuffer1); 这个函数将一个数组与一个缓冲区的编号 "绑定" 。也就是说,它表明具有指定编号的缓冲区将使用指定的数组来存储数据。所以,改变这个数组的元素就会改变缓冲区的值。实际上一个数组就是一个数据缓冲区。第一个参数 是应该被绑定的数组的名称。 你看,这一切都在运作。现在让我们看看这段代码是怎么做的。 for(int i=0;i<Bars;i++) 我们使用循环for 来浏览数据缓冲区的所有元素。由于缓冲区的每个元素都对应着一个条形图,我们使用循环,从零条形图(最后一个可用的条形图)开始,以第一个可用的条形图结束,这个条形图比变量Bars 少一个(因为我们从零开始计算条形图)。 { ExtMapBuffer1[i]=MathRand()%1001; } 在每一次迭代中,计数器都会增加一个,我们从最后一个 可用的条形图移动 到第一个 条形图,同时给每个缓冲区元素(对应于某个条形图)分配一个 从0到1000的随机数。如果你很难理解某个缓冲区元素是如何对应某个条形图的,可以尝试用以下方式改变周期,并在终端看到结果。 for(int i=0;i<Bars;i++) { ExtMapBuffer1[i]=i; } Agent86 2011.10.05 11:23 #39 diostar: 双关[] 系列数组,包含当前图表中每个条形的收盘价。 系列数组元素的索引顺序是相反的,即从最后一个到第一个。当前的条形图是数组中的最后一个,其索引为0。最古老的条形图,即图表中的第一个,其索引为Bars-1。 好的,我想我现在明白了,谢谢 Agent86 2011.10.05 11:33 #40 谢谢大家 随着我对指标的进一步了解,我所使用的设计对于在EA中使用不是很有用,可能只适合于视觉和/或手动使用。 由于计数器向下计数为1--似乎使用这种方法将不利于在交易中引用任何数组对象,除非我只引用一个特定的shift[i],在这种情况下,我将不得不想办法只引用那些我想用于交易信号的数组元素,而这些元素只位于那些特定的Bars。 按照目前的情况使用它,可能会导致交易在整个图表上发生,就像指标一样。 所以我想我现在要学习的是如何在任何指标中引用各种数组元素,以便引用这些值/时间/熊等。 谢谢大家的帮助,这将给我带来很多思考,让我知道如何创建iCustom指标并让它们在EA中发挥作用。 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
或者是像这样?
但你真的应该使用 IndicatorCounted(),因为如果你这样做,你的指标在每一个新的刻度线上都会重新绘制所有的对象,而不是一次性绘制所有对象,并在新的条形图形成时添加新的对象。
我的关注点需要更广泛,但因为我是新手,我倾向于关注代码的一个部分,而忽略了其他部分,如外部。
我现在才开始接触数组,在理解缓冲区方面有很大的困难,但最近开始克服了这个问题。
谢谢,这也会给我一些新的想法。
你必须考虑你在做什么,当你创建一个指标时,你将你的代码应用于图表上的每一个条形,这意味着你需要获得这些历史条形的macd指标值。
在你的原始代码中,你做到了。
最后一个参数1是图表中第1条的macd值,即当前条的前一个条,索引为第0条。很明显,你不想在整个历史图表中使用macd的单一值来进行条件运算。
你需要将macd索引到与每个条形图相同的条形图索引中,例如,在条形图500中你需要这样做
最后一个参数必须改变,以匹配你的指标应用其算法的条数。
这就是为什么你需要它在循环内,所以你可以使用循环周期迭代器的最后一个参数,因此你可以得到你的macd值,因为它是历史图表中的每一个条形。
我希望这能帮助你弄清楚一些事情。
然而,当添加诸如if(val1 > 0 && faster > slower)之类的代码时,当在循环外声明更快和更慢时,这将无法工作。
AHHHHH 我明白了,因为移位是(i),所以我需要它在循环内 OOOOPPPS LOL
为什么for(int i = Bars-1 ? <----------------------- Bars的索引就像数组一样,第一个bar=0,而不是1。所以最后一个Bar是Bars-1;
为什么这比for(int i = Bars?? <----- 见上文。
请指示,谢谢
还有。
我想这对所有的人来说都是如此,而不仅仅是指标/自定义指标?<------我和 WHRoeder: 讨论的是相当普遍的问题。没什么特别的。 我们只是互相讨论了变量的声明和它们的赋值,等等,关于循环。
还有。
for(int i=Bars-1; i>=0: i--) 是我建议的。
我以为Bars=当前图表中的条数,至少根据字典是这样的。
所以--i我认为是从最高条数开始倒数,比如1002或其他什么,然后把--i倒数到实际的-1。
因为当i>=0时,它应该倒数到实际的-1,然后再变成假的。如果它是0或更大,它将是真实的,并最后循环一次,直到它达到-1。
至少我是这样认为的,它的工作方式是这样的?我错了吗?
如果i=0和++i并向上计数,那么我认为它将计数到最后一栏。
但是在这种情况下,你说的Bars-1并不是所有的收盘Bars,而是包括尚未收盘的Bar[0],还是什么?
我不太明白Bars-1和Bars之间的区别。它是否与当前的Bar 0有关,因为当简单地提到Bars时,它没有被计算在内?
请指教 谢谢
是的,因为你有一个0条,所以Bars给你图表中的条数,包括0条。
所以考虑一个小图表,图表中只有2个条形,bar[0]和bar[1]。
Bars给你计数,所以Bars == 2
如果你想让你的指标从图表中的最后一个柱子开始应用
你可以试试i=Bars。
正如我们所知,Bars = 2,但没有bar[2]的索引,最后一个bar是Bar[1]。
所以你需要做的是i=Bars-1
当i=Bars时,close[i]是否存在?
当i=Bars-1 时,close[i]是否存在?
我认为Bars=当前图表中的条数,至少根据字典是这样。
所以--i我认为是从最高条数开始倒数,比如1002或其他什么,然后倒数--i到实际的-1, close[1002], close[-1]是否存在?
因为当i>=0时,它应该倒数到实际的-1,然后再变成假的。如果它是0或更大,它将是真实的,并且最后一次循环,直到它达到-1<---- at close[-1],它返回0。不是假的
至少我是这样认为的,它的工作方式是这样的?我错了吗?<---见下面的参考文献。
如果 i=0 和 ++i 并向上计数,那么我认为它将计数到最后一栏。<--- 它将顺从地做到这一点。
但在这种情况下,你说的Bars-1并不是真正的所有收盘Bars,而是实际上包括尚未收盘的Bar[0],还是什么?<---在这种情况下,收盘价将返回当前Bid tick价格
我不太明白Bars-1和Bars之间的区别。它是否与当前的Bar 0有关,因为当简单地提到Bars时,它不被计算在内?
请指教 谢谢欢迎
系列数组元素的索引顺序是相反的,即从最后一个到第一个。当前的条形图是数组中的最后一个,其索引为0。最古老的条形图,即图表中的第一个,索引为Bars-1。
总之,我明白了,这很有意义,谢谢
我明白了,由于某种原因,我认为缓冲区对这个问题的处理有点不同,因为从技术上讲,我甚至没有声明数组中的元素数量,所以我认为缓冲区已经解决了这个问题。
不管怎样,我确实理解了这一点,而且很有意义,谢谢
什么?我没有意识到你实际上指的是指标缓冲区。现在我知道了,请阅读以下参考资料:https://www.mql5.com/en/articles/1500
(1) 指示器缓冲区和用户数组 - 它们既相同又不同。 & 指示器缓冲区的大小不由用户决定的原因,与它已经被计算出来无关。
这是一个普通的数组。但没有指明尺寸,也没有进行初始化。这个数组以后将被设置为一个数据缓冲区。
(2) 输出和输入的指标缓冲区(上面的数据缓冲区)可能看起来相同,但不同。
这个函数将一个数组与一个缓冲区的编号 "绑定" 。也就是说,它表明具有指定编号的缓冲区将使用指定的数组来存储数据。所以,改变这个数组的元素就会改变缓冲区的值。实际上一个数组就是一个数据缓冲区。第一个参数 是应该被绑定的数组的名称。
你看,这一切都在运作。现在让我们看看这段代码是怎么做的。
我们使用循环for 来浏览数据缓冲区的所有元素。由于缓冲区的每个元素都对应着一个条形图,我们使用循环,从零条形图(最后一个可用的条形图)开始,以第一个可用的条形图结束,这个条形图比变量Bars 少一个(因为我们从零开始计算条形图)。
在每一次迭代中,计数器都会增加一个,我们从最后一个 可用的条形图移动 到第一个 条形图,同时给每个缓冲区元素(对应于某个条形图)分配一个 从0到1000的随机数。如果你很难理解某个缓冲区元素是如何对应某个条形图的,可以尝试用以下方式改变周期,并在终端看到结果。
系列数组元素的索引顺序是相反的,即从最后一个到第一个。当前的条形图是数组中的最后一个,其索引为0。最古老的条形图,即图表中的第一个,其索引为Bars-1。
随着我对指标的进一步了解,我所使用的设计对于在EA中使用不是很有用,可能只适合于视觉和/或手动使用。
由于计数器向下计数为1--似乎使用这种方法将不利于在交易中引用任何数组对象,除非我只引用一个特定的shift[i],在这种情况下,我将不得不想办法只引用那些我想用于交易信号的数组元素,而这些元素只位于那些特定的Bars。
按照目前的情况使用它,可能会导致交易在整个图表上发生,就像指标一样。
所以我想我现在要学习的是如何在任何指标中引用各种数组元素,以便引用这些值/时间/熊等。
谢谢大家的帮助,这将给我带来很多思考,让我知道如何创建iCustom指标并让它们在EA中发挥作用。