mql5语言的特点、微妙之处以及技巧 - 页 139

 
fxsaber:

这个选项不起作用

纠正了代码,现在可以了。
 
Alexey Navoykov:
纠正了代码,现在一切正常了。

你发布的东西有错误,因为它根本就没有编译。

 
fxsaber:

你发布的东西有错误,因为它根本就没有编译。

是的,这是个错字,已改正。
 
Alexey Navoykov:
是的,这是个错字,已改正。

谢谢你,这很有效。对业绩的影响还有待观察。

 
对于那些使用动态资源的人(如Kanvas),我建议以这种方式加快阵列的数量

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2019.07.09 18:36

void FillArray1( int &Array[] )
{
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size; i++)
    Array[i] = i;
}

#define  ARRAY_SIZE 10000

void FillArray2( int &Array[] )
{
  int ArrayStatic[ARRAY_SIZE];
  
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size;)
  {
    const int Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
    
    for (int j = 0; j < Size2; j++)
      ArrayStatic[j] = i++;
      
    if (Size2)
      ArrayCopy(Array, ArrayStatic, i - Size2, 0, Size2);
  }
}

#define  BENCH(A)                                                               \
{                                                                              \
  const ulong _StartTime = GetMicrosecondCount();                              \
  A;                                                                           \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - _StartTime)); \
}

void OnStart()
{
  int Array1[];
  ArrayResize(Array1, 1 e7);

  int Array2[];
  ArrayResize(Array2, 1 e7);
  
  BENCH(FillArray1(Array1));
  BENCH(FillArray2(Array2));
}
加速几十个百分点。

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2019.07.09 19:40

Time[FillArray1(Array1)] = 39501
Time[FillArray2(Array2)] = 30304

运行的发布版本。启用优化功能。


根据经验找到最佳的静态阵列大小

#define  ARRAY_SIZE 256
 
fxsaber:
对于那些使用动态资源的人(如Kanvas),我建议用以下方式加快填充数组的速度
一个百分之几十的加速度。


我通过实验找到了静态阵列的最佳尺寸。

如果你把它和mql5的ArrayFill 相比,到底会不会有速度上的提升?

 

我没有读过整个主题,也许这个问题有答案,MT5对图形对象的表现无法理解,终端关闭一段时间后,对象仍然附着在一些不明显的点上。 你如何处理这个问题呢?在那些打开了图表窗口的情况下,这并不难做到。我个人在OnInit()中给OnDeinit添加了一个过渡,但如果窗口被标记为书签,就不能解决问题。也许有人会告诉我们,我们可以在哪里向MT5的创造者 "表达 "这些建议。

.

 
Alexander Lasygin:

我没有读过整个主题,也许这个问题有答案,MT5对图形对象的表现无法理解,终端关闭一段时间后,对象仍然附着在一些不明显的点上。 你如何处理这个问题呢?在那些打开了图表窗口的情况下,这并不难做到。我个人在OnInit()中给OnDeinit添加了一个过渡,但如果窗口被加了书签,就解决不了问题。也许有人会告诉我们,我们可以在哪里向MT5的创造者 "表达 "这些建议。

.

提供确切的数据来重现:例如,一个带有对象的图表模板。

我怀疑这些对象是由指示器绘制的,而正是指示器错误地跟踪了prev_calculated。

 
Konstantin:

如果你把它和mql5的ArrayFill 相比,到底会不会有速度上的提升?

我不认为会有。

 
fxsaber:

我不认为会这样。

那么,既然已经有了一个有效的功能,为什么还要重新发明自己的记事本呢?