doubleiMAOnArray(
double array[], // массив // С этим понятно...int total, // количество элементов // Это у тебя 300int ma_period, // период // Это ???int ma_shift, // сдвиг средней // понятноint ma_method, // метод усреднения // понятноint shift // сдвиг // А здесь чему равна i???
);
你的意思是,我期待什么?我在上面写到,我需要300个最后(当前)的实际值,而不是300个最初(初始)的值,此外,我在偏移量299-0处访问一个数组,但我得到的数据偏移量是从 "数组结束 "到 "数组结束-300 "的值(在我的例子中是从4999到4700),也就是说,在偏移量299是一个值,它应该在偏移量4999,同样在偏移量0是一个值,它应该是在偏移量4700。问题是,在不计算当前价值的情况下,计算旧价值的目的是什么?
如果你写的很清楚,就不会有问题了。
你被要求展示一个代码样本,但你只展示了一个例子的片段。关于其他方面,你只能猜测,这一切都在循环之中。你想在i的哪个值上得到最后的、当前的数值?在i=4700或哪里?
如果你写的很清楚,那就不会有问题了。
你被要求展示一个代码例子,而你只展示了一块例子。关于其他的,你只能猜测,这都是一个循环。你想在i的哪个值上得到最后的、当前的数值?在i=4700或哪里?
如果你在实践中使用过这些有计算数组长度限制的函数,你就会明白我的意思,否则理论上的推理有什么意义......?我的代码有什么不清楚的? 我引用了完全相同的部分,唯一的区别是在第一种情况下我没有使用长度限制来计算阵列。在这种情况下,哪一个计算周期,即移位平均法或平均法根本不重要,因为它们在两种情况下是一样的?正如我在上面写的那样,shift的值也是类似的,使用起来完全一样。在循环中用你的移位变量替换 "i",用至少Open[i]替换GetValue(i)函数,使上述三个数组成为指标的3个显示缓冲区,看看第一个和第二个是如何工作的。然而,这里有一个例子,是该指标的简单变体在两个变体中的完整代码,以便更好地理解这个问题。
//这个工作很好。//它不能正常工作。
在图表上画 好指标 后,到图表的开头(左边),从12个小节开始看1个指标,它是阵列中2和3的 "非空 "填充的开始,大约记住与0不同的前几个数值,然后将图表移到当前的报价,从300个小节开始看数值,因此2(底部)指标的数值将等于你在图表开头看到的1个指标的数值,而在想法中,数值应该与当前一致。我希望我解释得很清楚。另外,如果你把图表放在一个在线图表上,第一个图表可以正常工作,而第二个图表会 "挂在自己身上"。
我将以更可读的形式和新的符号来介绍你的代码(真的,我们还能在指标中使用这种不合时宜的int start()多久?)
指标1。
指标2。
以及执行的结果。
о
如果你已经使用了这些功能
如果我没有,我就不会为了提出正确的解决方案而提出问题。
如果你需要计算12个周期,取300个柱子有什么意义呢?即使你需要它 "因为",你也应该明白在计算平均数的时候会有哪12个元素。而关于数组索引 方向的提示也非常正确。
为了理解,在纸上或计算器上做人工计算的实验,或在Excel中做实验。
当我看到这些答案时,我意识到我在这里只是在浪费时间,试图展示问题的本质,而得到的回应是代码的 "美丽"(当然要感谢,但提议的代码是在两分钟内写出来的,只是为了展示问题的本质,不需要任何可读性或其他转换)...
而且特别高兴的是,在我的帖子之前的答案......什么计算器,什么人工计算,什么指数化?尊敬的用户,请了解情况的实质,以免不仅浪费自己的时间,也浪费别人的时间。请重新仔细阅读我的帖子,如果有困难,我将简要回答:两种情况下数组的索引 方向都是正确的,必要的计算和其他可改变的参数的大小,正如它在主要代码中显示的那样,是用外部变量设置的,创建自己的函数的变体在上面讨论过(它实际上是唯一正确的解决方案),但我想重复,我想从内置的MT4获得它。
总的来说,感谢大家,我总结一下:要么是servicedesk,要么是我自己的类似功能。
而我的帖子前的答案让我很气馁......
如果你这么固执,=>服务台,他们只是出于无聊才回答这样的问题,而且他们很少感到无聊。
让我再试一次...
iMAOnArray(),在你的例子中,需要300个柱子,并计算出300个柱子中最后12个柱子的平均值。要对前12个柱子进行平均,你应该反转数组的索引,ArraySetAsSeries(BufferMA, false);或者只取12个柱子。
因此,事实证明,你没有试图了解它是如何工作的,如何使用它,而是简单地说,它不工作或工作不正确。而在你看来,这是不对的。
关于代码之美的下一步是什么。当你的代码都是用一行写的时候,你认为别人读你的代码会把眼睛弄坏,这很有趣吗?错了。我个人并没有读过它。感谢小鼓手每天数次耐心地指挥大家...到错误的地方。
我本想非常 "详细 "地回答,但后来再次重读帖子后,我删除了我的答案,最后意识到我在这里只是在浪费时间,用不同的话解释了几次同样的事情......。
PS所有的感谢,真的感谢 "Barabashke"(Vladimir),他做得很好,但这整个情况不值得他的劳动,我会更加感激,如果它不会是困难的,在一个关键以前的截图,添加第三个选项,并显示会发生什么,如果你按照建议,改变索引的方向。为了结束关于该功能如何工作的问题。
我本想非常 "详细 "地回答,但后来再次重读帖子后,我删除了我的答案,最后意识到我在这里只是在浪费时间,用不同的话解释了几次同样的事情......。
PS所有的感谢,真的感谢 "Barabashke"(Vladimir),他做得很好,但这整个情况不值得他的劳动,我会更加感激,如果它不会是困难的,在一个关键以前的截图,添加第三个选项,并显示会发生什么,如果你按照建议,改变索引的方向。为了结束关于该功能如何工作的问题。
选择3。
而整体的结果。
不,弗拉基米尔。这有点不对。
在这种情况下,你应该将ArraySetAsSeries(array, false);应用于一个有三百个元素的数组,其中iMAOnArray()被认为是。但我们最好使用CopyOpen() 而不是数组的填充循环。
根据我的理解,在这个变体中,最好是将