新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1680

 
MakarFX #:

我会试着把它附上,谢谢你。只是一个问题,如何处理卖出订单的问题

 
EVGENII SHELIPOV #:

我会试着把它附上,谢谢你。只是一个问题,如何处理卖出订单的问题

Semyon Semyonych...
   double GetBuyOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
   double GetSellOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_SELL)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:
Semyon Semyonych...

马卡,为什么要把它塞进一个函数里这么复杂?还是有什么是我不明白的?

 
int GetMagic(Order &order)
{
  int magic = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
    if(OrdersTotal() >= 1)
      for(;;){
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --)
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) != false)
            if(magic != OrderMagicNumber())
              return magic;
            
      }
    else if (OrdersTotal() == 0)
      return (magic + 1);
  return magic;
}
用==替换它也无济于事。在这两种情况下,都没有线程去那里(我用打印检查过)。
 
Nerd Trader #:
评注中说,它把majic送到写数组中,不要让它误导,只要majic回到retorn 就可以了。

我不太理解一般的逻辑,我试图将这些功能分开

  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
  int order_magic = GetMagic(order);

  if(order.is_init == true)
  {
    int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10, 
    order.sl_price, order.tp_price, "", order_magic, 0, order.arrow_color);

    if(order_send == -1){
      Print(order.error_text," | ",GetLastError()," db_last.third ",db_last.third,
        " | db_last.size_open_to_low ",db_last.size_open_to_low," | order.sl_price: ",
        order.sl_price," | order.cmd ",order.cmd);
      ResetLastError();
      return;
    }
  }
   //+---
   int GetMagic(Order &order)
   {
     int magic = 0;
     for(int i = OrdersTotal(); i > 0 ; i --)
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
          if(magic == OrderMagicNumber()) magic+=1;
          else magic=0;
         }
      }
     return (magic);
   }
 
EVGENII SHELIPOV #:

马卡,为什么要把它塞进一个函数里这么复杂?还是有什么是我不明白的?

   double GetOrderSwap(int ot=-1)// 0-Buy; 1-Sell
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:

马卡尔,你对我来说是个孩子。

谢谢你,Makar,我稍稍改变了一下功能,现在可以用了。

 
MakarFX #:

我不太明白一般的逻辑,我试图将这些功能分开

现在,GetMagic应该在发送待定订单的时刻生成一个独特的魔法,并通过retorn返回它。在你的版本中,只有一个循环,所以当订单完成后,无论如何都会执行else,而magic == OrderMagicNumber() 将永远为真。我想要magic != OrderMagicNumber(),当它不是真的时候,这意味着magic是唯一的,它在第一个for(;;)中被自己递增
 
Nerd Trader #:

检查你的个人信息。

 
你好,我面临以下问题:EA开了一个挂单,但终端没有跟踪它,它也没有出现在交易历史中。如果有人遇到过这样的问题,请告知。
原因: