优化过程中的单一阵列计算 - 页 7

 
forexman77:

尝试在全局层面声明一个数组(mql4代码)。

填写

当开始时未设置,它打印出1971年的日期,即数组是空的。

如果我在开始时填充数组,就会出现这些值。可能的原因是,数组被重新初始化的时间,但没有它,代码就无法编译?

阵列消失了。我做错了什么?

我这里有一个想法,如果有人也需要的话。我把一个数组复制到另一个数组。

datetime T_[];//на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries(T_,true);
   massiv();

   return(0);
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if(ArraySize(T_)==0)
   massiv();

  return(0);  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[40]=
   {
   1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500,
   1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360,
   1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100,
   1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920
   };
   ArraySetAsSeries(T,true);
   ArrayInitialize(T_,0);
   ArrayResize(T_,40);
   ArrayCopy(T_,T,0,0,WHOLE_ARRAY);
   ArrayFree(T);
  }
 
forexman77:

这里有一个想法,如果有人也需要的话。将一个数组复制到另一个数组。

这是为了什么?

原来的问题是为了使阵列在随后的优化迭代中不被重新计算。现在,它被简单地填充并复制到另一个。这不会有任何好处。我认为这个数组T[40]以这种方式表示只是为了说明问题,而事实上它应该是按顺序计算和填充。每次下一次优化运行 都会像以前一样重新计算这个数组,唯一不同的是,它的组织方式不同。

 
Alexey Viktorov:

它是用来做什么的?

原来的问题是为了使阵列在随后的优化迭代中不被重新计算。而现在,它被简单地填充和复制到另一个人身上。这不会有任何好处。我认为这个数组T[40]以这种方式表示只是为了说明问题,而事实上它应该是按顺序计算和填充。在接下来的每一次优化运行 中,这个数组将按照之前的方式重新计算,唯一不同的是,它的排列方式不同。

通过大括号声明的数组没有被保存;它不能被全局声明,然后在inite中填充(数组在一次运行中没有被保存)。

在优化迭代之间,按照我的理解,数组是不被保存的,也就是说,程序会重置原来的一切。

 
forexman77:

用大括号声明的数组没有被保存,它不能被全局声明,然后在inite中填充(数组在一次运行中没有被保存)。

在优化迭代之间,按照我的理解,数组是不被保存的,也就是说,程序会重置原来的一切。

像这样在循环中填充它不会花很长时间。但这是另一个问题,如果计算数组项目 需要很长的时间。如果是这样的话,就没有用了。 数组元素在每次迭代时仍然会被重新计算。而如果数组是这样填充的,你也可以在大括号中全局地枚举所有的元素。 我不明白这个巫术的意义...
 
Alexey Viktorov:
如果数组以这种方式填充,你也可以在全局层面上用大括号列出所有的元素。有些东西我不明白这个魔法的意义......
你也可以在全球范围内这样做。但是,我不喜欢在那里的顶部有一个几千个元素的塔)
 
forexman77:
你可以在全球范围内做到这一点。但我不喜欢在它上面建造一个由几千个元素组成的塔的想法)。

感谢上帝,这一切都按你的意愿进行。

速度上升了吗?

 
Alexey Viktorov:

感谢上帝,这一切都按你的意愿进行。

速度上升了吗?

越来越快了。
 

我没有创建一个新的主题。

现在我想做的是:有一个数组,第一个值是日期,第二个和第三个数字是双数。我需要按日期对数组进行排序,但我希望第二个和第三个值能与日期绑定。

然后我打算把几个数组集中到一起,按日期排序。

我试图这样做,但据我所知,排序是按数组索引 进行的,即按i进行排序。

double m[215][3];
m[i][0]=Data;
m[i][1]=f1;
m[i][2]=f2;
 
forexman77:

我没有创建一个新的主题。

现在我想做的是:有一个数组,第一个值是日期,第二个和第三个数字是双数。需要按日期值对数组进行排序,但要让第二和第三个值与日期绑定。

...

请看这里:https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski:
看这里:https://www.mql5.com/ru/forum/42036

主要都是在班上,对我来说是一片黑暗的森林。但是,有些想法已经出现了。将日期和数字分别做成一个数组。只是,如何在排序后得到日期所在的索引号,即得到第二维中的i?

datetime m[215][1];
double d[215][2];

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;