Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXVIII): Solicitudes comerciales pendientes - Cierre, eliminación y modificación"

 

Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXVIII): Solicitudes comerciales pendientes - Cierre, eliminación y modificación:

Este es el tercer artíclo sobre el concepto de las solicitudes pendientes. En él, terminaremos con la puesta a punto del trabajo con solicitudes comerciales pendientes, creando los métodos para cerrar posiciones, eliminar órdenes pendientes y modificar los parámetros de las posiciones y las órdenes pendientes.

Este es el tercer artíclo sobre el concepto de las solicitudes pendientes. En él, terminaremos con la puesta a punto del concepto propuesto, creando métodos de trabajo con solicitudes pendientes para cerrar posiciones, eliminar órdenes pendientes y modificar órdenes stop, así como cambiar los parámetros de las órdenes pendientes que sean susceptibles de ello.

Asimismo, haremos ciertas adiciones a la clase de orden abstracta. Por algún motivo que desconocemos, hemos omitido el retorno de los valores de dos propiedades de las órdenes y posiciones: el tipo de rellenado de la orden y su tipo de expiración. Así que vamos a añadirlas. El código de todos los métodos comerciales del objeto comercial multiplataforma básico ha sido ligeramente optimizado. No vamos a describir con detalle los cambios, nos limitaremos a exponer un ejemplo sobre alguno de los métodos modificados.

Autor: Artyom Trishkin

 

Hola Artyom, ¿hay alguna razón en particular por la que asignes memoria dinámica a un puntero para realizar el trabajo de abajo?

int CTrading::GetIndexPendingRequestByOrder(const ulong ticket)
  {
   CPendingReq *req=new CPendingReq();
   if(req==NULL)
      return WRONG_VALUE;
   req.SetOrder(ticket);
   this.m_list_request.Sort(SORT_BY_PEND_REQ_TICKET);
   int index=this.m_list_request.Search(req);
   delete req;
   return index;
  }

En mi humilde opinión, creo que el uso de una simple variable local simplificaría el método y eliminaría el código superfluo de gestión de punteros.

int CTrading::GetIndexPendingRequestByOrder(const ulong ticket)
  {
   CPendingReq req;
   req.SetOrder(ticket);
   this.m_list_request.Sort(SORT_BY_PEND_REQ_TICKET);
   int index=this.m_list_request.Search(req);
   return index;
  }

Tengo curiosidad por entender tu razonamiento para elegir el primer enfoque... ¿quizás me estoy perdiendo alguna buena práctica?

/dima

 
ddiall :

Hola Artyom, ¿hay alguna razón en particular por la que asignes memoria dinámica a un puntero para realizar el trabajo que se indica a continuación?

En mi humilde opinión, creo que utilizar una simple variable local simplificaría el método y eliminaría el código superfluo de manejo de punteros.

Tengo curiosidad por entender su razonamiento para elegir el primer enfoque ... tal vez me estoy perdiendo alguna de las mejores prácticas?

/dima

El método Search() funciona con un puntero a un objeto:

 int Search(
   CObject*  element       // muestra 
   ) const 
 
Artyom Trishkin:

El método Search() funciona con un puntero a un objeto:

Ah vale... ¿pero no podrías invocar el método y pasar el puntero de la variable local en su lugar?

int index=this.m_list_request.Search(GetPointer(req));
 
ddiall :

Ah vale... ¿pero no podrías invocar el método y pasar el puntero de la variable local en su lugar?

Se puede hacer de diferentes maneras ... Yo lo he hecho así ... :)

 
Artyom Trishkin:

Se puede hacer de diferentes maneras ... He hecho esto ... :)

Cool, gracias - era sólo para confirmar mi comprensión como todavía estoy leyendo los artículos y el estudio del código ;-)
 
ddiall:
Genial, gracias - era sólo para confirmar mi comprensión ya que todavía estoy leyendo los artículos y estudiando el código ;-)
OK. De nada :)
 
   CEventsCollection*GetObject(void)                                                                     { return &this;