新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1426

 
Aleksei Stepanenko:
你想对两行的数值进行排序,还是只对第一行进行排序?

只有在第一个。代码中存在一个错误。

对不起...我不知道如何删除这些代码。所以我只想说,在第2块中,不是LoY[S2][0]=Bid;而是需要LoY[0][52]=Bid

 

为什么我不能同时交换行和列?

double LoY[31][2];
 

如果你一次做对了顺序,你能说出你想用0.5555的数值填充的单元格的数字吗?


 
Aleksei Stepanenko:

为什么我不能同时交换行和列?

那么ArrayFill(LoY,0,10,0.5555);将无法工作。但它需要数组元素,在这些元素中,它的数值变化要*依次进行。但是如果我把LoY[31][2]
,那么我想改变数值的数组元素将经过1。在这种情况下,它将首先把数组的31行按顺序 "添加 "到一行。

 
Aleksei Stepanenko:

如果你想按照正确的顺序来做,你能告诉我你想用0.5555填充的单元格的数字吗?


第一行包含单元格一到十。但是一旦你用0.5555填充它们,整个第一行就必须被排序...比方说,按升序排列。ArrayFill(LoY,0,10,0.5555)而不是ArrayFill(LoY,0,10,0.5555)并不适合我。

我纠正了代码中的错误

 

这里是剧本。

void OnStart()
   {
   int arr[31,2]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
                  31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61};
   //до заполнения              
   string str="";
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   //после заполнения
   str="";
   ArrayFill(arr, 0, 10, 555); 
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   }

结果。

2021.03.20 19:42:26.602 primer AUDUSD,H1: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

2021.03.20 19:42:26.602 primer AUDUSD,H1: 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

是不是?

 
Aleksei Stepanenko:

这里是剧本。

结果。

到底是不是这样呢?

非常感谢你。这看起来是我需要的东西。但如果你能把这段代码不是作为脚本而是放到我的代码中,我将非常感激。这样我就能更快地理解和吸收新信息。只是我在数组中有价格值而不是整数。

再次感谢您的帮助。

 
如果你需要用不同的方式来填写,那么就用
ArrayFill()

使用

for(int i=0; i<10; i++) arr[i,0]=555;
 
Aleksei Stepanenko:
如果需要以不同的方式填写,那么就用以下方式代替

使用

好的。今天我希望能吸收一些适合我的新信息。而我明天会让你知道结果。

再次感谢。

 
ANDREY:

代码不是作为一个脚本,而是粘贴到我的代码中。

我没有写别的东西,我只是重复了你的代码。

从视觉上看,这些数字排列不正确(分两行,而不是31行),而你认为这就是你需要的。

最有可能的是,你可能需要给循环分配0.5555,而不是ArrayFill。试试吧。

double LoY[31][2],LoU,LoU1;
int S,S1,S2;

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
for(int i=0; i<10; i++) LoY[i,0]=0.555;
S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[S2][0]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[1][0]-- В ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[1][0],"  [2] ",   LoY[2][0],"  [3] ",   LoY[3][0],"  [4] ",   LoY[4][0],"  [26] ",   LoY[26][0],"  [27] ",   LoY[27][0],"  [28] ",   LoY[28][0],"  [30] ",   LoY[30][0],"  [60] ",   LoY[60][0]);
S2++;
if (S2==62)
{
S2=0;
}
S=Minute();
}
}
原因: