Pregunta sobre la función OnTradeTransaction - página 4

 
Mikalas:

Eso es porque la bolsa no tiene cocina (sólo comisiones) y FOREX tiene millones de seguidores de MMM,

puede haber 100 dólares, pero TODOS los tienen. Un dinero enorme, ¡hay algo que contar! :)

No entiendo a MetaQuotes )

Para las cocinas de Forex hay un gran terminal MT4.

Muchas cocinas de forex nunca dan acceso a través de MT5, no lo necesitan por cojones.

¿Es imposible durante tantos años hacer una terminal cerca de los intercambios?

Si tienen un buen terminal, tendrán muchos clientes que quieran prestar servicios de MT5.

 
Serj_Che:

No entiendo a MetaQuotes )

Para las cocinas de Forex hay un gran terminal MT4.

Muchas cocinas de forex nunca dan acceso a través de MT5, no lo necesitan por cojones.

¿Es imposible durante tantos años hacer una terminal cerca de los intercambios?

Si tenemos un buen terminal, habrá muchos clientes que quieran prestar servicios de MT5.

No se trata de MQ, sino de los corredores.

Los corredores se benefician de que los clientes realicen operaciones: más operaciones, más comisiones.

El robot sólo hará "operaciones correctas", y al colocar las órdenes "a mano" la gente está muy

El robot sólo hará tratos "correctos" y al hacer un pedido a mano la gente se equivoca muy a menudo (yo mismo he cometido este error muchas veces),

Te pillan, juras, cierras la orden con pérdidas, quieres recuperarla, la has vuelto a poner mal, etc.

Y el corredor y la bolsa se llevan una comisión :)

Por lo tanto, para la bolsa y especialmente para el corredor QUIK es la patria.

 
Mikalas:

Vasily, ¿habrá una respuesta?

No lo creo.

¿He ganado?

Te daré una respuesta esta noche. Ahora mismo no puedo.
 
C-4:

No complique las cosas. No es necesario utilizar la asincronía para operar en FORTS. Para empezar, echa un vistazo a este artículo, capítulo 3: "Los fundamentos de las operaciones asíncronas". No es mucho, es muy básico, pero es suficiente para empezar a estudiarlo. El código descrito ahí es 100% asíncrono, sin embargo eso no impide que funcione en modo síncrono sin recibir todo tipo de eventos OnTradeTransaction y otros.

La solución debe basarse en su tarea. En MetaTrader 5, sólo tiene una posición activa en cualquier momento, así que tenga cuidado. No es necesario consultar el historial de pedidos. Si todavía necesita el historial de pedidos, debería aclarar su objetivo.

No, Vasily, no has entendido bien mi objetivo. No voy a escribir nada ni a operar en FORTS, acabo de empezar a aprender mql5. Empecé a leer este artículo antes. Pero no he leído más de 2 páginas y me he rendido. No creo que lo necesite, yo mismo soy un NT. Pero es útil una explicación clara de la diferencia entre OrderSend y OrderSendAsync. Eso es más o menos lo que esperaba.

Si omitimos el envío asíncrono de órdenes y utilizamos OnTradeTransaction para seguir lo que ocurre en la cuenta, ¿no mejoraría esto el rendimiento del EA?

Una cosa es realizar una comprobación en cada tic, y otra muy distinta es comprobar sólo si hubo algún cambio en la cuenta. ¿Me equivoco? La orden pendiente fue activada, tenemos información sobre ella. Una posición está cerrada, podemos analizar el resultado de su cierre. Sólo hay unos pocos controles durante el tiempo que transcurre entre la apertura y el cierre de una posición. Y en cambio, hay controles en cada tic...

Aquí hay otra pregunta: Para determinar el beneficio de una posición, existe la función PositionGetDouble(POSITION_PROFIT), pero para determinar el beneficio de una posición cerrada, sólo OrderCalcProfit() tiene un montón de parámetros que deben obtenerse primero de esta operación. ¿O tal vez soy tan nuevo en mql5 que no puedo encontrar una solución adecuada?

Si no te importa...

 
AlexeyVik:

No, Vasily, has entendido mal mi objetivo. No voy a escribir nada ni a operar en FORTS todavía, acabo de empezar a aprender mql5. Empecé a leer este artículo antes. Pero no he leído más de 2 páginas y me he rendido. No creo que lo necesite, yo mismo soy un NT. Pero es útil una explicación clara de la diferencia entre OrderSend y OrderSendAsync. Eso es más o menos lo que esperaba.

Si descartamos el envío asíncrono de órdenes y seguimos utilizando OnTradeTransaction para seguir lo que ocurre en la cuenta, ¿no mejorará el rendimiento del EA?

Una cosa es realizar una comprobación en cada tic, y otra muy distinta es comprobar sólo si hay algún cambio en la cuenta. ¿Me equivoco? La orden pendiente fue activada, tenemos información sobre ella. Una posición está cerrada, podemos analizar el resultado de su cierre. Sólo hay unos pocos controles durante el tiempo que transcurre entre la apertura y el cierre de una posición. Y en cambio, hay controles en cada tic...

Aquí hay otra pregunta: Para determinar el beneficio de una posición, existe la función PositionGetDouble(POSITION_PROFIT), pero para determinar el beneficio de una posición cerrada, sólo OrderCalcProfit() tiene un montón de parámetros que deben obtenerse primero de esta operación. ¿O tal vez soy tan nuevo en mql5 que no puedo encontrar una solución adecuada?

Si no es mucha molestia...

OrderCalcProfit no ayudará.

Hay que calcular el precio medio de todas las órdenes (in) y el precio medio de todas las órdenes (out),

entonces se puede calcular el beneficio de una posición cerrada.

Tendremos que buscar en la historia.

 
Mikalas:

OrderCalcProfit no ayudará.

Hay que calcular el precio medio de todas las órdenes (in) y el precio medio de todas las órdenes (out),

Entonces podemos calcular el beneficio de una posición cerrada.

Tendremos que investigar la historia.

En principio, lo entiendo (aunque aún no entiendo cómo hacerlo), pero en este caso, sólo me importa la última posición cerrada. Al parecer, esto es más adecuado para el caso en el que se cubrió el puesto. Pero mi tarea es diferente.

He decidido reescribir mis búhos mql5 con martin. Está en el mercado continuamente y abre la siguiente operación hacia la última posición...

Oops... así de útil es la comunicación en el foro. Al fin y al cabo, si la posición sólo puede invertirse cuando se activa la orden pendiente, o cerrarse en la toma, no me importa el tamaño de la ganancia o la pérdida. Bueno, si la última rodilla dará un punto negativo, entonces no necesitarás nada... Basta con saber el tipo de posición cerrada... Y esto se puede escribir en la variable de nivel global en el manejador OnTradeTransaction con el tipo de transacción TRADE_TRANSACTION_DEAL_ADD y con el tipo de transacción TRADE_TRANSACTION_HISTORY_ADD o con la condición de que PositionsTotal sea igual a cero para poner la siguiente primera orden de la serie... Me lo he apuntado para no olvidarlo :)))



 
papaklass:

...Es decir, la lógica de su algoritmo debe basarse en el CAMBIO DEL ENTORNO DE NEGOCIACIÓN, y no en el procesamiento de cualquier función o evento.

3 La frecuencia de comprobación del entorno comercial (en el tic, en la barra, en el temporizador, etc.) debe corresponder a la lógica de su ST. Es decir, ¿con qué rapidez debe procesarse el cambio de entorno comercial? Si la lógica de su ST requiere que se procese el cambio lo más rápido posible, entonces no podrá evitar comprobarlo en cada tic...

¿Y si su EA es multidivisa?
 
papaklass:

1. La función OrderSendAsync() se utiliza cuando hay que enviar varios pedidos a la vez, una especie de envío por lotes. Con el envío por lotes, si se espera a que el servidor responda a cada pedido (utilizando la función OrderSend()), habrá un retraso total significativo en el envío de todo el lote. Durante este lapso de tiempo, el mercado puede cambiar significativamente. Para evitar este retraso, hemos introducido la función OrderSendAsync(). Deberías entenderlo claramente.

Si no necesita enviar pedidos por lotes, no tiene sentido utilizar la función OrderSendAsync().

La forma más fiable de determinar si una orden, un pedido, etc. se ha activado, es supervisar su entorno de negociación. - es el seguimiento de su entorno comercial, no la activación de ninguna función o evento. Una función o un evento pueden funcionar, pero eso no cambia necesariamente su entorno comercial. ¿Por qué? Porque un error puede ocurrir simplemente durante la ejecución de la función.

Por lo tanto, la lógica de su algoritmo debe basarse en el CAMBIO DE VARIABLE, pero no en el procesamiento de cualquier función o evento.

3. la frecuencia de comprobación del entorno comercial (en un tick, en una barra, por temporizador, etc.) debe ajustarse a la lógica de su ST. Es decir, ¿con qué rapidez hay que procesar los cambios del entorno comercial? Si la lógica de su ST requiere procesar un cambio lo más rápidamente posible, entonces no puede evitar comprobarlo en cada tic.

Alexander, gracias por tu comentario.

Lo entiendo sólo para comprender que no lo necesito hasta ahora. Por ahora la función OrderSend es suficiente para mí.

2. Sí, estoy de acuerdo en que el estado más exacto sólo puede determinarse controlando todo el entorno en cada momento. Pero tener un manejador de eventos así para ignorarlo... Bueno, sólo estoy experimentando. Comprendo perfectamente su deseo de ayudarme a hacerlo de alguna manera más fiable, pero mi objetivo es diferente. No necesito este Asesor Experto con urgencia, y no lo estoy escribiendo por encargo.

3. Quizás en la versión final del EA vuelva a probar en cada tick, pero por ahora...

La pregunta era si podíamos confiar en el manejador de eventos OnTradeTransaction si la documentación nos advierte de ello

Además, las transacciones pueden perderse en la entrega del servidor al terminal.

Y en qué casos es mejor no confiar, y en qué casos hay que respaldarlo con algo.

Estoy muy agradecido a todos, a Vasiliy, a Michael y a ti Alexander. Me alegraré mucho y le agradeceré de nuevo si comparte alguna otra idea.

 
papaklass:

Esta es la misma pregunta a la que hemos respondido tanto Vasily como yo.

Piénsalo, si el trabajo de la función OnTradeTransaction () debe ser comprobado igualmente, puede ser mejor comprobar el entorno de la negociación de inmediato en lugar de después de que OnTradeTransaction() haya sido procesado. Sin embargo, es una cuestión de gustos.

Y en el siguiente hilo Renat prometió trabajar con la función y quizás en las próximas builds tengamos una mejora de esta función.

Pero aún así, nos centramos en la colocación asíncrona de pedidos. En este caso, no tenemos ninguna razón para perder un pedido entre cientos de ellos. Y sin embargo, Mikhail dijo que en seis meses con un número increíblemente grande de pedidos no había perdido ni una sola transacción. ¿Y cuál es la probabilidad de perder una transacción si la orden se realiza mediante la función OrderSend()?

Y si la mejora se produce, es una razón más para preocuparse por ella. ¿O me equivoco de nuevo?

 
denkir:
А если советник мультивалютный?


papaklass:

No está claro lo que quieres que diga.

Un argumento contra el modelo de eventos...
Razón de la queja: