任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 408

 
khorosh:
为了评估代码的正确性,你需要确切地知道作者想要得到什么。你的信息不充分。你想得到什么并不十分清楚。如果你想通过开立一个相反的订单来补偿网格关闭后的损失,并期望价格会在最后一个订单的方向通过一些点,补偿过程既取决于这个订单的手数,也取决于价格会在有利的方向通过的距离。这意味着当你计算手数时,你也应该定义价格必须通过的距离来补偿损失。但也许你指的是别的东西。


是的,我应该写得更精确。只是我已经两次完整地阐述了这个功能应该做什么,但没有人回答。再次说明这个函数应该做什么。假设我有一个订单的网格。无论它们是否以相同的步骤打开,这都不重要。一个订单开得比较早,另一个开得比较晚,也就是说,每个仓位都通过了不同的点,有不同的手数。网格将根据某些条件被关闭,我需要计算出所需的LOT,以弥补该网格对TP点产生的损失。为了避免编写两个镜像函数,我在函数中引入了一个otype参数。

然而,我在某处犯了一个错误。请帮助纠正。

double FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после 
                               //закрытия сетки ордеров
{
  double Lot=0; double TotalLot=0;
  for (int i = OrdersTotal()-1; i>0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         {
           Lot = NormalizeDouble (((OrderOpenPrice()-Bid)*Point)*OrderLots()/TP,2); 
           if (Lot>0)
           {
              TotalLot= TotalLot+Lot;
           }
         }
           
       
         else if (otype == OP_SELL)
         {
           Lot = NormalizeDouble (((Ask-OrderOpenPrice())*Point)*OrderLots()/TP,2);
           if (Lot>0)
           {
            TotalLot= TotalLot+Lot;
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }
 
BeerGod:

有什么方法可以正确实现它,使它从零开始关闭?如果可能的话,请提供一行代码。
沿着所需的方向浏览整个列表(订单),并将票值放入一个数组中,然后通过强行删除这个数组来删除这些订单。
 
BeerGod:

有什么方法可以正确实现从零开始关闭吗?如果可能的话,请提供一行代码。


只是一个快速修复。

//+------------------------------------------------------------------+
//|                 Закрыть все ордера                               |
//+------------------------------------------------------------------+


double ClossAllOrders ()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if ( !OrderSelect(i, SELECT_BY_POS) )
      break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, Lime );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, Lime );
                          break;

      //Close pending orders
      case OP_BUYLIMIT  :
      case OP_BUYSTOP   :
      case OP_SELLLIMIT :
      case OP_SELLSTOP  : result = OrderDelete( OrderTicket() );
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
      Sleep(500);
    }  
  }
}

// End
 
Trader7777:

是的,我应该写得更精确。只是我已经两次完整地阐述了这个功能应该做什么,但没有人回答。再次说明这个函数应该做什么。假设我有一个订单的网格。无论它们是否以相同的步骤打开,这都不重要。一个订单开得比较早,另一个开得比较晚,也就是说,每个仓位都通过了不同的点,有不同的手数。网格将根据某些条件被关闭,我需要计算出所需的LOT,以弥补该网格对TP点产生的损失。为了不写两个镜像函数,我在函数中引入了一个otype参数。

但仍然有一个错误的地方。请帮助我解决这个问题。



我将采取不同的路线。首先,我将计算关闭电网的损失。然后就这么简单。损失=下一个订单的利润。通过手数和TP表示订单的利润,并从方程式中找到手数。
 
Contender:


一个快速的手淫。


非常感谢,一切都在正常工作,感谢所有回应的人。


 
khorosh:
我将采取不同的路线。首先,我将计算关闭电网的损失。然后就这么简单。损失=下一个订单的利润。通过手数和TP表示订单的利润,并从方程式中找到手数。


网格结束时的损失是以钱还是以点计算?
 
Trader7777:

关闭网格的损失是金钱还是点数?
存款的货币 计算。
 
每一对都有不同的点价,这又是怎么回事?
 
Trader7777:
每一对都有不同的点价,这又是怎么回事?
你为什么要这样做呢?
 
Trader7777:
每一对都有不同的点价,这又是怎么回事?

这里你可以看到它是如何实现的


https://www.mql5.com/ru/code/7275

https://www.mql5.com/ru/forum/113937/page2

https://docs.mql4.com/ru/constants/marketinfo