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

 
Aleksei Stepanenko:

或者做一个单独的数组打印函数。

并从任何地方调用它

Alexey,我已经沉默了很久,但我不能安静地看到这一点......为什么要使用IntegerToString(),而在这种情况下,显式类型转换要简单得多,成本也低......

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

不知道,习惯 :)

 
Aleksei Stepanenko:

或者做一个单独的数组打印函数。

并从任何地方调用它

非常感谢您的理解和澄清。我正在停顿下来研究和理解对我来说是新的信息。

 
Alexey Viktorov:

Alexey,我已经沉默了很久,但我不能安静地看到它......为什么要使用IntegerToString(),在这种情况下,显式的类型转换要简单得多,成本也低......

同时也感谢你的宝贵补充。

 
你能告诉我在哪里可以看到关于为EA创建一个外部窗口的信息吗?
 
MakarFX:
你能告诉我在哪里可以看到关于为EA创建外部窗口的信息吗?

在论坛上和出版物中,关于C#、Delphi和其他所有的东西......。

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

或做一个单独的数组打印函数。

并从任何地方调用它

我决定做一个单独的自定义数组打印函数。或者说,不做一个,用( PrintArray())这一点你已经做到了。

我做了什么?

我把对用户PrintArray()函数的调用放在OnTick()函数内...正如科瓦廖夫的教程中所述。

2.我把PrintArray()函数的主体放在OnTick()函数之外.........如科瓦廖夫的教程中所述。

该函数主体的所有新变量都是局部变量。它们在这个函数中被声明和初始化。

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

我没有对你的功能做任何修改。但由于某些原因,编译器给出了6个错误。而所有这些都与用户功能有关。

如果你能告诉我我做错了什么,我将非常感谢你。
谢谢你。

 
ANDREY:

我决定做一个单独的自定义数组打印函数。或者说,不做一个,用一个( PrintArray())这一点你已经做到了。

我做了什么?

我把对用户PrintArray()函数的调用放在OnTick()函数内...正如科瓦廖夫的教程中所述。

2.我把PrintArray()函数的主体放在OnTick()函数之外.........如科瓦廖夫的教程中所述。

该函数主体的所有新变量都是局部变量。它们在这个函数中被声明和初始化。

我没有对你的功能做任何改动。但编译器出于某种原因产生了6个错误。而所有这些都与一个用户功能有关。

如果你告诉我我做错了什么,我会非常感激你。
谢谢你。

我不太记得了,也懒得去查。尝试添加方括号

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


我想我终于想明白了(我有点慢热)......

在第一次迭代中,字符串变量str是空的。字符=+指示str将自己赋值为空(无值),并在自己的空处添加一个有值的字符串,即"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";。这个字符串的值是 " --LoY[0]--, --1.6104-- "在这些操作之后,str在第一次迭代时得到的数值 "--LoY[0]--, --1.6104-- "按照我对你的术语的理解,这被称为第一要素。

在第二次迭代时,str已经有了第一个元素,其值为" --LoY[0]--, --1。6104-- " 字符=+指示str第一个元素的值 分配给自己,并将其分配给本身带有第一个元素的值,添加一个带有其他值的字符串,即"--LoY["+"+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",";。这个字符串的值已经是 " --LoY[1]--, --1.6105--"。经过这些操作,str在第二次迭代时得到的数值"--LoY[0]-- --1.6104----LoY[1]-- --1.6105--" 。也就是说,str已经有了第二个元素,在第三十次迭代时,str将包含30个元素,数组元素的值各不相同

当循环结束时,带有30个项目的字符串变量str将在循环外被打印一次。
我花了很长时间才弄明白这个算法,因为当你说到加法时,我只注意了红色的加号"--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",没有注意str+=。

所以对我来说,那些红色的加号"--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+" 在这个算法中起什么作用还是个谜。

谢谢你的帮助。

 
Alexey Viktorov:

我不太记得了,我也懒得去查。尝试添加方括号

我添加了方括号 void PrintArray(double &eArray[]) 编译器没有显示任何错误或警告。
BUT.....,Print() 函数由于某种原因没有打印出一次

我理解你的懒惰,因为我自己就是这样。如果你不是太懒,我的热情取代了它,如果你告诉我自定义函数还有什么问题,我将非常感激。

谢谢你的帮助,并对造成的不便表示歉意。