Errores, fallos, preguntas - página 734

 
Vitya:
¿Tal vez, necesitamos PositionTotal()?

¿Y qué tiene que ver con la posición si pregunto a OrdersTotal() cuántos pedidos hay actualmente?

Y esta información la solicito en OnTrade(), no puede faltar el momento en que existe la orden.

Pero, de hecho, resulta que este momento se pierde de todos modos y las solicitudes se procesan cuando el pedido aún no está presente o cuando ya lo está.

Pero el momento en que existe no se detecta en OnTrade(), o bien, el OrdersTotal() miente.

 

Para no quejarse de la imperfección del código, aquí está el código de MetaQuotes con mi mejora del script en el Asesor Experto.

Se ha añadido la función OnTrade() y se ha puesto el código del script en OnInit().

Ni una sola impresión muestra un mensaje de que hay un pedido.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
Archivos adjuntos:
 

Sólo puedo responder a esto con un artículo Eventos comerciales en MetaTrader 5:

Заключение

Todas las operaciones en la plataforma comercial y analítica MetaTrader 5 son asíncronas, y todos los cambios en la cuenta comercial se notifican independientemente unos de otros. Por lo tanto, no debe tratar de seguir un solo evento según la regla "Una solicitud - Un evento comercial". Si queremos determinar exactamente qué ha cambiado después del evento Trade, tenemos que analizar todas las operaciones, posiciones y órdenes en cada llamada del manejador OnTrade y compararlas con el estado que teníamos antes de que apareciera el evento.
Esto significa que la orden que está tratando de capturar, probablemente ya necesita ser buscada usando HistoryOrdersTotal
 
Rosh:

Sólo puedo responder a esto con el artículo Trading Events in MetaTrader 5:

Esto significa que el pedido que está tratando de atrapar probablemente ya debería ser buscado usando HistoryOrdersTotal

Me guío por este artículo. Me gustaría saber la respuesta a la pregunta: ¿cómo es posible que un evento de comercio se pierda en el momento en que se coloca una orden pero aún no se ha ejecutado?

Los eventos comerciales son generados por el servidor en los siguientes casos

  • Cambios en los pedidos activos,
  • cambios de posición,
  • cambios en los oficios,
  • cambios en el historial comercial.

Sospecho que OrderTotal() falla. Pero no puedo probarlo con esta funcionalidad.

Aunque como opción no rechazo que OrderTotal() esté tomando los datos no donde creo que están (es decir, no en el servidor).

 
Urain:

Estoy siguiendo este artículo. Me gustaría encontrar la respuesta a la pregunta: ¿cómo es que un evento de comercio se pierde el momento en que una orden ha sido colocada pero aún no ha sido ejecutada?

Simplemente, cuando llega un evento de Comercio, la orden ya ha sido colocada y ya ha sido ejecutada. Por eso no está en el historial y ya está en vigor.
 
Rosh:
Cuando llegan los eventos comerciales, la orden ya ha sido colocada y ejecutada. Por lo tanto, no se encuentra entre las órdenes activas y ya se ha añadido al historial.

Sí, sí, mis pensamientos flotan alrededor de esta respuesta.

Yo respondería así, en el momento en que se realiza la orden, el servidor genera un evento "trades" y lo envía al terminal, cuando el terminal lo recibe, se hace una petición en el código del número de órdenes, pero cuando esta petición llega al servidor, éste ya ha ejecutado la orden.

No tengo ninguna otra explicación.

 
Urain:

Los eventos comerciales son generados por el servidor en los siguientes casos:

  • Cambio de órdenes activas,
  • cambios de posición,
  • cambios en los oficios,
  • cambios en el historial comercial.

Sospecho que OrderTotal() falla. Pero no puedo probarlo con esta funcionalidad.

¿He entendido bien que la lista de órdenes activas incluye tanto las órdenes pendientes activas como las órdenes para abrir una posición?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

¿Qué significa esto?

Algo así como "No se liberó ninguna parte de la memoria utilizada después de que el programa terminara". En particular, se produce un mensaje similar cuando un programa crea un objeto dinámico utilizando el operador new, pero no lo elimina posteriormenteutilizando el operador delete.
 
papaklass:
... en la pestaña "Expertos" aparece este mensaje. No es un error, es una advertencia. ¿Una advertencia sobre qué?

Bueno, no he dicho "error". Que sea una "advertencia". Ya he dicho mi versión con un ejemplo. Vuelva a mirar la discusión desde aquí (sobre la fuga de línea - lea hasta el final de la página): https://www.mql5.com/ru/forum/1111/page345#comment_54616

Es posible que tengas que acudir al BOD, con los detalles de tu situación.

 

Encontré una "confusión".

¿Por qué al compilador no le gusta la segunda definición de la variable b?

Y en general, ¿cómo puedo manejar esta situación?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  ArrWe m[11]; // тут вместо "11" хочу использовать "a"
  Print("Размер структуры ArrWe ",sizeof(ArrWe));
  Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
  Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);   
  Print("Размер массива из 11 ArrWe ",sizeof(m));
}
Razón de la queja: