从头开始自学MQL5语言 - 页 66

 
Valeriy Yastremskiy:

循环运算符和循环体中的运算符。不完全是经典的俄罗斯人。

当然,一切都很好,但循环体中的迭代器i在哪里?而为了获得位置符号和它的神奇数字,必须先选择它。职位描述是一个结构(在MQL5中,所有的结构和订单和时间和交易),它是通过选择填写的,通过迭代器,它不是一个职位票,而是一个职位号码。 而且我们应该记住,在职位描述结构中,它总是最后的职位选择。

你好,瓦莱里!谢谢你的澄清。

这就是我的困惑所在,因为在没有for 循环操作符的情况下,一切都能正常工作,而在有for 循环操作符的情况下,由于某种原因却不能工作。我没有理解错吧,我应该先通过请求 进行所有必要的查询?

问候,弗拉基米尔。

 
MrBrooklin:

你好,瓦莱里!谢谢你的澄清。

这就是我的困惑所在,因为在没有for 循环操作符的情况下,一切都能正常工作,但在有for 循环操作符的情况下,由于某种原因,却不能正常工作。我没有理解错,我需要首先通过请求 进行所有必要的查询?

问候,弗拉基米尔。

不,我不太了解MKL5。这是对执行的要求。而你需要通过数字选择位置,以进一步处理它。

位置选择

我想是的。

 
MrBrooklin:

大家今天好,心情好

亲爱的 专业人士!请给我建议,但不要用语言, 否则我就永远学不会MQL5编程语言了。

问候,弗拉基米尔。

你好!问题是你应用了开仓 的循环,你没有用 "如果 "来定义它,即for循环到底寻找什么,而且你还没有完成它,它必须返回什么...

打开的位置一直在计算,所以最好创建一个带有循环的区块,当你打开它时,你可以调用它,例如,这样做。

input int MaxOpenedPositions=1;
.
.
.
int Total=TotalPositions(-1);
if(Total<MaxOpenedPositions && другие условия для открытия) OpenBUY();//например
if(Total<MaxOpenedPositions && другие условия для открытия) OpenSELL();//например

//+------------------------------------------------------------------+
//| Total Positions                                                  |
//+------------------------------------------------------------------+
int TotalPositions(int Type)
   {
int cnt=0;
if(PositionsTotal()>0)
for(int i=PositionsTotal()-1;i>=0;i--)
   
if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==MagicNumber) 
   {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) {cnt++;continue;}
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) {cnt++;}
   }
   return(cnt);
   }
 
Valeriy Yastremskiy:

不,我不太了解MKL5。这是对执行的要求。而你需要通过数字选择一个位置,以便进一步处理它。

位置选择

我想是的。

尝试了所有的方法,包括PositionSelect。他们都没有帮助。

问候,弗拉基米尔。

 
VVT:

你好!有话要说;问题是,当你应用开仓 循环时,你没有在 "如果 "条件中指定它,即for循环到底在尝试什么,你也没有以任何方式结束它,它应该返回一些...

开仓是一直在计算的,所以最好是创建一个带循环的区块,比如说在开仓时调用它。

你好!

谢谢你的提示。我将尝试分析和应用你的列举空缺职位的方法。

问候,弗拉基米尔。

 
VVT:

你好!话说;重点是当你应用循环搜索空缺职位 时,你没有在 "if "中指定它,即for循环到底搜索什么,你也没有以任何方式结束它,它应该返回一些...

顺便说一下,MQL5参考文献中没有提到循环完成后必须返回一些东西的事实。也许,我误解了什么?或者,它指的是if 语句?

最好的问候,弗拉基米尔。

 
MrBrooklin:

尝试了所有的方法,包括PositionSelect。没有任何帮助。

问候,弗拉基米尔。

只了解到,是的,在织网中按工具选择位置,而不是按数字选择。哦,他们搞砸了)。

它可以通过

  • PositionGetTicket按位置号返回位置票(我们有一个数字),收到位置票后,我们可以得到它的符号和魔法。
或者,如果是净值化,我们可以思考一下,决定为什么我们需要订单 或头寸的总数,如果我们在一个工具上只能有一个头寸,我们需要知道它。这就是为什么我们可能不需要一个周期。在我们的工具上,如果PositionSelect返回False,它就会打开一个头寸,如果是True,它就会在这个工具上选择一个头寸,我们可以用它来工作,并修改它来进行拖网。
 
Valeriy Yastremskiy:

刚刚意识到,是的,在净值化中的仓位选择是按工具,而不是按数字。哦,他们被搞得一团糟)。

它可以通过

  • PositionGetTicket按位置号返回一张位置票(我们有一个数字),得到位置票我们可以得到它的符号和魔力。
或者,如果是净值化,我们可以思考一下,决定为什么我们需要订单 或头寸的总数,如果我们在一个工具上只能有一个头寸,我们需要知道它。这就是为什么我们可能不需要一个周期。在我们的符号上,我们做 如果PositionSelect返回False,它就会打开一个位置,如果是True,它就会在这个符号上选择一个位置,我们可以用它来工作,并修改它进行拖网。

所以,这段代码最初是在没有循环运算符的情况下写的,尽管我后来很好奇地想试试。

问候,弗拉基米尔。

 
MrBrooklin:

顺便说一下,在MQL5参考文献中没有任何关于循环完成后应该返回的事实。也许,我又弄错了?

真诚的,弗拉基米尔。

这个措辞不太正确。 行动应该在循环体中执行,取决于迭代器。取决于迭代器的情况。而应该返回的正是在循环体中执行这些操作的结果。如果循环被通过,并且没有中断或应急操作符,这意味着我们将转到表达式3,然后转到表达式2,如果是True,我们将用新的迭代器将其返回到循环体。

 
MrBrooklin:

因此,最初写的代码中没有循环运算符,尽管我当时很想试试如何应用它。

尊敬的弗拉基米尔。

你可以申请

  • PositionGetTicket按位置号返回一张位置票(我们有一个数字),收到位置票后,我们可以得到它的符号和魔力。

按编号查看所有票据。并通过票据找出位置的符号,与我们的比较。获取位置magik并与我们的进行比较。

if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && 
PositionGetInteger(POSITION_MAGIC)==MagicNumber) // вот эта строчка

但只是为什么。