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

 
Alexey Viktorov #:

为什么要在仓位中寻找挂单?

谢谢,我想我明白了。我必须以当前价格建仓,但我下的是挂单,所以没有下单,因为我指定的是当前价格。

我用

   ENUM_ORDER_TYPE order_type= position_buff[i].type==0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;


但我必须

 ENUM_POSITION_TYPE order_type= position_buff[i].type==0 ? POSITION_TYPE_BUY : POSITION_TYPE_SELL;
 

我不明白为什么 PositionOpen 中的 ENUM_ORDER_TYPE 不是ENUM_POSITION_TYPE

//+------------------------------------------------------------------+
//| Open position                                                    |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                          const double price,const double sl,const double tp,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- check
   if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL)
     {
      m_result.retcode=TRADE_RETCODE_INVALID;
      m_result.comment="Invalid order type";
      return(false);
     }
//--- setting request
   m_request.action   =TRADE_ACTION_DEAL;
   m_request.symbol   =symbol;
   m_request.magic    =m_magic;
   m_request.volume   =volume;
   m_request.type     =order_type;
   m_request.price    =price;
   m_request.sl       =sl;
   m_request.tp       =tp;
   m_request.deviation=m_deviation;
//--- check order type
   if(!OrderTypeCheck(symbol))
      return(false);
//--- check filling
   if(!FillingCheck(symbol))
      return(false);
   m_request.comment=comment;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }
 
Mikhail Toptunov ENUM_POSITION_TYPE

因为您不能开仓。

您需要向经纪商服务器发送交易指令以执行交易。

只有当交易被执行时,头寸才被打开。

订单发送成功(10008) 并不保证交易已执行,因此仓位已打开(10009)。


如果发送交易指令(订单)以执行交易操作 TRADE_ACTION_DEAL(即以当前市场价格执行交易),除 10009 之外的任何返回代码(m_result.retcode)都表明交易尚未执行。

为以防万一,也请检查 m_result.deal 票据。

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksandr Slavskii #:

如果发送交易指令(订单)以进行交易操作 TRADE_ACTION_DEAL,即以当前市价进行交易,则除 10009 以外的任何返回代码(m_result.retcode)都将表示交易没有进行。

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

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

 
JRandomTrader #:

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

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

军事业务。订购,收到理解的答复。收到执行的答复,收到他们按订单执行的确认)))))。一切都是人类))))))

 
Valeriy Yastremskiy #:

军务。下令,收到理解的答复。收到执行的答复,收到他们按命令执行的确认)))))一切都是人类)))))))))))))))))))))))))))))

而下一个命令只能在明天下达。谁需要这样的交易?

 

先生们,部长们!)

如何对已下达或已执行的订单 或仓位进行检查?

如果收到代码 10008,我如何进一步跟踪订单或头寸列表中的订单?

为了避免出现代码已收到,但仓位或订单不存在的情况。

//-------------------------------------------------------------------+
void OnTrade()
  {
//--- Фиксируем если позиция открыта
   for(int i=0; i<ArraySize(position_buff); i++)
      if(position_buff[i].timeOp>1)
         if(!match_open_orders(position_buff[i].MagicNumber,position_buff[i].type,position_buff[i].comment)) // проверяю есть ли позиция
           {
            position_buff[i].timeOp= 0;     // Фиксировать время
            Print("Метод OnTrade() по рынку не выполнен. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//
           }
         else
            Print("Метод OnTrade() по рынку выполнен успешно. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//

  }
//--- Соответствие открытых ордеров ---------------------------------+
bool match_open_orders(long magic,int type,string comment)
  {
//---
   for(int i=PositionsTotal()-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);
        }
   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);
        }
   return(false);
  }
 
Mikhail Toptunov 执行的命令 或职位进行检查。

如果收到代码 10008,我如何进一步追踪订单或头寸列表中是否有该订单?

排除代码出现但仓位或订单不存在的选项

尝试使用OnTradeTransaction() 而不是OnTrade()。

 

MetaTrader 5 可在 Windows 7、8 上运行吗?

 
pivomoe #:

MetaTrader 5 可在 Windows 7、8 上运行吗?

可以,但最好使用 64 位操作系统