初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1454

 
Mikhail Toptunov #:

先生们,部长们!)

又是 25

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
        {
         long f= m_position.Magic();
         if(m_position.Comment()==comment)
            if(m_position.Type()==type)
               if(m_position.Magic()==magic)
                  return(true);
        }

马匹、人....

这是什么鬼东西?

我们在询问未结订单的数量,却在检查仓位。这是行不通的。
 
JRandomTrader #:

唉,不尽然。我已经在这里说明了我是如何收到代码 10012,即零订单票据的,但订单还是执行了。MQ 对此保持沉默。

我为它写了一根拐杖,但只有再次收到 10012 后才有可能检查它)。

这是规则的例外,一个人无法理解订单、交易和头寸之间的区别。你还把他和例外情况混为一谈))))))。

当他理解了如何工作时,他就能根据自己的需要写出支票。

 
Aleksandr Slavskii #:

...一个人无法理解订单、交易和头寸之间的区别 ......

当他明白了如何运作时,他就能根据自己的需要开出支票。

这里 对一切都有详细描述。

弗拉基米尔

 

谢谢,似乎已经弄明白了!!!!


//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction&    trans,     // структура торговой транзакции
                        const MqlTradeRequest&        request,   // структура запроса
                        const MqlTradeResult&         result)    // структура ответа
  {
//--- результат выполнения торгового запроса
 ulong            lastOrderID   =trans.order; 

//--- тип транзакции
   ENUM_TRADE_TRANSACTION_TYPE  trans_type=trans.type;
   switch(trans.type)
     {
      case  TRADE_TRANSACTION_POSITION:   // изменение позиции
        {

        }
      break;
      //---
      case TRADE_TRANSACTION_ORDER_ADD:    // добавление нового действующего ордера
        {
         fix_position_open(lastOrderID);
        }
      break;
      case TRADE_TRANSACTION_REQUEST:    // добавление нового действующего ордера
        {

        }
      break;
     }
//---
  }
//--- Фиксируем если позиция открыта --------------------------------+
void fix_position_open(ulong lastOrderID)
  {
//--- Фиксируем если позиция открыта
   for(int i=0; i<ArraySize(position_buff); i++)
      if(position_buff[i].timeOp==1)
         if(!match_open_orders(lastOrderID))
           {
            position_buff[i].timeOp= 0;     // Фиксировать время
            Print("Метод OnTrade() по рынку не выполнен. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//
           }
         else
           {
            position_buff[i].timeOp= TimeCurrent();
            Print("Метод OnTrade() по рынку выполнен успешно. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//
           }
  }
//--- Соответствие открытых ордеров ---------------------------------+
bool match_open_orders(long lastOrderID)
  {
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Identifier()==lastOrderID)
            return(true);
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(m_order.SelectByIndex(i))
         if(m_order.Ticket()==lastOrderID)
            return(true);
   return(false);
  }
 
Mikhail Toptunov #:

谢谢,似乎已经弄明白了!!!!

当订单被执行时,头寸即被打开,即交易达成,订单进入历史记录。

 
如果 MQL5 中没有提供所有函数,该怎么办?
 
Baruandreas #:
如果 MQL5 中没有提供所有函数,该怎么办

完全忘记 mql4,不断阅读 mql5 文档。

 
Baruandreas #:
如果 MQL5 中没有提供所有函数,该 怎么办?

您的问题不清楚。首先请澄清您的问题:

  1. 我们说的是MQL5 中 已有的函数吗?
  2. MQL5 的现成 函数集中是否有一个函数,但它不能工作?
  3. 您是否需要某个函数,但 MQL5 的现成函数集中没有该函数?
敬上,弗拉基米尔。
 
MrBrooklin #:

你的问题不清楚。首先,请澄清你的问题:

  1. 我们讨论的是MQL5 中 已有的函数吗?
  2. 现成的 MQL5 中是否有一个函数,但它不能工作?
  3. 您是否需要某个函数,但现成的 MQL5 中没有该函数?
敬上,弗拉基米尔。

后来发现,这是一个用自己的问题污染整个论坛的人。他甚至创建了一个 单独的主题...

 
Alexey Viktorov #:

后来才发现,是其中一个人的问题堵塞了整个论坛。他甚至创建了一个 单独的主题...

你好,阿列克谢,现在一切都清楚了。

再见,弗拉基米尔。