¡Promotores! ¿Acaso pruebas lo que creas? - página 11

 

papaklass, c-4

El modelo de respuesta del servidor existente a través de OnTradeTransaction

me conviene, y funciona en mi EA, PERO

mi primer mensaje fue que no se devolvió ningún mensaje (en absoluto) desde el servidor,

que el trato estaba hecho (la orden se llenó por 1) y el segundo error fue

El segundo error fue que en lugar de una respuesta de que la orden fue colocada una respuesta de que fue parcialmente ejecutada (duplicada).

El problema no fue con el manejador (no tengo ninguna reclamación contra él) sino con las respuestas del servidor (una respuesta no llegó y la otra fue errónea).

El modelo de trabajo con las respuestas del servidor en mi EA NO se basa en la secuencia de las respuestas del servidor, PERO la respuesta debe ser y ser correcta.

Esto es lo que ha pasado (foto del primer post):

El Asesor Experto colocó una orden con un volumen de 3.

La orden fue ejecutada por uno - las respuestas del servidor son correctas.

Entonces el Asesor Experto modificó la orden - la respuesta del servidor es ORDER_STATE_PARTIAL - y la respuesta debería haber sido ORDER_STATE_PLACED.

Luego la orden se ejecutó 1 vez más sin ningún mensaje del servidor.

Un par de días después (imagen de abajo) repetí esta secuencia - el resultado ha cambiado (probablemente los desarrolladores han corregido algo),

Recibí un mensaje de que la transacción se produjo (segundo 21:15:02.232), pero el mensaje sobre la modificación seguía sin ser correcto.

También es muy alarmante que tres respuestas del servidor hayan llegado al mismo tiempo (21:14:53.049).

Está claro que todo funciona en el mismo hilo y que los mensajes se acumulan, pero todavía.... Estoy deteniendo la ejecución del EA,

para recibir mensajes.

 

¡papaklass!

La cuestión es que los programas *.ex5 se ejecutan en un solo hilo, si

habrá muchos manipuladores, será aún peor.

 
papaklass:

Ahora he comprobado específicamente la operación OnTrade y OnTradeTransaction.

Tres manejadores OnTrade o cuatro manejadores OnTradeTransaction se activan en una orden de comercio para abrir una posición de mercado (una orden de mercado). Sólo necesito un manejador OnPositionOpened para disparar.

Para cerrar una posición mediante un stop loss/stake profit, hay 3 manejadores OnTrade o 3 manejadores OnTradeTransaction activados en lugar de un OnPositionClosed. ¡La redundancia es evidente!

Estas múltiples respuestas de los manejadores de eventos existentes (OnTrade/OnTradeTransaction) no dan una respuesta clara a la pregunta: "¿Qué evento comercial ha ocurrido y cuál es el resultado de una operación comercial? Esto nos lleva a preguntarnos: "¿Por qué todo este problema?"

Con este procesamiento redundante de los eventos comerciales, es fácil que se produzcan colisiones de diferentes tipos, lo que dará lugar a errores, especialmente durante el envío masivo de órdenes comerciales por parte de los clientes.

Por lo tanto, lo que ha ocurrido en tu caso o en el de komposter (tiempo de espera) no me sorprende personalmente.

La forma en que se implementan los eventos OnTrade y OnTradeTransaction me recordó un episodio ocurrido hace 20 años... Recuerdo haber leído reseñas de nuevos juegos para Spectrum, sobre todo una memorable, en la que se decía: "... el sonido del juego es bueno, ya que se puede apagar...". Tengo casi la misma actitud con los eventos OnTrade y OnTradeTransaction, son buenos sólo porque no se pueden utilizar.
 
SWA:
La forma en que se implementan los eventos OnTrade y OnTradeTransaction me recordó un episodio de hace 20 años... Recuerdo haber leído reseñas de nuevos juegos para Spectrum, especialmente memorable fue una reseña de un juego, donde se escribía así: "... el sonido del juego es bueno ya que puedes apagarlo...". Tengo más o menos la misma actitud hacia los eventos OnTrade y OnTradeTransaction; son tan buenos como no usarlos.

¡Yo, en cambio, uso (con éxito) estos dos manejadores!

Si, por alguna razón, OnTradeTransaction no funciona, compruebo

en OnTrade - muy conveniente porque OnTradeTransaction,

y luego OnTrade.

 
Mikalas:

¡Yo, en cambio, uso (con éxito) estos dos manejadores!

Si, por alguna razón, OnTradeTransaction no funciona, compruebo

en OnTrade - muy conveniente porque OnTradeTransaction,

y luego OnTrade.

Personalmente creo que esta conveniencia es cuestionable: pérdida de tiempo y sobrecarga del canal cliente-servidor con peticiones de información exacta sobre lo ocurrido en el servidor. Puede darse la situación de que la información que tanto le costó conseguir al servidor ya no esté actualizada ni sea fiable en el momento en que usted la obtenga.
Sería realmente conveniente utilizar estos eventos (al menos para mí) si el Asesor Experto generara una petición al servidor con la frecuencia necesaria para el algoritmo de negociación como esta
bool TradeTransaction(TIME_REQUEST);
bool Trade(TIME_REQUEST);
// где временная метка может принимать значение к примеру TIME_REQUEST=TimeTradeServer или TIME_REQUEST=TimeGMT

Y el servidor respondería inmediatamente a dicha solicitud con información exhaustiva...

Sin embargo, asumiendo que hay "razones objetivas insuperables" que hacen imposible implementar tal conveniencia, me conformo con lo que tengo:)

 

Quién puede hacerlo...:)

Por cierto, descárgate la API de Plaza II del servidor de la bolsa y entenderás de dónde salen las "patas".

 
Mikalas:

¡Por favor, no seas grosero! Por cierto, ¡ya son 10!

Y estás en tu derecho de no leer nada de lo que se escribe aquí.

¿Para qué sirve el tema entonces? ¿Sólo para gritar?

Si crees que hay un error, confírmalo con los registros y el código (nadie descifrará tus imágenes).
Si quieres encontrar una solución fiable, escucha lo que te dicen (abandona el modelo de eventos y analiza el estado actual).

Yo utilizaría OnTradeTransaction uOnTrade sólo para la reacción inmediata al cambio de la situación comercial. Pero todo el procesamiento se colocaría en un manejador, como sugiere Vasiliy(OnRefresh()).

Buena suerte.

 
komposter:

¿Para qué sirve el tema entonces? ¿Sólo para gritar?

Si crees que hay un error, confírmalo con los registros y el código (nadie descifrará tus imágenes).
Si quieres encontrar una solución fiable, escucha lo que te dicen (abandona el modelo de eventos y analiza el estado actual).

Yo utilizaría OnTradeTransaction uOnTrade sólo para la reacción inmediata al cambio de la situación comercial. Pero todo el procesamiento se colocaría en un manejador, como sugirió Vasiliy(OnRefresh()).

Buena suerte.

¡Komposter!

O lees todo lo que has escrito o...

2.Lo que escriba en estas páginas es MI derecho como participante del foro,

y la grosería no es apropiada en ningún caso.

3. Independientemente de cómo se gestione el error, si la respuesta del servidor no es la que debería ser, el resultado será el mismo: ¡ERROR!

4. Es probable que no te estés comerciando a ti mismo.

 
Mikalas:
¡BURNING REMOTE es la respuesta a un ataque descarado! Sea cual sea la pregunta, esa es la respuesta. Podrías haber sido un héroe... ))
 

pronych y ....

1.>> LUCKY REMOTE es la respuesta a un ataque descarado. Sea cual sea la pregunta, esa es la respuesta. >> Podría haber sido un héroe... ))

Probablemente tengas la percepción justa del mundo que te rodea...

2. ¿Sois programadores o sois "escritores"?

3. Que alguien responda a una simple pregunta: ¿Qué debe responder el servidor al comando "Modificar orden"?

4. ¿Por qué la documentación entonces? ¿Artículos? Cierra los ojos y chispea todo lo que quieras. El CLIENTE PAGA de todos modos (¡y él es el que tiene que escurrir el bulto!).

bool CheckMoney()
{
  return(ВАСЯ_ПУПКИН);
}