Erros, bugs, perguntas - página 1739

 

Compreendo correctamente que a modificação de encomendas através da SB não funcionará numa troca?

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Não está definido.

 
SB em todos os servidores comerciais
//+------------------------------------------------------------------+
//| Get the property value "ORDER_TYPE_FILLING"                      |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
  {
   return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
  }

SEMPRE retornaENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN no testador.

fxsaber:

O enchimento não está definido.

Assim, se definir o preenchimento no OrderModify via COrderInfo::TypeFilling(), então no RoboForexEU-MetaTrader 5 haverá um erro lógico [Unsupported filling mode]. No entanto, este erro não ocorre em MetaQuotes-Demo - servidor do programador configurado erradamente?


 
fxsaber:

Compreendo correctamente que a modificação de encomendas através da SB não funcionará numa troca?

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Não o faz.

Não entrem em pânico!

class CTrade : public CObject
  {
protected:
   MqlTradeRequest   m_request;         // request data
   MqlTradeResult    m_result;          // result data
   MqlTradeCheckResult m_check_result;  // result check data
   bool              m_async_mode;      // trade mode
   ulong             m_magic;           // expert magic number
   ulong             m_deviation;       // deviation default
   ENUM_ORDER_TYPE_FILLING m_type_filling;
   ENUM_ACCOUNT_MARGIN_MODE m_margin_mode;
   //---
   ENUM_LOG_LEVELS   m_log_level;

public:
 
Alexey Kozitsyn:

Não entrem em pânico!

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();

//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }
 
fxsaber:
//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();

//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Espere, porquê especificar o tipo de preenchimento quando se modifica de todo?

A partir da documentação:

Ordem comercial para modificar os níveis StopLoss e/ou TakeProfit. Requer 4 (jamb:)) campos a especificar:

  • acção
  • símbolo
  • sl
  • tp
  • posição
 
Alexey Kozitsyn:

Espere, porquê especificar o tipo de preenchimento quando se modifica de todo?

A partir da documentação:

Não acredite em tudo o que diz. Deve ser especificado. Caso contrário, não funcionará.

Não posso usar SB. Mas pode tentar OrderModify em troca para ter a certeza do bug.

 
fxsaber:

Não acredite em tudo o que está escrito. É OBRIGATÓRIO especificar. Caso contrário, não funcionará.

Concordo plenamente, mas...

Não sei como usar SB. Mas pode tentar OrderModify na troca para ter a certeza do bug.

Mas a MQ até acrescentou um exemplo no doc... Não está aí indicado...

Também existe um consultor especializado que escrevi, que trabalha na troca e utiliza um tal código:

         //--- Модифицируем ордер
         trade.OrderModify( order.Ticket(), order.PriceOpen(), newSl, newTp, order.TypeTime(), 0 );
 
Alexey Kozitsyn:

Mas a MQ até acrescentou um exemplo ao doc... Não indica...

Errado, pessoal. Temos de corrigir tanto o doc como o SB.

Alexey Kozitsyn:

Além disso, há uma EA que escrevi que funciona numa troca e utiliza um tal pedaço de código:

         //--- Модифицируем ордер
         trade.OrderModify( order.Ticket(), order.PriceOpen(), newSl, newTp, order.TypeTime(), 0 );

E no testador?

 
fxsaber:
Errado, pessoal. É necessário corrigir tanto o documento como o SB.
Tente primeiro modificar a ordem na troca e depois fale.
 
fxsaber:

Errado, pessoal. É necessário corrigir tanto o documento como o SB.

E no testador?

Funciona já com os mandados instalados. Não correu no testador.