[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 579

 

eh...为什么检查未结订单的条件不能这样写。

如果OrdersTotal()> 0

一切都很清楚和容易理解...这将是...

我已经想了一个小时,想知道如何写这个条件......

 
lottamer:

eh...为什么检查未结订单的条件不能这样写。

如果OrdersTotal()>0

一切都很清楚和容易理解...这将是...

我已经想了一个小时,想知道如何写这个条件......


为什么不呢? 你可以,但如果任何符号上有未平仓或挂单,就会被触发。
 
rigonich:

为什么不呢?你可以,但如果任何工具上有未平仓或挂单,它将被触发。


我希望它能发挥作用--我有一个位置和一个工具。

但这并不奏效!

它说代码里有一个错误。

对这个

---------------------------

int start()

{

//----

如果OrdersTotal()> 0

PlaySound("alert.wav")。

//----

return(0);

}

-----------------------------

送出8个错误!!!。

 

//---------------------------

int start()

  {

//----

   if (OrdersTotal()>0)

PlaySound ("alert.wav");

//----

  }

 return(0);

 
//-----------------------------

这个怎么样?
 
BeerGod:

这个怎么样?


:)))))))))))))))))))

绚丽多彩!谢谢你

 
Desead:


因此,当我从图表中删除一个机器人时,就会调用deinit--我无法以任何其他方式跟踪这个条件.....,也许写一个单独的脚本来删除所有剩余的待定机器人更容易,没有其他办法。

顺便说一下,关于这个问题的另一个想法。

我想我已经解决了删除未决订单的问题。我在一个单独的函数中确定 "必要的"(要删除的)订单的数量,调用这个函数,然后在while中设置条件(总量>0),然后循环删除for(int i=Total-1;i<=0l; i--),再次计算"必要的 "和删除尝试的计数器,当达到指定水平时退出while这样一来,一切都被删除了。

如果其中一个订单在计数时刻后因任何原因消失,这里可能会出现无限循环。


为什么不能这样做?例如,在终端层面创建一个全局变量,为其赋值,并在关闭前通过service-->global variables检查启动和改变该变量的值。
 
BeerGod:

因此?


我想问,他们这样做的目的是什么?

for(int i=0; i<OrdersTotal(); i++)

看起来他们正试图用暴力方法来计算未结头寸...

 

日安!!!。找不到一个漂亮的解决方法来解决这个问题。下面是一个典型的订单设置。但是,如果我给机器人的参数为零,即没有止损和止盈,就不会有任何效果。

 if(!srabotka){
           OrderSend (Symbol( ), OP_BUY, lot ,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Ask- (stop*Point),Digits),   NormalizeDouble( Ask+( 45*Point),Digits), NULL, 450, 0, CLR_NONE);
           int Error=GetLastError();if (Error==0){  
           Sleep(2000); RefreshRates(); 
           OrderSend (Symbol( ), OP_SELL,  lot ,NormalizeDouble(Bid, Digits), 5, NormalizeDouble( Bid+ (stop*Point),Digits), NormalizeDouble( Bid-( 45*Point),Digits), NULL, 450, 0, CLR_NONE); 
           Error=GetLastError();
           if (Error==0){  profit = NormalizeDouble( Ask+( 45*Point),Digits); //tsena=Ask; perenos = false;  
           srabotka= true; }}}
           
           if (Error!=0){ string errorcomment = "Ошибка открытия  ордера OP_BUY"  + " " + Symbol() +  " " + ErrorDescript(Error); 
            Print (errorcomment);}
 

我们也可以设置一个if,第二次输入带零的订单,但这有点麻烦。

 
lottamer:


请允许我问一下,他们在这里想做什么?

for(int i=0; i<OrdersTotal(); i++)

感觉它在试图计算未结头寸...


那么,它通过指定的参数来选择订单。

例如:https://www.mql5.com/ru/forum/131859/page3#434221

函数NumberOfPositions()。

该函数返回当前未结头寸的数量。 通过外部参数指定更精确的被计算头寸的选择。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值为-1,意味着任何标识符。
  • //+----------------------------------------------------------------------------+
    //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
    //+----------------------------------------------------------------------------+
    //|  Версия   : 19.02.2008                                                     |
    //|  Описание : Возвращает количество позиций.                                 |
    //+----------------------------------------------------------------------------+
    //|  Параметры:                                                                |
    //|    sy - наименование инструмента   (""   - любой символ,                   |
    //|                                     NULL - текущий символ)                 |
    //|    op - операция                   (-1   - любая позиция)                  |
    //|    mn - MagicNumber                (-1   - любой магик)                    |
    //+----------------------------------------------------------------------------+
    int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
      int i, k=OrdersTotal(), kp=0;
    
      if (sy=="0") sy=Symbol();
      for (i=0; i<k; i++) {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
          if (OrderSymbol()==sy || sy=="") {
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (op<0 || OrderType()==op) {
                if (mn<0 || OrderMagicNumber()==mn) kp++;
              }
            }
          }
        }
      }
      return(kp);
    }

 
lottamer:


我想问,他们想用这个做什么?

for(int i=0; i<OrdersTotal(); i++)

感觉他们在试图计算开放的职位...

...不要屈服于你的感觉,但要遵守规则。在这种情况下,循环正在尝试涉及一个整数变量i 的参数(在订单的 "列表 "中),并且它的值在每次迭代中都会增加1。 订单号正在被尝试出来。:)))