[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 485

 
FOReignEXchange:


我不明白?我只是在帮助中寻找,那里的OrderSelect()使用一个条件。而没有真正的我还没有在任何地方看到它。

if是一个条件语句。而且括号里应该有一个条件。这对我来说似乎更符合逻辑。虽然可能没有什么区别。


规格。

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

返回真或假

https://docs.mql4.com/ru/basis/operators/if。

如果表达式为真,则运算符1被执行,控制权交给运算符2之后的运算符(即运算符2不被执行)。如果表达式为假,则执行operator2。

如果(表达式)operator1 else operator2

if 运算符的else 部分可以省略。因此,省略了else 部分的嵌套if 语句可能会引起歧义。在这种情况下,else 被链接到同一块中最近的、没有else 部分的前面的if 语句。

也就是说,比较OrderSelect()==true是 没有必要的--只需使用OrderSelect()或!OrderSelect( )代替OrderSelect()==false

 

我不是这个意思。

只是,当我选择一个订单时,我总是把它写满。

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)==true)

我从未见过没有真实的。

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

我知道了。

 
FOReignEXchange:

我从来没有见过一个不真实的。


你看错了人的代码。
 
FOReignEXchange:

我不是这个意思。

只是,当我选择一个订单时,我总是把它写满。

我从未见过没有真实的。

我知道了。


两个完全平等的条目--一个条目不比另一个差,也不比另一个好--每个人都按自己的意愿,按自己的理解,按自己的习惯来做。
 
sergeev:

你看错了人的代码。


顺便说一句,我必须把它交给FOReignEXchange

我打开"Moving Average.mq4",看到了它。

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


Print()可以直接在你定义的函数中输出变量global_trailing_SP的值。

你从哪里读取这个变量的值?


哇哦!))如果我从提出的函数中打印()global_trailing_SP 变量的值,我在日志中看到一个完全出乎意料的值(用黄色标出)。而在这个功能之外的之前,它的打印是正确的(与红点相反)。

global_trailing_SP 是一个全局变量。它被声明在Start() 函数之外。

double global_trailing_SP = 0.0; 

在尾随止损功能成功改变主仓位的价值后,主仓位的止损值在一个单独的循环中被分配给global_trailing_SP 变量。

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
这就是上面红点所表示的数值。

然后这个值被传递给函数,在那里进行各种顺序的修改。但结果是,日志显示了一个我没想到的数值,而止损的数值当然没有修改。 如何解决这个问题?事实证明,并不是所有的事情都像第一眼看到的那样合乎逻辑)))

 

在SELLSTOP所在的地方这样做不是更好吗?

if((global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) 
{  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
else   Print("Условие не выполняется!");

这样一来,一切都与SELL中的完全一样。

 
FOReignEXchange:

在这里做不是更好吗,SELLSTOP就在这里?

因此,一切都与SELL中的完全一样。


这似乎不是本案中的问题。在上面阅读更多内容。
 
tol64:


哇哦!))如果我从提出的函数中打印()global_trailing_SP 变量的值,我在日志中看到一个绝对意外的值(用黄色突出显示)。而在这个功能之外的之前,它的打印是正确的(与红点相反)。

global_trailing_SP 是一个全局变量。它是在Start() 函数之外声明的。

在尾随止损功能成功改变主仓位的价值后,在一个单独的循环中,global_trailing_SP 变量被分配为主仓位的止损值。

这就是上面红点所示的数值。

然后这个值被传递给函数,在那里进行各种顺序的修改。但结果是,日志显示了一个我没有想到的数值,止损的数值当然也没有修改。如何解决这个问题?事实证明,并不是所有的事情都像第一眼看到的那样合乎逻辑)))


显示你如何读取global_trailing_SP 变量
 

所以我不明白。在修改主要订单时,该待处理订单 是否存在?

如果它存在,那么主订单的修改和挂单的修改就在同一个块中。如果主订单被修改,待处理的订单也应该这样做,如果这是你的想法。

另一件事是,我们的想法并不可行。这意味着条件中的一个错误。试着用与修改主要订单的条件相同的方式来做一切事情,正如我在上面显示的那样。在我看来,错误是在逻辑上。我并不感到惊讶。一切都非常复杂。你应该把它变得更简单。