¿Cómo puedo abrir una orden de mercado correctamente? - página 4

 
Gennady Mazur:
Sí, un buen consejo...

Repita

Tenemos que comprobarlos resultados.orden.

Si el pedido se realiza, no significa que el trato ya esté hecho.

Además, también debemos comprobar el estado del pedido y si ya ha aparecido en el historial o no.

La bolsa no funciona con posiciones, sólo con órdenes.

 
Gennady Mazur:

Hace poco planteé un tema sobre la reapertura de pedidos. Pensé que había resuelto el problema, ya que todo funcionó sin problemas durante una semana. Pero hoy me he encontrado con un problema similar sólo al abrir.
Se abrieron muchas órdenes en Finam, y 9 en Otkritie... aunque sólo debería haberse abierto una orden en todos los casos.

Este es un fragmento de código del EA

    

es decir, podemos ver en el código que si la operación tiene éxito, aumenta la variableOpenOrders, que inicialmente es igual a 0

Si es superior a 0, no debe haber más apertura de la orden, sino que toda la pila de órdenes se abre con el comentario Orden1.

Compruebo si hay una respuesta positiva en la función de apertura de la orden y si se ha recibido el ticket de la orden, pero por alguna razón esta función devuelve false, aunque la orden esté realmente establecida.

Explique qué es lo que falla, cómo resolver este problema.

Dígame, ¿para qué mercado está escribiendo este código?
 
prostotrader:
Dígame, ¿para qué mercado está escribiendo este código?
Mercado de valores
 
Gennady Mazur:
Para el corredor de bolsa.
OK, voy a echar un vistazo...
 
Sergey Chalyshev:

Repita

Aparte de eso, también debe comprobar el estado del pedido y si ya ha aparecido en el historial o no.

La bolsa no maneja posiciones, sólo órdenes.

Bueno Sergei, ver....esto es de la documentación del resultado de la consulta

Oferta

Un acuerdo sobre el billete, si se ha ejecutado. Se comunica durante una transacción comercialTRADE_ACTION_DEAL

pedir

Orden de compra de entradas, si se ha realizado una entrada. Notificado durante una operación comercialTRADE_ACTION_PENDING


No tengo una orden pendiente, usoTRADE_ACTION_DEAL

Debe estar trabajando con limitadores, entonces todo es correcto.... y aquí está la entrada del mercado al precio actual.
 
Gennady Mazur:

Bueno Sergei, ver....esto es de la documentación del resultado de la consulta

acuerdo

Oferta de entradas, si la hay. Se debe informar sobre una operaciónTRADE_ACTION_DEAL

pedir

Orden de compra de entradas, si se ha realizado una entrada. Notificado durante una operación comercialTRADE_ACTION_PENDING


No tengo una orden pendiente, usoTRADE_ACTION_DEAL

Debes trabajar con limitadores, entonces todo es correcto.... y aquí estás entrando desde el mercado al precio actual.
Vuelve a leer mi respuesta o escribe a servicedesk.
 
Vladimir Karputov:

SetTypeFilling

SetTypeFilling

Establece el tipo de pedido al rellenar


Usted establece lo que considere oportuno.

Por cierto, acabo de comprobar los resultados del envío del pedido con las impresiones

por lo que el billete da 0 en todos los casos

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);
 
Gennady Mazur:

Por cierto, acabo de comprobar los resultados de enviar un pedido con las impresiones

El billete muestra 0 en todos los casos

Se han hecho progresos... ))



 
Gennady Mazur:

Por cierto, acabo de comprobar con la imprenta los resultados del envío del pedido

por lo que el billete da 0 en todos los casos

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);

¿Dónde están los códigos de devolución? ¿Cómo puedo saber si hubo un error o no?

Te puse un ejemplo: la doble protección y la salida del ticket y el código de retorno.

 

No he podido encontrar un ejemplo. Permítanme decirlo de esta manera.

Cuando usted envía una orden a través del mercado, la orden debería ejecutarse o ser rechazada (ya que tiene un relleno FOK).

Por lo tanto, no es necesario esperar un billete, sino conseguir un TICKET.

Una vez que se recibe un ticket, se "pasa" a OnTradeTransaction() con el ticket

se escucha TRADE_TRANSACTION_HISTORY_ADD porque las órdenes de mercado siempre llegan al historial

y mirar el ticket para ver qué ha pasado con el pedido.