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

 
Taras Slobodyanik:

评论格式可能因经纪人而异。

我没有看到没有 "To "和 "From "的情况。
 
Artyom Trishkin:
没有看到没有 "To "和 "From "的情况。
Artem,看看我上面的问题....
 

祝大家今天愉快

请告诉我在MQL4(或MQL5,但在MQL4工作 中是否有 一个函数可以将数组 LoY[2][7] 转换 为数组LoY[7][2],反之亦然类似换位思考的东西。下面是我需要的转型样本。我想有一个功能。我已经知道如何在循环中转换一个数组。

谢谢你的帮助。

 
ANDREY:

祝大家今天愉快

请告诉我在MQL4(或MQL5,但在MQL4工作 中是否有 一个函数可以将数组 LoY[2][7] 转换 为数组LoY[7][2],反之亦然类似换位思考的东西。下面是我需要的转型样本。

谢谢你的帮助。

仅供参考:在经典算法(一般的IT)中,这种操作被称为zip。

我在图书馆里找不到这样的功能。它是非常浪费和低效的。改变算法/程序中的索引或使用间接访问比重新排列数组中的所有数据更容易和更快。

 
Maxim Kuznetsov:

改变算法/程序中的索引或使用间接访问比重新排列数组中的所有数据更容易和更快。

非常感谢您的答复。不幸的是,我在编程方面不像你那么高级。如果你能写一些改变数组索引mql4 代码来解决我的问题,我将非常感谢你。如果你能举出间接引用的例子,我会加倍感激。

我将更准确地理解你的思维过程,并学习一些新的、对我有用的东西,感谢你。

 
ANDREY:

非常感谢您的答复。不幸的是,我在编程方面不像你那么高级。如果你能写一些mql4 代码来改变数组索引 以解决我的问题,我将非常感谢你。如果你能举出间接引用的例子,我会加倍感激。

我将更准确地理解你的思维过程,并学习一些新的、对我有用的东西,感谢你。

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

它很短,但这是你能做的最糟糕的事情:-)两个嵌套的循环和逐个元素复制的数组。

当你在你的算法里面,你可以直接重命名索引。只要在代码中把i改为j,反之亦然......

 
Maxim Kuznetsov:

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

短,但这是你能做的最糟糕的事情 :-)

非常感谢你。还有一个最好的例子?:-)....,以便我有一个全面的了解。

逐个元素的复制是漫长而耗费精力的......特别是对于大的数组......,如果我没有弄错的话。

 
安德烈,你为什么要这样做?如果数据已经被收集在一个数组中,你可以找到一种方法,在不移动任何东西的情况下按原样使用它。或者按照正确的顺序预先将它们组装成一个数组。你想得到什么?
 
Aleksei Stepanenko:
安德烈,你为什么需要它?如果数据已经被收集在一个数组中,你可以找到一种方法,在不移动任何东西的情况下直接使用它的原样。或者你可以事先将它们按正确的顺序组合成一个数组。你想得到什么?

下面是我的简单代码,以说明我的需要。

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

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
ArrayFill(LoY,0,10,0.5555);

S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[0][S2]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[0][1]-- Г ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[0][1],"  [2] ",   LoY[0][2],"  [3] ",   LoY[0][3],"  [4] ",   LoY[0][4],"  [26] ",   LoY[0][26],"  [27] ",   LoY[0][27],"  [28] ",   LoY[0][28],"  [30] ",   LoY[0][30],"  [60] ",   LoY[0][60]);
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();
}
}

在程序块1中,ArrayFill(LoY,0,10,0.5555)运行并给数组的 前10个元素 赋值为0.5555。之后,我需要对整个空行从第0列到第31列进行排序。

我想在第2块进行排序,使用ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); 但我无法进行排序,因为这个函数对二维数组按其第一维进行排序,即按行排序。ArraySort()对二维,即列不排序的二维数组(只有一维) 进行排序。

所以我想,也许我应该把第一块后的LoY[2][31]转换为LoY[31][2]这样ArraySort()就可以对第二块中需要的值进行排序。 我需要在ArrayFil()改变了前10个数值后,对所有零行的数值进行排序。

我可以用其他函数或其他方法按第二维,即按列对二维数组进行排序吗?
对不起...我不知道如何删除这些代码。所以我只想说,在第180行有一个错误,而不是LoY[S2][0]=Bid;我们需要LoY[0][52]=Bid。

谢谢你的帮助。

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