谁能帮帮我!!

 

陷于问题之中

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


如果有未结头寸,选择器会找到订单,但如果没有未结头寸,我怎样才能找到它呢?选择器仍会显示最后的关闭头寸。
 
sllawa3:

陷于问题之中


选择器在有开仓的情况下能找到订单,但如果没有开仓,怎么找呢?选择器还是会显示最后的平仓...
在标志
MODE_TRADES
,"选择器 "将根本不显示关闭的位置,只显示打开的位置。 如果有零个打开的位置,循环甚至不会开始,因为条件是假的。
 
Techno:
与国旗
选择器 "根本不会显示关闭的头寸,只显示打开的头寸。 如果有零个打开的头寸,循环甚至不会开始,因为条件将是假的。

我知道它不会启动,并且会保存已经关闭的最后一个头寸......这就是我所写的......你可以使用选择订单来检查已开仓的头寸,但我应该如何检查没有头寸?
 
sllawa3:

没错,它不会启动,会保存已经关闭的最后一个姿势......这就是它所说的......
我不明白它说什么。即使现在,你说的 "保存一个封闭的位置 "是什么意思?如果我们谈论的是计算头寸,我只能猜测,所有的变量(用于存储订单数量)必须在启动函数的开始时清零。也就是在循环之前。如果它们在循环之后仍然是空的,这意味着没有位置。
 
在主题的开头有一段代码......如果没有位置,那么DS保持=1,直到有新的订单出现......。即使订单已经结束......只是选择,不会开始......有什么不明白的呢......
 
Techno:
有些东西没有写清楚。即使是现在,"保持仓位 "是什么意思?如果我们谈论的是计算头寸,我只能猜测,那么所有的变量(用于存储订单的数量)必须在启动函数的开始时重置为零。也就是在循环之前。如果它们在循环之后仍然是空的,这意味着没有位置。

在循环之前,DS最初被写成int = 0。
 
Techno:


因此,如果循环没有开始,它就不会重置,如果没有姿势,它就不会开始。
 
sllawa3:

在循环之前,DS最初被规定为int = 0。
啊,好吧,如果是规定的,0被分配了,那就不可能有问题,否则为什么会等于1?它在启动函数中或以上被分配为零吗?
 
以上
 
可能没有问题,但有......自己试试就知道了
 
这个怎么样?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ
原因: