自行车运营商 "为 "问题

 

你好,MQL4社区。


第一个参考资料:https://book.mql4.com/operators/for

根据第一个参考资料,"for "运算符的格式例子是这样写的。

  for (Expression_1; Condition; Expression_2)         // Cycle operator header
      One operator, cycle body                     // Cycle body is one operator


第二个参考资料:https://docs.mql4.com/basis/operators/for

根据第二个参考资料,提供的'for'运算符的例子是这样描述的。

for (Expression1; Expression2; Expression3)
   operator;


为什么第一个例子 包含一个 "条件 "作为第二个参数,而第二个例子包含 "Expression2 " 作为第二个参数?

这种矛盾的含义是什么?

这有什么关系吗?

如果我要使用 "for "循环运算符,我相信我必须对它的所有参数有深刻的理解。

谢谢你。

 

也许你可以通过了解while循环来更好地理解for循环 ...... for循环只是一个带有初始条件和增量的while循环 ......

查阅for 的文档,它说 . .

"for操作符等同于以下连续的操作符:"

Expression1;
while(Expression2)
  {
   operator;
   Expression3;
  };


具体到你的问题,"为什么第一个例子包含一个 "条件 "作为第二个参数,而第二个例子包含 "Expression2"作为第二个参数?"一个表达式可以是一个条件,一个条件的结果是一个真值假值,例如(a > b)或(c || d)或(OrdersTotal() >= 0),文档中也说.."表达式2是循环终止的条件测试。"

 

西蒙。

一个表达式可以是一个条件

那么,"for "运算符标题中的参数 二可以是一个表达式或条件?我认为Expression_1和Expression_3必须保持是表达式,而不是改变为条件,对吗?我不明白为什么表达式1和3也不能成为条件。表达式1和3都只是要填充的参数。(作为一个条件,也可以是参数二,也就是Expression_2的目的)。

请确认你的想法。

表达式可以是算术运算(2+2=4)、赋值等。(所有这些都列在MetaEditor词典中)。

条件是真||假(例子:a>b,a>=b,a==b,等等)。

操作也包含在MetaEditor字典中(例子:Break, Continue, Return, while, for,等等)。

谢谢你

 
WhooDoo22:

西蒙。

一个表达式可以是一个条件

那么,"for "运算符标题中的参数二可以是一个表达式或条件?我认为Expression_1和Expression_3必须保持是表达式,而不是改变为条件,对吗?我不明白为什么表达式1和3也不能成为条件。表达式1和3都只是要填充的参数。(作为一个条件,也可以是参数二,也就是Expression_2的目的)。

学习如何正确使用while ... ...for 循环就是while 循环,只是以一种更美观的方式排列。 然后表达式和条件的事情就都有意义了。......帮你自己一个忙,减少头疼的选择 ......学习while

文档 - while

书 - while
 
WhooDoo22: 那么,'for'运算符标题中的参数二可以是一个表达式或条件?
任何表达式都会产生一个数字。这个数字,转换为布尔值就是一个条件。同样的事情。你说tuh-mey -toh,而我说tuh-mah-toh
 

西蒙,我将在代码中练习使用while操作,帮你自己一个忙...我喜欢这样的声音!:)谢谢你。

威廉,这个数字,转换为布尔值是一个条件... (1=true,0=false)。非常感谢。

谢谢你。

 

西蒙。

我已经写了一个EA,它应该;)能够做到你的要求。

我分享的是这个EA与终端中 "专家 "标签的结果的组合。


该EA似乎能够选择USDJPY订单并将其信息打印到专家标签。为什么该EA没有关闭订单以及打印订单信息?

谢谢你。

附加的文件:
 
WhooDoo22:

西蒙。

我已经写了一个EA,它应该;)能够做到你的要求。

我分享的是这个EA与终端中 "专家 "标签的结果的组合。


该EA似乎能够选择USDJPY订单并将其信息打印到专家标签。为什么该EA没有关闭订单以及打印订单信息?

谢谢你。

你说你理解大括号?https://www.mql5.com/en/forum/142732


请解释一下你的代码,以及它的目的是什么......特别是请告诉我,在这段时间里,请告诉我。
 

西蒙。

请解释一下你的代码和它的目的......特别是请告诉我,同时请告诉我。

我将尽力解释代码 和它的目的


代码目的。

1.从三个订单中选择USDJPY订单。

2.2. 修改USDJPY订单的TP和SL。

3.执行OrderPrint()函数。

4.关闭 USDJPY 订单。


代码解释。

首先,变量被声明。

   int i;
   double bid_ask;

第二,执行'while'循环。

'while'循环的逻辑。

OrderSelect()函数 使用变量'i'来代替数字1,2,3,等等。(请牢记这一点)

因此,如果OrderSelect()函数和OrderSymbol()函数中的变量i不是USDJPY,则 变量i增加1。

   while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")

         i++;

循环增加'i'变量,直到OrderSelect()函数选择适当的订单票和OrderSymbol()函数选择一个USDJPY订单。当这两个目标都完成后,while循环变成假的,控制权被传递到i++;(while循环主体)下面。

第三,OrderModify()函数被执行。

OrderModify(i,OrderOpenPrice(),50*Point,50*Point,0,CLR_NONE);

第四,OrderPrint()函数被执行。

OrderPrint();

第五,包括参数,以辨别要关闭的订单是买入还是卖出订单。

         if(OrderType()==OP_BUY){bid_ask=Bid;}
         if(OrderType()==OP_SELL){bid_ask=Ask;}

第六,一旦程序区分了订单是买入还是卖出,它就执行OrderClose()函数。

OrderClose(i,OrderLots(),bid_ask,3,CLR_NONE);

第七(也是最后一点),程序包括一个注释,它将显示变量'i',以确认票号确实是在策略测试器的视觉测试中的USDJPY票。

Comment("i = " ,i);

谢谢你。

 
WhooDoo22:

西蒙。


'while'循环逻辑。

OrderSelect()函数使用变量'i'来代替数字1,2,3,等等。(请牢记这一点)

因此,如果OrderSelect()函数和OrderSymbol()函数中的变量i不是USDJPY,则 变量i增加1。

循环增加'i'变量,直到OrderSelect()函数选择适当的订单票和OrderSymbol()函数选择一个USDJPY订单。当这两个目标都完成后,while循环变成假的,控制权被传递到i++;(while循环主体)下面。

对不起,我误读了你的代码.谢谢你的解释,我现在明白你在做什么了。 你的问题很简单 ......只要看看你发布的屏幕截图中的错误信息 ......看看OrderPrint()产生的结果,包括订单号码,然后看看错误。

如果你有对返回值的检查和 错误报告,你可能会自己看到你的问题。
 

西蒙。

我不知道你看到的是什么,但是;)我将及时加入GetLastOrder()函数,以便对这个问题有所了解。很抱歉,我没有在代码中加入GetLastOrder()函数就发了一个问题。

谢谢你。