Duda sobre programacion MT4

Foro para cuestiones generales sobre la plataforma MetaTrader 4.

Duda sobre programacion MT4

Notapor alejo33 » 04 Abr 2011, 17:58

Hola, este es una pregunta algo difícil, bueno, Qué ocurre cuando una operación es cerrada porque há alcanzado su stoploss o su takeprofit?, Qué ocurre con el hilo de de ejecución?, es decir, El EA sede el control de ejecución al servidor inmediatamente para volver a retomar el control cuando llegue un nuevo tick ó sigue ejecutandose en la proxima línea de código.

En otras palabras, solo quiero saber en qué sección del código del EA se produce la interrupción cuando se cierra una operación por sl ó tp.

Mi posible respuesta (Quiero que me lo confirmen o me lo reprueban)
Yo me imagino que cuando llega un nuevo tick, el programa hace los cierres antes de ejecutar la función Start(). Si alguien conocedor del tema me puede contestar se lo agradecería mucho.

Gracias
alejo33
 
Mensajes: 27
Registrado: 22 Mar 2011, 04:03
Karma: 0

Re: Duda sobre programacion MT4

Notapor alejo33 » 05 Abr 2011, 18:49

Hola a todos, voy a reformular la pregunta para hacerla mas sencilla.

Yo quiero asignarle a una variable StopLoss = 50; justo despues de que se cierre una operación que há alcanzado su takeprofit, donde colocaría esa línea de código?

Gracias
alejo33
 
Mensajes: 27
Registrado: 22 Mar 2011, 04:03
Karma: 0

Re: Duda sobre programacion MT4

Notapor FXWizard » 06 Abr 2011, 11:21

Hola alejo33, el problema parece relativamente complicado aunque creo intuir por donde va la solución: crea una variable booleana que supervise si la orden de TP se ha ejecutado. En el momento que así sea, activa el stop loss.

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Re: Duda sobre programacion MT4

Notapor alejo33 » 06 Abr 2011, 17:34

Exactamente Sr. FXWizard, eso es lo que había hecho y funciona perfectamente, yo creé una variable que determina si una operación en particular há alcanzado su TP y su posterior cierre para luego introducir mi SL. Pero, yo quería saber solo por conocimiento general ¿Cúando MQL4 cierra la operación? Creo que lo respuesta puede ser al momento de entrar al EA ó al momento de salirse del EA de cada Tick; yo soy Licenciado en Informática y como verás tengo cierto conocimiento de programación y cuando tengo una duda, me gusta resolverlo.
Por su respuesta deduzco que Ud. tiene también buenos conocimiento de programación.
Saludos
PD Los rusos tienen una manera muy abstracta de ver las cosas.
alejo33
 
Mensajes: 27
Registrado: 22 Mar 2011, 04:03
Karma: 0

Re: Duda sobre programacion MT4

Notapor alejo33 » 06 Abr 2011, 17:38

Si la respuesta que propuse es válida, habrá de determinar si es al comienzo ó al final de la invocación del EA, ya que eso influye muchísimo en el diseño del EA.
alejo33
 
Mensajes: 27
Registrado: 22 Mar 2011, 04:03
Karma: 0

Re: Duda sobre programacion MT4

Notapor FXWizard » 07 Abr 2011, 15:30

Pues aunque no te lo creas tengo conocimientos muy básicos de programación comparado contigo pero sé leer el código y pensar en pseudocódigo que ya es algo. Sobre lo que comentas, a tal nivel de profundidad sobre la ejecución de la orden no llego, pero me imagino que será después de ejecutarse la orden y recibir un tick.

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Re: Duda sobre programacion MT4

Notapor alejo33 » 07 Abr 2011, 16:15

Yo sé programar, pero llevo poco tiempo en esto del Forex, es como si alguien me contrata para crear un programa de cirugía de corazón, estoy raspado porque no sé nada de medicina.
Por eso quería conocer a fondo todo lo referente a la ejecución del los EA para así poder hacer un Strategy Tester lo más exacto posible , porque de lo contrario tendría unos resultados mediocres.
alejo33
 
Mensajes: 27
Registrado: 22 Mar 2011, 04:03
Karma: 0

Re: Duda sobre programacion MT4

Notapor fxranger » 07 Abr 2011, 22:43

Hola el programa se ejecuta la funcion start() todo el tiempo con cada tick asi tengas ardenes abiertas, cerradas, en espera o lo que tu quieras siempre se esta ejecutando pero te dejo aqui el procedimiento de trading.

no se subir las imagenes si me dicen como con gusto te subo los dibujos pero como quiera con esto te podras dar una idea del procedimiento.

Procedimiento de trading

El procedimiento de realización de operaciones es interactivo y se realiza en tiempo real. El diagrama de la (Fig. 66) muestra todos los eventos relacionados con el desempeño de un trade.


Fig. 66. Secuencia de eventos en la toma de un orden

Evento 0. El programa es lanzado para su ejecución en el momento t0.
Evento 1. En el momento t1, el programa ha formado la solicitud de un trade como consecuencia de la ejecución de una función comercial. La solicitud de comercio se pasa al Terminal de Usuario. En ese momento, el programa pasa el control al Terminal de Usuario y la ejecución del programa se detiene (el punto rojo en el diagrama).
Evento 2. El Terminal de Usuario ha recibido el control y la información sobre la solicitud de contenidos. En el período de tiempo comprendido entre T2 y T3, el Terminal de Usuario analiza el contenido de la solicitud y toma una decisión sobre los nuevos acontecimientos.
Evento 3. El Terminal de Usuario ejecuta la decisión tomada (una de dos alternativas).

Alternativa 1. Si la solicitud de trade creada por la ejecución de una funcion de comercio ha resultado ser incorrecta, el control se pasa al programa. En este caso, el próximo evento será del evento 4 (esto puede suceder si, por ejemplo, el programa ha enviado la solicitud para la apertura de un pedido, cuyo valor es superior a la cuenta de capital disponible).
Evento 4. El programa ha recibido el control (el punto verde, momento t4) y puede continuar la ejecución desde el lugar en que la solicitud ha sido previamente formada. En el mismo momento que el programa ha recibido la información acerca de que la orden comercial no ha sido ejecutada, se puede encontrar información sobre la razón por la que la solicitud no se ha ejecutado, mediante el análisis de la código de la devolución del error. A continuación vamos a examinar la cuestión de cómo se hace esto. En este caso, sólo debe tenerse en cuenta que no todas las solicitudes dan como resultado la ejecución de órdenes. En este caso, el programa ha formado una petición incorrecta, lo que se traduce en que el Terminal de Usuario ha rechazado esta solicitud y ha devuelto el control al programa. Los intervalos de tiempo entre t1 - t2 - t3 - t4 son significativamente cortos y no exceden de unos pocos ms en total.
Alternativa 2. Si el programa ha formado una petición de trade correcta, el Terminal de Usuario envía esta petición al servidor; el próximo evento será Evento 5 (el momento de t5) el servidor recibe la solicitud. La conexión entre el Terminal de Usuario y el servidor se establece a través de Internet, por lo que el tiempo empleado en el envío de la solicitud al servidor (intervalo de tiempo entre t3 y t5) es completamente dependiente de la calidad de la conexión. Para una buena calidad de conexión, este período de tiempo puede ser aproximadamente de 5 a 10 ms, mientras que para una mala conexión este tiempo puede ser medido en segundos.

Evento 5. Por el momento t5, el servidor ha recibido la solicitud. El servidor puede ejecutar o rechazar esta solicitud recibida. La decisión sobre la ejecución o el rechazo de la solicitud se hace en el lado del servidor en un plazo determinado de tiempo (en el momento t6). El intervalo de tiempo entre T5 y T6 puede ir desde algunos milisegundos a las decenas de segundos, dependiendo de la situación. En algunos casos, si el servidor funciona en el modo automatizado, no hay movimientos rápidos en el mercado y los demás comerciantes no están muy activos, la solicitud puede ser ejecutada o rechazada dentro de unos pocos milisegundos. En otros casos, si el servidor está sobrecargado debido a la elevada actividad de los comerciantes y si la decisión sobre la ejecución o el rechazo de la solicitud es hecha por un broker humano, el tiempo dedicado por tomar la decisión puede tomarse en consideración las decenas de segundos.
Evento 6. Si no se producen cambios considerables e en el mercado dentro del intervalo de tiempo desde el momento de formar la solicitud por el programa (t1) hasta el momento de la toma de decisión por el servidor (T6), por regla general la solicitud será ejecutada. Si el precio del símbolo ha cambiado en este plazo o el valor de la orden de apertura se excede del capital disponible en la cuenta en el momento de tomar la decisión, u se producen otros obstáculos o impedimentos, entonces el servidor decide rechazar la solicitud.
El rechado de solicitudes de comercio por el servidor es común, aunque ya hayan sido verificadas por el Terminal de Usuario. En general, la mayor parte de los trades que se envian para que sean entregados al servidor, se aceptan para la ejecución por el servidor. Sin embargo, en algunos casos, la solicitud puede ser rechazada, de modo que su programa de aplicación debe ser codificado de tal forma que tenga en cuenta esa posibilidad y funcione correctamente en este tipo de situaciones.
Sea cual sea la decisión (ejecutar / rechazar una petición de comercio, evento 6) que haga el servidor, la información sobre la misma es enviada por el servidor al Terminal de Usuario, que es quién ha entregado la solicitud.
Evento 7. El Terminal de Usuario ha recibido la respuesta del servidor. El servidor responde por el mismo camino por donde se le entregó la solicitud a través de Internet, por lo que el tiempo dedicado a la recepción de la respuesta del servidor depende completamente de la calidad de la conexión. De acuerdo con las modificaciones introducidas en el servidor, el Terminal de Usuario refleja los cambios correspondientes. Por ejemplo, si la ejecución de una petición de comercio ha resultado en el cierre o la apertura de una posición, el Terminal de Usuario mostrará este evento gráficamente en la ventana de símbolo y textualmente en la ventana del Terminal (las pestañas “Operaciones” e “Historial de cuantas”). Si el servidor ha rechazado la solicitud, no se harán cambios en las ventanas de la Terminal de Usuario.
Evento 8. El Terminal de Usuario ha completado la muestra de los cambios y pasa el control al programa.
Evento 9. El programa ha recibido el control y puede seguir funcionando.

Tengase en cuenta que:


Desde el momento en que el programa envía una petición de comercio (y al mismo tiempo pasa el control) al Terminal de Usuario, al momento en que el control se devuelve al programa, éste se encuentra en modo de espera. No se realizan operaciones en el programa durante este periodo de tiempo. El control se devuelve al programa de acuerdo a las reglas de ejecución de llamadas a función que ha formado la solicitud.


Si la solicitud es incorrecta, entonces el programa no estará en modo de espera durante mucho tiempo (el intervalo entre t1 y t4). Sin embargo, si la solicitud es "aprobada" por el Terminal de Usuario y enviada al servidor, la duración del período de espera de programa (t1-t9) puede ser diferente y depende de la calidad de la conexión y del tiempo que el servidor tarde en la toma de decisiones. Este tiempo pude llevar desde milisegundos hasta varios minutos.
Tan pronto como el programa recibe el control, puede seguir funcionando. El programa operativo puede analizar el código del último error devuelto por el Terminal de Usuario y, de esta manera, conocer si la solicitud fue ejecutado o se rechaza.
fxranger
 
Mensajes: 24
Registrado: 06 Abr 2011, 23:47
Karma: 0

Siguiente

Volver a MetaTrader 4

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron