Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXIV): Clase comercial principal - corrección automática de parámetros erróneos"

 

Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXIV): Clase comercial principal - corrección automática de parámetros erróneos:

En el presente artículo, analizaremos el manejador de parámetros erróneos de la orden comercial, mejoraremos la clase comercial básica y también corregiremos el funcionamiento de la clase de eventos comerciales: ahora, todos los eventos comerciales, tanto únicos, como simultáneos en un mismo tick, serán correctamente determinados en los programas.

En general, el asesor debe saber actuar según las circunstancias, y tambien según la lógica establecida de antemano por parte del usuario en cuanto al procesamiento de errores en las órdenes comerciales. De esta forma, dentro de los ajustes, podemos indicar al asesor las acciones a realizar si las órdenes comerciales tienen errores:

  1. En el caso de detectar errores en una orden comercial, solo tenemos que salir del método comercial, proponiendo al usuario crear por sí mismo un manejador de parámetros incorrectos de la orden errónea.
  2. Tras determinar la posibilidad de corregir el valor incorrecto en la orden comercial, se deberá corregir de inmediato el valor y enviar la orden comercial correcta,
  3. o bien, si la situación y la esencia del error obtenido lo demandan, repetir de nuevo la solicitud comercial después de una pausa.

Al procesar un error en los parámetros de la orden comercial, hay varios desenlaces posibles:

  • Que resulte imposible continuar comerciando con el experto hasta que se corrija el problema que origina los errores.
  • Que resulte imposible enviar la orden comercial, teniendo que salir del método comercial.
  • Que se corrijan los valores incorrectos y se envíe a orden comercial corregida.
  • Que se envíe de inmediato la orden comercial con los parámetros iniciales (suponiendo que las condiciones comerciales hayan mejorado).
  • Que se espere la actualización de los datos de las cotizaciones y se envíe la orden comercial con los parámetros inciales.

En esta ocasión, vamos a crear un manejador de errores en las órdenes comerciales que se corresponderá con la funcionalidad enumerada, concretamente, se comprobará el error y su origen, y se retornará el método de procesamiento del error:

  • prohibir la realización de operaciones comerciales,
  • interrumpir la operación comercial,
  • corregir los parámetros erróneos,
  • solicitud comercial con parámetros iniciales,
  • solicitud comercial tras espera (solución temporal),
  • crear una solicitud comercial pendiente (en próximos artículos)

Autor: Artyom Trishkin

 
¿Pueden decirme cómo obtener información sobre una orden perdedora? Como la cantidad de pérdida, número de orden, cantidad de orden, tiempo de apertura, etc.. Gracias.
 
hsyhsy863 :
¿Pueden decirme cómo obtener información sobre una orden perdedora? Como la cantidad de pérdida, número de orden, cantidad de orden, tiempo de apertura, etc.. Gracias.
Aquí puede hacer sus preguntas.
 
Artyom Trishkin:
Aquí puede plantear sus preguntas.
Mi pregunta es, al diseñar un programa de trading automatizado utilizando su programa, necesito cerrar una orden perdedora, ¿cómo puedo obtener el número de orden de la orden perdedora?
 
hsyhsy863 :
Mi pregunta es cuando diseño un programa de trading automatizado usando su programa, necesito cerrar una orden perdedora, ¿cómo obtengo el número de orden de la orden perdedora?

En el asesor.

//--- Obtener una lista de todas las posiciones abiertas
   CArrayObj* list=engine.GetListMarketPosition();
//--- Ordenar la lista por ganancia, teniendo en cuenta la comisión y swap
   list.Sort(SORT_BY_ORDER_PROFIT_FULL);
//--- Obtener el índice de la posición con el menor beneficio (mayor pérdida)
   int index=CSelect::FindOrderMin(list,ORDER_PROP_PROFIT_FULL);
   if(index>WRONG_VALUE)
     {
      //--- Obtener el objeto de posición con la mayor pérdida y cerrar la posición por ticket
      COrder* position=list.At(index);
      if(position!=NULL)
         engine.ClosePosition(position.Ticket());
     }

La librería debe estar conectada de acuerdo con el ejemplo de experto adjunto a este artículo.

 
Artyom Trishkin:

En el asesor.

La biblioteca debe conectarse de acuerdo con el ejemplo experto adjunto a este artículo.

La biblioteca debe conectarse de acuerdo con el ejemplo experto adjunto a este artículo.
 
Hola, cuando estaba diseñando el auto-trading, encontré que cuando OP_BUYSTOP y OP_SELLSTOP se colocan al mismo tiempo, sólo OP_SELLSTOP se coloca pero no OP_BUYSTOP. El enunciado cumple completamente las condiciones de la orden pendiente pero no puede ser pendiente.
 
hsyhsy863 :
Hola, cuando estaba diseñando el auto-trading, encontré que cuando OP_BUYSTOP y OP_SELLSTOP se colocan al mismo tiempo, sólo OP_SELLSTOP se coloca pero no OP_BUYSTOP. El enunciado cumple plenamente las condiciones para las órdenes pendientes, pero las órdenes no pueden estar pendientes.
Proporcione un ejemplo para reproducir este error.
 
Artyom Trishkin:
Proporcione un ejemplo para reproducir este error.
if(datetimeN5!=iTime(NULL,0,0))
if(datetimeN5!=iTime(NULL,0,0))
if(ASWER(Close Position, "Upper Pending Bid")==0) { if(datetimeN5!=iTime(NULL,0,0))
{
Pendiente de compra(0,382,Cerrado); {
datetimeN5 = iTime(NULL,0,0);
}}
if(datetimeN6!=iTime(NULL,0,0))
{
if(ASWER(Cerrar posición, "Pendiente de venta") == 0)
{
Venta Pendiente(0.382,Cerrar Posición);
datetimeN6 = iTime(NULL, 0, 0);

}}

Este es el código fuente para mi compra pendiente y venta pendiente, lógicamente debería haber dos órdenes pendientes al mismo tiempo, pero en realidad sólo hay la orden de venta pendiente.

 
¡¡¡¡Lo siento, problema resuelto, error mío!!!!
 
hsyhsy863:
¡¡¡¡Lo siento, problema resuelto, error mío!!!!
OK