MT4的iMAOnArray和iBandsOnArray元素数量对计算的影响 - 页 3 123456789 新评论 Vladimir Karputov 2016.05.01 20:48 #21 Alexey Viktorov:不,弗拉基米尔。这有点不对。在这种情况下,你应该将ArraySetAsSeries(array, false);应用于一个有三百个元素的数组,其中iMAOnArray()被认为是。但我们最好使用CopyOpen() 而不是数组的填充循环。根据我的理解,在这个变体中,最好是将 任务设置的方式,我就是这样演示的。结果非常好。而且进一步说,你可以自己动手 :) Sergey Efimenko 2016.05.01 21:07 #22 Alexey Viktorov:不,弗拉基米尔。这有点不对。在这种情况下,你应该将ArraySetAsSeries(array, false);应用于一个有三百个元素的数组,其中iMAOnArray()被认为是。但我们最好使用CopyOpen() 而不是数组的填充循环。根据我的理解,在这个变体中,最好是将 所以给我看一下代码的 "工作 "变体,原始的源代码在这里,你试图把它削减到12个元素,而不是要求的300个元素,最终应该产生3个指标缓冲区,用指定的数据在地下室中显示至少300个元素。然后,当一个新的条形图到来时,分别是301和然后的值,但不要忘记,在这种情况下,如果你用0作为计算的限制,只有新的条形图会被重新计算,第二个缓冲区的平均数(平滑)类型不一定是SMA,可以是4种可用的任何一种。 Dmitry Fedoseev 2016.05.01 21:26 #23 Sergey Efimenko:这就是问题所在。如果我不需要计算整个数组,而只需要计算最后N个元素。我不太理解限制时计算这些函数的逻辑。我有一个时间序列数组(指标缓冲区之一),如果我让元素的数量等于0,没有问题,所有的东西都被计算出来了,但是如果我以相同的偏移量减少参与计算的元素的数量,我只能得到主要的。简单地说,有一个5000个元素的数组(图表上的条形图),为了节省时间,我需要只计算最后的300个,但当我在第二个参数中指定了300的值时,我得到了主要的5000-4700个元素,但在偏移量300-0上,进一步的数值在调用时不会改变。 使用这个参数的意义何在?鬼知道。忘掉它吧。如果你需要加快计算速度,请减少循环中计算的项目数量。if(prev_calculated==0)limit=300; else ...; 两种情况之一:要么不可能,要么你需要一些秘密的时间序列组合,而不是时间序列,计算方向。 Sergey Efimenko 2016.05.01 21:38 #24 Dmitry Fedoseev:他妈的知道。忘了它吧。如果你想加快计算速度,请减少循环中要计算的元素数量。两种情况之一:要么不可能,要么你需要一些秘密的时间序列组合,而不是时间序列,计算方向。是的,正如我之前已经写过的,只有一种可能--使用你自己的上述函数的类似物,它可以用来计算至少一个元素。矛盾的情况是,如果我们做一个类似的模板,在任何指标(价格线)上叠加平均线或布林线,不会有这样的减缓所有历史条的初始计算,就像在代码中使用这些函数时,重新启动终端或切换TF时,所以不清楚,在这些函数中需要这么长时间的计算。 forexman77 2016.05.01 21:40 #25 Dmitry Fedoseev:他妈的知道。忘了它吧。如果你想加快计算速度,请减少循环中要计算的元素数量。 两种情况之一:要么不可能,要么你需要一些秘密的时间序列组合,而不是时间序列,计算方向。我也用了这样的结构。if (limit > 300)limit=300;顺便说一下,"MovingAverages.mqh "的速度 是"iMAOnArray " 的两倍,即使是旧版本。https://www.mql5.com/ru/forum/79988 Использование MovingAverages.mqh в MQL4 www.mql5.com При вызове в советнике индикатор работает корректно, но если его поместить в тело условного оператора "if", то советник не открывает сделок, хотя логика советника остается та же. Dmitry Fedoseev 2016.05.01 21:44 #26 Sergey Efimenko:是的,正如我之前写的那样,只有一个选择--使用我们自己的上述函数的类似物,其中至少有一个元素是可以计算的。矛盾的是,如果我们通过将MA和布林带附加到任何指标(价格线)来做一个类似的模板,我们不会看到所有历史条的初始计算速度如此缓慢,就像在代码中使用这些函数时,重新启动终端或切换TF时一样,所以不清楚在这些函数中需要这么长时间来计算。使用iMAOnArray时 也会变慢吗?不应该有这样的事情。就像你一样,StdOnArray(或BandsOnArray,我不记得了)出现了滞后,开发者在很长一段时间内都没有承认这个错误的存在。然后突然间,它被修复了,而且工作得很快。谁知道呢,也许这个错误又回来了。如果iMAOnArray()也会导致明显的减速,那就是一个错误。似乎几个月前就有过这样的讨论......但显然,它仍然在那里。 Sergey Efimenko 2016.05.01 21:52 #27 Dmitry Fedoseev:使用iMAOnArray 的速度也会变慢?它不应该是这样的。就像你曾经的情况一样,StdOnArray的速度变慢了,开发人员在很长一段时间内都没有承认这个错误。然后他们突然修复了它,而且工作得很快。谁知道呢,也许这个错误又回来了。如果iMAOnArray()也会导致明显的减速,那就是一个错误。似乎几个月前就有关于这个问题的讨论......。但显然,它仍然在那里。 很难判断它是否 "减慢了很多 "或可以接受,因为一切都取决于图表长度(条数),问题是为了优化,我们只需要计算一点,但限制计算长度事实上是不可能的。 forexman77 2016.05.01 21:57 #28 Sergey Efimenko: 很难判断是否太慢,因为这完全取决于图表的长度(条数),问题是对于优化,你只需要计算一点点,你不能通过实际计算来限制计算的长度。 在MovingAverages.mqh 上做计算,非常快。 Sergey Efimenko 2016.05.01 22:00 #29 forexman77: 用MovingAverages.mqh 做计算,它的计算速度会非常快。 如果你不对所有数组进行计算,而只对其最后一部分(当前值)进行计算,那么这个库的计算是正确的?此外,这只是问题的一半,但iBandsOnArray呢? Alexey Viktorov 2016.05.01 22:10 #30 Sergey Efimenko: 所以给我看一下代码的 "工作 "变体,原始代码在这里,你试图削减到12个显示元素,而不是我要求的300个,最终应该有3个指标缓冲区的指定数据,这样至少有300个元素被显示在地下室。然后,当一个新的条形图到来时,分别是301和然后的值,但不要忘记,在这种情况下,如果你用0作为计算的限制,只有新的条形图会被重新计算,第二个缓冲区的平均数(平滑)的类型不一定是SMA,可以是4个可用的任何一个。给你。//+------------------------------------------------------------------+ //| Test300AsSeriesFalse.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 clrYellow #property indicator_color2 clrGreen #property indicator_color3 clrRed double Buffer[]; double BufferMA[]; double BufferBMA[]; bool firstrun=true; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping firstrun=true; SetIndexBuffer(0,Buffer,INDICATOR_DATA); SetIndexBuffer(1,BufferMA,INDICATOR_DATA); SetIndexBuffer(2,BufferBMA,INDICATOR_DATA); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i, limit; limit = rates_total-prev_calculated-1; double buffer[]; for(i = limit; i >= 0; i--) { Buffer[i]=open[i]; ArrayCopy(buffer, Buffer, 0, i, 12); BufferMA[i] = iMAOnArray(buffer, 300, 12, 0, MODE_SMA, 0); BufferBMA[i] = iBandsOnArray(buffer, 300, 12, 2.0, 0, MODE_UPPER, 0); int x=0; } return(rates_total); } //+------------------------------------------------------------------+ 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不,弗拉基米尔。这有点不对。
在这种情况下,你应该将ArraySetAsSeries(array, false);应用于一个有三百个元素的数组,其中iMAOnArray()被认为是。但我们最好使用CopyOpen() 而不是数组的填充循环。
根据我的理解,在这个变体中,最好是将
不,弗拉基米尔。这有点不对。
在这种情况下,你应该将ArraySetAsSeries(array, false);应用于一个有三百个元素的数组,其中iMAOnArray()被认为是。但我们最好使用CopyOpen() 而不是数组的填充循环。
根据我的理解,在这个变体中,最好是将
这就是问题所在。如果我不需要计算整个数组,而只需要计算最后N个元素。
我不太理解限制时计算这些函数的逻辑。我有一个时间序列数组(指标缓冲区之一),如果我让元素的数量等于0,没有问题,所有的东西都被计算出来了,但是如果我以相同的偏移量减少参与计算的元素的数量,我只能得到主要的。简单地说,有一个5000个元素的数组(图表上的条形图),为了节省时间,我需要只计算最后的300个,但当我在第二个参数中指定了300的值时,我得到了主要的5000-4700个元素,但在偏移量300-0上,进一步的数值在调用时不会改变。 使用这个参数的意义何在?
鬼知道。忘掉它吧。如果你需要加快计算速度,请减少循环中计算的项目数量。
两种情况之一:要么不可能,要么你需要一些秘密的时间序列组合,而不是时间序列,计算方向。
他妈的知道。忘了它吧。如果你想加快计算速度,请减少循环中要计算的元素数量。
两种情况之一:要么不可能,要么你需要一些秘密的时间序列组合,而不是时间序列,计算方向。
是的,正如我之前已经写过的,只有一种可能--使用你自己的上述函数的类似物,它可以用来计算至少一个元素。
矛盾的情况是,如果我们做一个类似的模板,在任何指标(价格线)上叠加平均线或布林线,不会有这样的减缓所有历史条的初始计算,就像在代码中使用这些函数时,重新启动终端或切换TF时,所以不清楚,在这些函数中需要这么长时间的计算。
他妈的知道。忘了它吧。如果你想加快计算速度,请减少循环中要计算的元素数量。
两种情况之一:要么不可能,要么你需要一些秘密的时间序列组合,而不是时间序列,计算方向。
我也用了这样的结构。
顺便说一下,"MovingAverages.mqh "的速度 是"iMAOnArray " 的两倍,即使是旧版本。
https://www.mql5.com/ru/forum/79988
是的,正如我之前写的那样,只有一个选择--使用我们自己的上述函数的类似物,其中至少有一个元素是可以计算的。
矛盾的是,如果我们通过将MA和布林带附加到任何指标(价格线)来做一个类似的模板,我们不会看到所有历史条的初始计算速度如此缓慢,就像在代码中使用这些函数时,重新启动终端或切换TF时一样,所以不清楚在这些函数中需要这么长时间来计算。
使用iMAOnArray时 也会变慢吗?不应该有这样的事情。就像你一样,StdOnArray(或BandsOnArray,我不记得了)出现了滞后,开发者在很长一段时间内都没有承认这个错误的存在。然后突然间,它被修复了,而且工作得很快。谁知道呢,也许这个错误又回来了。如果iMAOnArray()也会导致明显的减速,那就是一个错误。似乎几个月前就有过这样的讨论......但显然,它仍然在那里。
使用iMAOnArray 的速度也会变慢?它不应该是这样的。就像你曾经的情况一样,StdOnArray的速度变慢了,开发人员在很长一段时间内都没有承认这个错误。然后他们突然修复了它,而且工作得很快。谁知道呢,也许这个错误又回来了。如果iMAOnArray()也会导致明显的减速,那就是一个错误。似乎几个月前就有关于这个问题的讨论......。但显然,它仍然在那里。
很难判断是否太慢,因为这完全取决于图表的长度(条数),问题是对于优化,你只需要计算一点点,你不能通过实际计算来限制计算的长度。
用MovingAverages.mqh 做计算,它的计算速度会非常快。
所以给我看一下代码的 "工作 "变体,原始代码在这里,你试图削减到12个显示元素,而不是我要求的300个,最终应该有3个指标缓冲区的指定数据,这样至少有300个元素被显示在地下室。然后,当一个新的条形图到来时,分别是301和然后的值,但不要忘记,在这种情况下,如果你用0作为计算的限制,只有新的条形图会被重新计算,第二个缓冲区的平均数(平滑)的类型不一定是SMA,可以是4个可用的任何一个。
给你。