Errori, bug, domande - pagina 1739

 

Ho capito bene che la modifica degli ordini tramite SB non funziona in uno scambio?

//+------------------------------------------------------------------+
//| 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));
  }

Non è impostato.

 
SB su tutti i server di trading
//+------------------------------------------------------------------+
//| Get the property value "ORDER_TYPE_FILLING"                      |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
  {
   return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
  }

Restituisce SEMPREENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN nel tester.

fxsaber:

Il ripieno non è impostato.

Quindi se impostate il riempimento in OrderModify tramite COrderInfo::TypeFilling(), su RoboForexEU-MetaTrader 5 ci sarà un errore logico [Unsupported filling mode]. Tuttavia, questo errore non si verifica in MetaQuotes-Demo - server dello sviluppatore configurato male?


 
fxsaber:

Ho capito bene che la modifica degli ordini tramite SB non funziona in uno scambio?

//+------------------------------------------------------------------+
//| 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));
  }

Non lo fa.

Non fatevi prendere dal panico!

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:

Niente panico!

//+------------------------------------------------------------------+
//| 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));
  }

Aspetta, perché specificare il tipo di riempimento quando si modifica?

Dalla documentazione:

Ordine di trading per modificare i livelli di StopLoss e/o TakeProfit. Richiede 4 campi (stipite:)) da specificare:

  • azione
  • simbolo
  • sl
  • tp
  • posizione
 
Alexey Kozitsyn:

Aspetta, perché specificare il tipo di riempimento quando si modifica?

Dalla documentazione:

Non credere a tutto quello che dice. Deve essere specificato. Altrimenti non funzionerà.

Non posso usare SB. Ma puoi provare OrderModify su exchange per essere sicuro del bug.

 
fxsaber:

Non credete a tutto ciò che è scritto. Si DEVE specificare. Altrimenti non funzionerà.

Sono completamente d'accordo, ma...

Non so come usare SB. Ma puoi provare OrderModify sullo scambio per assicurarti del bug.

Ma MQ ha anche aggiunto un esempio nel documento... Non è indicato lì...

C'è anche un Expert Advisor che ho scritto, che funziona sulla borsa e usa un tale pezzo di codice:

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

Ma MQ ha anche aggiunto un esempio al documento... Non specifica...

Sbagliato, gente. Dobbiamo correggere sia doc che SB.

Alexey Kozitsyn:

Inoltre, c'è un EA che ho scritto che funziona su una borsa e usa un tale pezzo di codice:

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

E nel tester?

 
fxsaber:
Sbagliato, gente. Dovete correggere sia il doc che il SB.
Prova a modificare prima l'ordine sullo scambio e poi parla.
 
fxsaber:

Sbagliato, gente. Dovete correggere sia il doc che il SB.

E nel tester?

Funziona già con i mandati installati. Non ha corso nel tester.