错误、漏洞、问题 - 页 589

 
Ashes:

你必须跳出盒子看问题 (c)

我不认为运行独立的云计算有任何禁忌(除了价格)。

在云中独立运行,在很多情况下会比在本地核心上运行要慢。
 
joo:
在云中单独运行,在很多情况下会比在本地核心上运行要慢。
以上https://www.mql5.com/ru/forum/1111/page598#comment_125691,是一个场景。注意CAN这个词。这种限制似乎很牵强。
 

出现了一个问题。

在指标的OnCalculate() 代码中,有这样一行(或者更准确地说,是一些类似的行)。

ArrayInitialize(FractalsBuffer,EMPTY_VALUE);
FractalsBuffer不是一个辅助的计算缓冲区,而是直接负责图形绘制 的主缓冲区,所以它必须被链接。
SetIndexBuffer(0,FractalsBuffer,INDICATOR_DATA);

已经完成。但绑定功能有一些直接的影响,有时会起到副作用(不好的方式)。通过CopyBuffer(ind_handle,0,0,amount,FractalsBuffer),缓冲区没有被填满整个时间框架历史的长度,而只是部分地被填满,从它的小段开始。但是ArraySize(FractalsBuffer)清楚地告诉我们,缓冲区的大小(即占用的物理内存)将对应于整个历史的条数,也就是说,最终它将被用到最大,包括低效的部分。当然,如果你想在以后的循环中处理缓冲区的数值,你不必搜索整个缓冲区--你只需指定必要的限制并在这些限制内工作。但首先,它并没有抵消可怕的内存整体分配,其次,代码中不可避免的函数 ArrayInitialize 不允许用必要的值部分地初始化缓冲器你必须花费时间和瓦特 进行全面的重新初始化。这使得指标的运行速度明显变慢。第三,引用ArrayResize 函数描述中的一段话:"你应该记住, ...。 不可能调整被函数SetIndexBuffer()分配为指标缓冲区的动态数组的大小。."如果 我们拒绝SetIndexBuffer ,而使用 ArrayResize手动操作缓冲区的大小 指标图本身就会崩溃

请建议一个康复的食谱。或 者把这看作是在语言本身修复这个问题的一个应用。
 
x100intraday:

这是种混乱...

如果(prev_calculated==0),在开始时对缓冲区初始化一次是有意义的。

2.你可以设置从哪个条形图中提取数据,像这样:PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,rate_total-amount-1)。

3.在金额内的所有缓冲区的值都应该被明确地分配,在整个历史中分配一次,然后只分配新的值,那么它们就不需要被初始化了。

4.在终端设置 中减少窗口中的条数 :)

 
Swan:

这是种混乱...

如果(prev_calculated==0),在开始时对缓冲区初始化一次是有意义的。

2.你可以设置从哪个条形图中提取数据,像这样:PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,rate_total-amount-1)。

3.在金额内的所有缓冲区的值都应该被明确地分配,在整个历史中分配一次,然后只分配新的值,那么它们就不需要被初始化了。

4.在终端设置 中减少窗口中的条数 :)

1.的确:在理念层面上,只做一次是有意义的,但在实践中,它并不那么简单,一切都在真正运行。我只是从标准指标中复制了:C:\Program Files\MetaTrader 5\MQL5\Indicators\Examples\Fractals.mq5。如何以不同的、更有效的方式在新的计算前清除缓冲区--我不知道。

2.我还没有研究过这种可能性,但它看起来不像是在不必要的区域绘制指标,但它并不限制指标缓冲区的大小。此外,我更愿意使用一个被有用的数据填满的缓冲区,没有任何自由的余地,否则我将不得不引入边界(关于这一点我在上一篇文章中已经说过了),而且这不符合正统的算法:在四个缓冲区中,有三个将在一个循环中以相同的边界被扫描,而对于一个缓冲区,我将不得不花时间做一个单独的曲线循环,以不同的边界,我几乎无法挤进去。虽然是的,你也可以拄着拐杖爬行......。

3.你说的明确是什么意思?我完全不是在为不明确分配而打包票。这很可能是我在明确地挪用。解释一下?至于只加载新值--我当然会用这个方法,这在这里叫做解析算法。

4.这个想法在写上一篇文章之前就被否决了,因为该指标需要最后几个(新的)历史条,而对我个人来说(视觉方面)我需要所有或几乎所有的条。我对历史柱的人文兴趣比技术指标对它们的兴趣更广泛。我想在一个图表中查看条形图并绘制指标。心血来潮?一个普通的需求。

 
x100intraday:

1.真的:在想法层面上,只做一次就有意义,但实际上并不那么简单,一切都在真正地运行。我只是从标准指标中复制了:C:\Program Files\MetaTrader 5\MQL5\Indicators\Examples\Fractals.mq5。如何以不同的、更有效的方式在新的计算前清除缓冲区--我不知道。

   if(prev_calculated<7)// if(prev_calculated==0)// if(prev_calculated<1)// вопщем одинаково)
      //Initialize только при первом запуске. нуу или при случае какогнить ахтунга)
      {
      limit=2;//цикл начинается со второго элемента индикаторного массива
      //--- clean up arrays//в принципе здесь не очистка массива, 
                        //а значения EMPTY_VALUE  присваивается 0 и 1 элементу массивов, мм.. и на последних трёх барах)
                        //остальные определяются далее в цикле..
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
      }
   else limit=rates_total-5;//иначе - в цикле пересчитываются только два последних значения

//зы: при появлении нового бара - новый элемент массива вроде как не определен, насколько мне известно не гарантируется, что он будет  ==EMPTY_VALUE
2.我还没有研究过这种可能性,但它看起来不像是在不必要的区域绘制指标,但它并不限制指标缓冲区的 大小。此外,我更愿意使用一个被有用的数据填满的缓冲区,没有任何自由的余地,否则我将不得不引入边界(关于这一点我在上一篇文章中已经说过了),而且这不符合正统的算法:在四个缓冲区中,有三个将在一个循环中以相同的边界被扫描,而对于一个缓冲区,我将不得不花时间做一个单独的曲线循环,以不同的边界,我几乎无法挤进去。虽然是的,你也可以拄着拐杖爬行......。

嗯,是的,应该这样。

指标缓冲区的大小仅由条形图的数量定义。

无论如何,必须确定一些尺寸......。当你可以用同样的边界做一个直的循环时,为什么要做一个边界不同的弯曲的循环呢)

换句话说,你应该指定循环大小,而不是数组大小......否则,指标将基于拐杖


3) 你说的 "明确 "是什么意思?我绝对不能保证我不明确地分配。这很可能是我明确地做了。解释一下?至于只加载新值--我当然会用这个方法,它在这里被称为解析算法。
      //---- Upper Fractal
      if(High[i]>High[i+1] && High[i]>High[i+2] && High[i]>=High[i-1] && High[i]>=High[i-2])
         ExtUpperBuffer[i]=High[i];//условие выполняется - присваиваем значение
      else ExtUpperBuffer[i]=EMPTY_VALUE;//не выполняется - таки тоже присваиваем значение)
//нет зависимости от Initialize, всем элементам в цикле явно присваивается значение.

关于节俭的算法--我不确定你是否使用它。

该指标对所有条形图计算一次--也就是说,在农业历史上启动时可能有点迟缓。

随后重新计算了一些数值--一切应该都能正常工作 :)

 
Cmu4:

指标的错误是什么?他们来了又走。而且只有单独窗口中的那些!!!。

这是一张指标消失时的截图。他们现在消失,然后出现......任意地出现。也有一个视频...

注意,基本指标正在消失!!。这意味着这个错误很重要。自定义指标也有同样的问题。

先生们开发人员,请修复这个错误,这在某种程度上是不好的......。

不幸的是,截图中没有显示。

什么服务器?什么访问服务器?什么日期/时间?当时的故事是分页的吗?

现在又发生了吗?你能附上这个日期的终端日志吗?

 

亲爱的开发者,我在MQL5 编译器中发现了一个令人不快的错误(缺陷)。

如果你使用以下形式的条件结构

如果 (Condition);

{ 运营商_1

......

Operator_N }

编译代码时没有产生错误或警告。

但由于条件后面有一个";" (有无空格),{operator_1...operator_N}将一直被执行。

MQL4 显示警告。 我希望MQL5 也能显示错误或警告!(我花了半天时间试图找出我的代码有什么问题)

谢谢你的反馈意见!

 
Fia:

亲爱的开发者,我在MQL5 编译器中发现了一个令人不快的错误(缺陷)。

如果你使用以下形式的条件结构

如果 (Condition);

{ 运营商_1

......

Operator_N }

编译代码时没有产生错误或警告。

但由于条件后面有一个";" (有无空格),{operator_1...operator_N}将一直被执行。

MQL4 显示警告。 我希望MQL5 也能显示错误或警告!(我花了半天时间试图找出我的代码有什么问题)

谢谢你的反馈意见!


在这种情况下,一切都是有效的。;是一个空运算符

我们会考虑你的建议(发出警告),但这不是目前最优先的事项。

Документация по MQL5: Основы языка / Операторы / Оператор-выражение
Документация по MQL5: Основы языка / Операторы / Оператор-выражение
  • www.mql5.com
Основы языка / Операторы / Оператор-выражение - Документация по MQL5
 
alexvd:

在这种情况下,一切都是有效的。;是一个空运算符

我们会考虑你的建议(发行vorning),但这不是目前最优先的事项。

我希望你不要忘记在MQL4中这样做,因为它在MQL4中是合乎逻辑的。


能否建议我们考虑两个挂单(价格、类型和执行量都相同)?

当价格达到时,两个事件都会被触发,在这种情况下,OnTrade()事件将如何工作?

特别是,已经执行的挂单会在一个OnTrade()事件中进入历史,还是会有两次调用?(我的日志显示有一个电话,不知何故)

谢谢你的答复