Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1453

 
Alexey Viktorov #:

Por que você está procurando uma ordem pendente entre as posições?

Obrigado, acho que descobri o problema. Eu tinha que abrir uma posição ao preço atual, mas estava colocando ordens pendentes, de modo que elas não foram colocadas porque eu especifiquei o preço atual.

Eu usei

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


mas tive que usar

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

Não entendo por que ENUM_ORDER_TYPE e não ENUM_POSITION_TYPE em PositionOpen?

//+------------------------------------------------------------------+
//| 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 em PositionOpen?

Porque você não pode abrir uma posição.

Você envia uma ordem de negociação para o servidor da corretora para executar uma negociação.

Uma posição é aberta somente se a negociação tiver sido executada.

O fato de a ordem ter sido enviada com sucesso(10008) não garante que uma negociação tenha sido executada e, portanto, uma posição seja aberta(10009).


Se você enviar uma ordem de negociação (ordem) para executar uma operação de negociação TRADE_ACTION_DEAL - ou seja, para executar uma negociação ao preço de mercado atual, qualquer código de retorno (m_result.retcode) diferente de 10009 indicará que a negociação não foi executada.

Por precaução, verifique também o ticket m_result.deal.

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

Se você enviar uma ordem de negociação (ordem) para fazer uma operação de negociação TRADE_ACTION_DEAL - ou seja, para fazer uma negociação ao preço de mercado atual, qualquer código de retorno (m_result.retcode) diferente de 10009 indicará que a negociação não foi realizada.

Infelizmente, não é bem assim. Já mostrei aqui como obtive o código 10012, ticket de ordem zero, mas a ordem foi executada. Os MQs não falam sobre esse assunto.

Escrevi uma muleta para isso, mas só será possível verificá-la depois de receber o 10012 novamente).

 
JRandomTrader #:

Infelizmente, não é bem assim. Já mostrei aqui como recebi o código 10012, ticket de ordem zero, mas a ordem foi executada. A MQ não se manifesta sobre esse assunto.

Escrevi uma muleta para isso, mas só será possível verificá-la depois de receber o 10012 novamente).

Negócios militares. pedido, recebi uma resposta como entendido. recebi uma resposta como executado, recebi a confirmação de que eles executaram como pedido))))) Tudo é humano))))))

 
Valeriy Yastremskiy #:

negócios militares. ordenou, recebeu uma resposta como entendido. recebeu uma resposta como executado, recebeu a confirmação de que eles executaram como ordenado))))) Tudo é humano)))))))))))))))))))))))))))))

E a próxima ordem só pode ser dada amanhã. Quem precisa de um negócio assim?

 

senhores, ministros!)

Como posso organizar uma verificação de uma ordem ou posição que foi colocada ou executada?

Se o código 10008 for recebido, como posso rastrear se a ordem foi colocada na lista de ordens ou posições?

Para excluir a opção de que o código foi recebido, mas a posição ou ordem não está lá.

//-------------------------------------------------------------------+
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 ordem ou posição emitida ou executada.

Se o código 10008 for recebido, como posso rastrear se exatamente essa ordem foi colocada na lista de ordens ou posições?

Para excluir a opção de que o código foi recebido, mas a posição ou ordem não está lá

Tente usar OnTradeTransaction () em vez de OnTrade( ).

 

O MetaTrader 5 funciona no Windows 7,8?

 
pivomoe #:

O MetaTrader 5 funciona no Windows 7,8?

Funciona, mas é melhor ter um sistema operacional de 64 bits