新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1414 1...140714081409141014111412141314141415141614171418141914201421...1953 新评论 Alexey Viktorov 2021.03.13 09:21 #14131 Aleksei Stepanenko:或者做一个单独的数组打印函数。并从任何地方调用它 Alexey,我已经沉默了很久,但我不能安静地看到这一点......为什么要使用IntegerToString(),而在这种情况下,显式类型转换要简单得多,成本也低...... eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", "; Aleksei Stepanenko 2021.03.13 09:28 #14132 不知道,习惯 :) ANDREY 2021.03.13 09:38 #14133 Aleksei Stepanenko:或者做一个单独的数组打印函数。并从任何地方调用它 非常感谢您的理解和澄清。我正在停顿下来研究和理解对我来说是新的信息。 ANDREY 2021.03.13 09:38 #14134 Alexey Viktorov:Alexey,我已经沉默了很久,但我不能安静地看到它......为什么要使用IntegerToString(),在这种情况下,显式的类型转换要简单得多,成本也低...... 同时也感谢你的宝贵补充。 Tretyakov Rostyslav 2021.03.13 11:31 #14135 你能告诉我在哪里可以看到关于为EA创建一个外部窗口的信息吗? Maxim Kuznetsov 2021.03.13 12:07 #14136 MakarFX: 你能告诉我在哪里可以看到关于为EA创建外部窗口的信息吗? 在论坛上和出版物中,关于C#、Delphi和其他所有的东西......。 tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался ANDREY 2021.03.13 16:03 #14137 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个错误。而所有这些都与用户功能有关。 如果你能告诉我我做错了什么,我将非常感谢你。 谢谢你。 Alexey Viktorov 2021.03.13 18:07 #14138 ANDREY:我决定做一个单独的自定义数组打印函数。或者说,不做一个,用一个( PrintArray())这一点你已经做到了。我做了什么?我把对用户PrintArray()函数的调用放在OnTick()函数内...正如科瓦廖夫的教程中所述。2.我把PrintArray()函数的主体放在OnTick()函数之外.........如科瓦廖夫的教程中所述。该函数主体的所有新变量都是局部变量。它们在这个函数中被声明和初始化。我没有对你的功能做任何改动。但编译器出于某种原因产生了6个错误。而所有这些都与一个用户功能有关。如果你告诉我我做错了什么,我会非常感激你。 谢谢你。 我不太记得了,也懒得去查。尝试添加方括号 void PrintArray(double &eArray[]) ANDREY 2021.03.13 18:19 #14139 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)+" 在这个算法中起什么作用还是个谜。 谢谢你的帮助。 ANDREY 2021.03.13 18:32 #14140 Alexey Viktorov:我不太记得了,我也懒得去查。尝试添加方括号 我添加了方括号 void PrintArray(double &eArray[]) 编译器没有显示任何错误或警告。 BUT.....,Print() 函数由于某种原因没有打印出一次。 我理解你的懒惰,因为我自己就是这样。如果你不是太懒,我的热情取代了它,如果你告诉我自定义函数还有什么问题,我将非常感激。 谢谢你的帮助,并对造成的不便表示歉意。 1...140714081409141014111412141314141415141614171418141914201421...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
或者做一个单独的数组打印函数。
并从任何地方调用它
Alexey,我已经沉默了很久,但我不能安静地看到这一点......为什么要使用IntegerToString(),而在这种情况下,显式类型转换要简单得多,成本也低......
不知道,习惯 :)
或者做一个单独的数组打印函数。
并从任何地方调用它
非常感谢您的理解和澄清。我正在停顿下来研究和理解对我来说是新的信息。
Alexey,我已经沉默了很久,但我不能安静地看到它......为什么要使用IntegerToString(),在这种情况下,显式的类型转换要简单得多,成本也低......
同时也感谢你的宝贵补充。
你能告诉我在哪里可以看到关于为EA创建外部窗口的信息吗?
在论坛上和出版物中,关于C#、Delphi和其他所有的东西......。
或做一个单独的数组打印函数。
并从任何地方调用它
我决定做一个单独的自定义数组打印函数。或者说,不做一个,用( PrintArray())这一点你已经做到了。
我做了什么?
我把对用户PrintArray()函数的调用放在OnTick()函数内...正如科瓦廖夫的教程中所述。
2.我把PrintArray()函数的主体放在OnTick()函数之外.........如科瓦廖夫的教程中所述。
该函数主体的所有新变量都是局部变量。它们在这个函数中被声明和初始化。
我没有对你的功能做任何修改。但由于某些原因,编译器给出了6个错误。而所有这些都与用户功能有关。

如果你能告诉我我做错了什么,我将非常感谢你。
谢谢你。
我决定做一个单独的自定义数组打印函数。或者说,不做一个,用一个( PrintArray())这一点你已经做到了。
我做了什么?
我把对用户PrintArray()函数的调用放在OnTick()函数内...正如科瓦廖夫的教程中所述。
2.我把PrintArray()函数的主体放在OnTick()函数之外.........如科瓦廖夫的教程中所述。
该函数主体的所有新变量都是局部变量。它们在这个函数中被声明和初始化。
我没有对你的功能做任何改动。但编译器出于某种原因产生了6个错误。而所有这些都与一个用户功能有关。
如果你告诉我我做错了什么,我会非常感激你。
谢谢你。
我不太记得了,也懒得去查。尝试添加方括号
Aleksei Stepanenko:
我想我终于想明白了(我有点慢热)......
在第一次迭代中,字符串变量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)+" 在这个算法中起什么作用还是个谜。
谢谢你的帮助。
我不太记得了,我也懒得去查。尝试添加方括号
我添加了方括号 void PrintArray(double &eArray[]) 编译器没有显示任何错误或警告。
BUT.....,Print() 函数由于某种原因没有打印出一次。
我理解你的懒惰,因为我自己就是这样。如果你不是太懒,我的热情取代了它,如果你告诉我自定义函数还有什么问题,我将非常感激。
谢谢你的帮助,并对造成的不便表示歉意。