初学者的问题 MQL5 MT5 MetaTrader 5 - 页 731

 
Vitalie Postolache:

10,000 x 10,000不是二维的吗?

double arr[10000][10000];

和所有这些...

Top2n:
嗯,是的,它是二维的,我不是这么说的,显然它不是一个矩阵而是一个数组。矩阵是否意味着多维性?
我同意。说的不是这个,再加上被误解了。

这段代码中的刹车不是在写数组,而是在循环中的循环。
 
Alexey Viktorov:
同意。这不是说的,是被误解了。

这段代码中的刹车不是在写数组,而是在循环中的循环。

是否有必要移植到另一个编程环境,或者这不是所有类型的语言的共同问题?有什么办法可以加快速度?

如果一个循环并增加被删除的循环中的变量值

         for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X
                 {
                  int arr++
                  if(arr=ARRAY_SIZE_X) {z++;arr=0;}

                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);


我可能已经检查过了,但我不想给电脑添麻烦--如果它不能加速,额外的压力又会加在硬盘上)))

 
Top2n:

是否有必要移植到另一个编程环境,或者这不是所有类型的语言的共同问题?有什么办法可以加快速度?

如果在一个循环中增加已删除的循环中的变量值,会加速吗?

我可以检查一下,但我不想折磨电脑,如果没有加速,又会给硬盘带来额外的压力))))。

你就不能在循环之后写数组吗?你可以只在每行做吗?我指的是第一种变体,即在循环中的循环。
 
Vitalie Postolache:
你不能把数组写在循环之后吗?是否可以只在每一行做?我指的是第一种变体,即循环在循环中。
这种大小的数组将无法装入分配的RAM。

当然,你可以另外插入一个计数器,并写入这个计数器,而不是每一行都单独写入,但这不太可能加速这个过程,以至于不用测量就能发现。
 
Alexey Viktorov:
这么大的一个数组是无法装入分配的RAM的。

当然,你可以另外插入一个计数器,并通过这个计数器进行记录,而不是每一行都单独记录,但这不太可能加快这个过程,以至于在没有测量的情况下就能发现。

请告诉我,文档中说(编译器也说)。"不能为多维数组设置AS_SERIES标志"

问题:我如何在mql5中对一个数组进行排序?

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
 BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

请指示,文件中说(编译器也是如此):。"不能为多维数组设置AS_SERIES标志"。

问题:如何对数组进行排序。

double m[][3];

if(условия)
 {
// много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
 }

void BySort(double &mas[][3])// выделенное лишнее
 {
// Сортируем по размеру от большего к меньшему
  ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5

  ArraySort(mas);
  ArraySetAsSeries(mas,true);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIES和排序是完全不同的概念。

1-它改变了数组单元格的索引方向而不改变它们的内容;2-它改变了单元格的内容而不改变它们的索引,从而使它们按升序或降序排序。

此外,文档中说,数组只能按第一维排序。
 
Alexey Viktorov:
AS_SERIES和排序是完全不同的概念。

1 - 改变数组单元格的索引方向而不改变其内容,2 - 在不改变索引的情况下改变单元格内容,使其按升序或降序排序。

此外,文档中说,数组只能按第一维排序。

在这里,它按升序排列

ArraySort(mas);

我现在该如何逆转呢?它需要按降序排列,它在对很多东西进行排序。

 
Vitaly Muzichenko:

在这里,它按升序排列

ArraySort(mas);

我现在该如何逆转呢?你需要按降序排列,它能对批次进行排序。

哇。这是我第一次在mql5中查看排序。根据记忆,我正在使用mql4。如果是这种情况,你可以把阅读循环倒过来。如果你需要搜索一个特定的值,它将返回数组索引,无论你如何排序。

而最愚蠢的选择是以相反的顺序重写整个数组。这值得吗?
 
Vitaly Muzichenko:

在这里,它按升序排列

ArraySort(mas);

我现在该如何逆转呢?你需要按降序排列,它能对批次进行排序。

如果在排序后使用ArraySetAsSeries 改变索引顺序呢?
 
Vitalie Postolache:
如果在排序后,你用ArraySetAsSeries改变了索引顺序,怎么办?

然后它是这样 的。