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

 
ANDREY:

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

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

谢谢你的帮助,很抱歉给你带来麻烦。

也许阵列是空的?通过改变一下函数来检查它

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
如果打印结果为0,则寻找阵列填充的问题。
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

我发现了一个错误。在最后的Print(str);行中,你传递了str 而不是estr 我把它修好了,一切都很好。

感谢你,我现在不仅在大纲上,而且在细节上掌握了这个主题。唯一没有回答的问题是关于我 帖子中的加分项

谢谢你的帮助和支持。

 
Maxim Kuznetsov:

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

我从来没有做过这个,能不能给 "傻瓜 "一些链接?
 
ANDREY:

我发现了一个错误。在最后的Print(str);行中, 你传递了 str 而不是estr 我把它修好了,一切都很好。

感谢你,我现在不仅在大纲上,而且在细节上掌握了这个主题。唯一未回答的问题是 关于我 帖子中的加分项

谢谢你的帮助和支持。

不是我传的。

关于交易、自动交易系统和测试交易策略的论坛

新手对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

你可能想打印一个数组,或者做一个单独的函数来打印一个数组。

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);
   }

并从任何地方调用它

PrintArray(LoY);

我只是没有注意到这一点。我只是不明白编译怎么会没有错误......

如果你已经想通了,并写出了整个序列,那么答案是什么?

ANDREY:

我想我终于想明白了(我是一个有点迟钝的人) ......

在第一次迭代中,字符串变量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)+" 在这个算法中起什么作用还是个谜。

谢谢你的帮助。

如果所有的时间安排正确的话,这仍然是一个谜......
 
MakarFX:
我从来没有做过,可以为 "傻瓜 "提供一些链接吗?

如果你以前没有用C#、Delphi和类似的语言写过东西,那是没有用的......Windows的创建和其他地方一样,但首先你必须学会如何 "到处 "做。

首先是C#的短期课程,WinForms(例如)。互联网上应该有一堆这样的人。这有点超出了本论坛的范围。

 

阿列克谢-维克多罗夫

Alexey Viktorov:


如果一切都写得正确的话,那又是多么神秘的事情啊

我很久没有理解这个算法,因为当你说到 加法 时,我只注意到红色的 加号"--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",但没有注意到str+=。

这就是为什么我仍然想知道这些红色加号"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" 在这个算法中起到什么作用。

从我描述的方式中可以清楚地看出,我的理解是,在每个迭代中,字符串的连接发生在一个地方,并且 str+= 赋值操作一起发生一次

也就是说,使用符号+,字符串变量str中的一个元素的值与同一字符串变量str的另一个元素的值连接(加号)
。我还是不明白这些 红色的+ 表示什么str+="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+"," ;。在我看来,没有对这些红色pluses之间的数值进行求和操作.....。如果我是对的,这些红色加号有什么功能?如果我错了,我一定是没有理解到什么。

顺便说一下,在你的帖子 中,在黄线中,在+DoubleToString(LoY[r],4) 之前只有一个这样的红色加号。但我没有看到它之后。

谢谢你的帮助。

 
Alexey Viktorov:

只是不清楚编译是如何进行的,没有错误,不清楚...


当我看到编译器指出str是未定义的 时候,我自己在用户函数的正文中初始化了str。但我忘了告诉你这件事。
然后我从用户函数的各处删除了str,并在用户函数的最后一行把eStr 放在括号里而不是str

 
Maxim Kuznetsov:

如果你以前没有用C#、Delphi和类似的语言写过东西,那是没有用的......Windows的创建和其他地方一样,但首先你必须学会如何 "到处 "做。

首先是C#的短期课程,WinForms(例如)。互联网上应该有一堆这样的人。这有点超出了论坛的范围。

那么这个表格是可以创建的。


我更感兴趣的是我的窗口和专家顾问之间的数据交换应该如何进行。

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

Aleksei Stepanenko:

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


谢谢你的澄清。

顺便说一下,我去掉了黄色加号,编译器出现了错误。所以他们在这整个建设中发挥了一些作用。但是....,我还是不明白。当只通过使用蓝色加号来进行字符串加法 时,需要它们做什么。从你的解释来看,如果我没弄错的话,这个建筑中没有其他东西.....。

而关于字符串(i)...关于类型转换 ....对我来说,这或多或少是清楚的。不清楚的是,.....string是一个变量类型的名称。i是一个计数器变量,表示一个数组元素的索引 还有,为什么i在括号里()? 到目前为止,我一直认为括号是一种函数特性。例如,Print( )。在一些函数中,不同的数据被放在小括号里。 但是小括号是什么意思,或者小括号对i和整个结构--string(i)有什么作用?乍一看,似乎之前i 变量的类型是int(整数),然后你把i变量的类型从int改为string(字符串) 但包含 的圆括号并没有让我这么想。

谢谢你的解释。