Discusión sobre el artículo "Eventos de Trading en MetaTrader 5" - página 3

 

Renat:
Конечно после принятия сервером - это же очевидно. Кроме того, функция называется OrderSEND.

Vale, ya veo.

En cuanto a la "obviedad" - esto es sobre todo para aquellos que han estado trabajando estrechamente con el sistema durante más de un año. Me tropecé con la cuestión de si la frase del libro de referencia (para la función OrderSend() "en caso de una comprobación básica exitosa de las estructuras, se devuelve true") puede considerarse una condición suficiente para devolver true. Ahora resulta que no: es sólo una condición necesaria, pero no suficiente.

 
Interesting:
En mi opinión, no hay que sacar conclusiones sólo de true, hay que analizar también el código de respuesta del servidor (y esto último es de mayor prioridad, según me parece)...

Sí, estas pocas horas me han hecho sentir como si hubiera caído un velo: no hay ningún código de "comprobación correcta de la estructura base" (llamémoslo así) entre los códigos de retorno en absoluto, y por eso no se puede devolver true inmediatamente después de la comprobación de la base.

En cuanto al análisis detallado del código de retorno, sí, se recomienda en el libro de referencia. Sólo sigo buscando formas de reducir razonablemente el número de comprobaciones disponibles.

 

¿Puede explicar qué significa? ¿La orden ha sido puesta en cola?

La siguiente situación

2011.01.26 12:59:26 Red '716201': conexión con MetaQuotes-Demo perdida
2011.01.26 12:59:26 Operaciones '716201' : fallida compra instantánea 1.00 EURUSD a 1.37136 [Sin conexión]
2011.01.26 12:58:40 Operaciones '716201' : compra instantánea 1.00 EURUSD a 1.37136
2011.01.26 12:56:17 Red '716201': terminal sincronizado con MetaQuotes Software Corp.

trading manual. Pulso Comprar en el mercado sin stops ni TP. Aparece un mensaje, la orden se pone en cola...se corta la conexión...se restablece...la orden no se ejecuta.

¿Qué es esta cola? ¿Dónde se encuentra? Si la orden ya ha sido aceptada por el servidor, ¿por qué no se ejecuta? ¿Por qué?

 
Los enlaces son para el sitio ruso
 
Buen artículo.
 
void CheckStartDateInTradeHistory()
  {
//--- intervalo inicial, como si empezáramos a trabajar ahora mismo
   datetime curr_start=TimeCurrent()-days*PeriodSeconds(PERIOD_D1);
//--- asegúrese de que el límite de inicio de la historia comercial no se ha ido 
//--- más de 1 día sobre la fecha prevista
   if(curr_start-start>PeriodSeconds(PERIOD_D1))
     {
      //--- debemos corregir la fecha de inicio de la historia que se cargará en la caché 
      start=curr_start;
      PrintFormat("New start limit of the trade history to be loaded: start => %s",
                  TimeToString(start));

      //--- ahora carga de nuevo el historial de operaciones para el periodo corregido
      HistorySelect(start,end);

      //--- corrija el número de operaciones y pedidos en el historial para una comparación posterior
      history_orders=HistoryOrdersTotal();
      deals=HistoryOrdersTotal();
     }
  }

¿ves las dos últimas líneas?

deberían ser:

history_orders=HistoryOrdersTotal(); // vale, parece correcto

deals=HistoryDealsTotal(); /¿quizás un error tipográfico?

 

El artículo habla de los eventos de negociación asíncrona, cuando la recepción de un ticket de orden al enviar una petición con la función OrderSend() y la aparición de la orden en el terminal pueden no coincidir en el tiempo. Aquí todo está claro. El otoño pasado se aconsejaba superar esa asincronía durmiéndose tres segundos. Pero, ¿cuál es el tiempo garantizado para que tanto el valor del ticket como el propio pedido aparezcan en el terminal (después de que el servidor acepte el pedido)? Puedo esperar 20 segundos, si es necesario, pero me gustaría saber qué periodo de tiempo está garantizado para asegurar dicha "sincronización manual".

 

Muchas gracias. Esto realmente me ayudó a resolver algunas confusiones.

Saludos,

Umer Aziz