Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1930

 
Valeriy Yastremskiy #:

No entiendo nada de la lógica. Se supervisan los eventos de apertura de posiciones, modificación de SL y cierre de posiciones en varios símbolos. Apertura de posiciones - busca si una ventana con el símbolo dado está abierta (busca el id de la ventana), si está abierta, entonces dibujamos niveles y luego monitoreamos el arrastre de SL. Si no es así, o bien abrimos una ventana con el símbolo y el marco temporal necesarios y dibujamos los niveles o no la abrimos. El evento de modificación, encuentra la ventana de símbolos requerida, los niveles ya han sido dibujados y cambia el color del nivel o lo elimina y dibuja el nivel de nuevo.

Generalmente, para excluir la influencia del cliente, al principio del trabajo debemos analizar las posiciones y las ventanas y abrir las ventanas para los símbolos con posiciones abiertas y no abiertas.

Lo importante en todo esto es un algoritmo de arrastre que funcione correctamente, es decir, las propias operaciones comerciales.

El dibujo está en segundo plano, es informativo y no tiene nada que ver con la rentabilidad del sistema.

Por lo tanto, si hay una posición pero el gráfico está cerrado y no se cerró por sí mismo, no es necesario abrir nada, el algoritmo de arrastre funcionará y las paradas se desplazarán. Una situación mucho peor es cuando el gráfico está obviamente cerrado, pero el programa lo ha abierto de nuevo literalmente para dibujar el gráfico - esto ya es malo.

 

Colegas: he exportado un archivo de caché de optimización a la nube, ¿cómo lo utilizo en otro ordenador para seleccionar una variante para pujar?


Respuesta:

Si alguien lo necesita - aquí.


Оптимизация стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Оптимизация стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
Vitaly Muzichenko #:

Lo importante en todo esto es un algoritmo de arrastre que funcione correctamente, es decir, las propias operaciones.

El dibujo está en segundo plano, es informativo y no tiene nada que ver con la rentabilidad del sistema.

Por lo tanto, si hay una posición pero el gráfico está cerrado y no se cerró por sí mismo, no es necesario abrir nada, el algoritmo de arrastre funcionará y las paradas se desplazarán. Es mucho peor, cuando el gráfico está cerrado, pero el programa lo ha abierto de nuevo literalmente para dibujar el gráfico - esto ya es malo.

También podemos hacerlo así. Pero en este caso, si hay un gráfico abierto basado en el evento, se puede dibujar. En general, podemos redibujar los niveles cada vez para evitar confusiones. Tenemos todos los datos para ello. El nivel de activación de la red de arrastre, el paso de la red de arrastre, el precio de la posición. El número de niveles y el número de niveles activados para la posición se calculan fácilmente.

 
Valeriy Yastremskiy #:

Esto también es posible. Pero entonces dibujamos si hay un gráfico abierto para el evento. En general, los niveles pueden ser redibujados cada vez para evitar confusiones. Tenemos todos los datos para ello. Nivel de activación de la red de arrastre, paso de la red de arrastre, precio de la posición. El número de niveles y el número de niveles activados para una posición se calculan fácilmente.

Yo diría que si hay una posición, deberíamos trazar niveles por adelantado que desencadenen un arrastre. Si aparece una posición adicional, redibuje las líneas a los nuevos niveles también hacia adelante.

No veo el sentido de cambiar el color después de pasar/modificar. Después de cerrar las posiciones se pueden borrar todas las líneas.

En el ejemplo se muestra cómo debe ser

Aquí se dibujan los objetos donde se abrirán las posiciones, es sólo informativo, eso es todo


---

P.D. Por el momento no puedo hacer las cuentas, lamentablemente

 

Pregunta sobre OnTimer

Si el evento del temporizador se produce antes de la ejecución del programa, ¿se esperará (el programa se saltará el evento del temporizador), o el programa se abortará, y comenzará a trabajar en el nuevo evento del temporizador? ¿Se quedará en un bucle interminable, o volverá a repetirse cada segundo?

int OnInit()
{
 EventSetTimer(1);
      
    }
//---
  return(INIT_SUCCEEDED);
}

void OnTimer()
{
  
  int i=0;
  while(i<1) {
   
  }
}

No hay ninguna indicación directa en los documentos sobre la prioridad del evento del temporizador y el curso del programa, sólo sobre el orden de los eventos.

O quizás no lo he entendido bien. ¿El evento del temporizador en el que se inició la acción cuenta como si estuviera en la cola?

Muelles:

EventSetTimer

No se puede iniciar más de un evento de temporizador por cada programa. Cada programa mql4 y cada gráfico tiene su propia cola de eventos, donde se almacenan todos los eventos recién llegados. Si ya hay un evento de Temporizador en la cola o este evento está en estado de procesamiento, no se coloca un nuevo evento de Temporizador en la cola de mql4-program.


 
Valeriy Yastremskiy ejecución del programa, ¿se esperará (el programa se saltará el evento del temporizador), o el programa se abortará, y comenzará a trabajar en el nuevo evento del temporizador? ¿Se quedará en un bucle interminable, o volverá a repetirse cada segundo?

No hay ninguna indicación directa en los documentos sobre la prioridad del evento del temporizador y el curso del programa, sólo sobre el orden de los eventos.

O quizás no lo he entendido bien. ¿El evento del temporizador en el que se inició la acción cuenta como si estuviera en la cola?

Muelles:

EventSetTimer

No se puede iniciar más de un evento de temporizador por cada programa. Cada programa mql4 y cada gráfico tiene su propia cola de eventos, donde se almacenan todos los eventos recién llegados. Si ya hay un evento en la cola del Tempor izador, o si este evento está en estado de procesamiento, no se coloca un nuevo evento del Temporizador en la cola del programa mql4.


Los eventos NO SON HORARIOS. Se manejan en OnXXX uno por uno, sin interrumpir ninguna de las funciones.

Hasta que OnInit termine ningún otro manejador OnTimer OnTick será llamado por la terminal. (A no ser que la arranques tú mismo como función).

 
Maxim Kuznetsov #:

Los eventos NO son interrupciones. Se procesan en OnXXX uno por uno, sin interrumpir las funciones de texto.

Hasta que OnInit termine ningún otro manejador OnTimer OnTick será llamado por la terminal. (A no ser que la arranques tú mismo como función).

Gracias)

 
Vitaly Muzichenko #:

Lo importante en todo esto es un algoritmo de arrastre que funcione correctamente, es decir, las propias operaciones.

El dibujo está en segundo plano, es informativo y no tiene nada que ver con la rentabilidad del sistema.

Por lo tanto, si hay una posición pero el gráfico está cerrado y no se cerró por sí mismo, no es necesario abrir nada, el algoritmo de arrastre funcionará y las paradas se desplazarán. Es mucho peor, cuando se cierra un gráfico, pero el programa lo ha abierto de nuevo literalmente para dibujar un gráfico - eso es malo.

Dios mío, ¿por qué te han enviado al lavadero de coches? ¿Has escrito en un lugar equivocado y con variables equivocadas: z o v...?

 
Hola! Si alguien no es muy difícil por favor escriba o ayúdeme a escribir una función para un EA de MT4. La idea es que si cambio manualmente una posición abierta o una orden de mercado, el EA envíe un mensaje al correo electrónico. Por ejemplo: he movido el stop loss de una orden abierta de Límite, el EA escribirá un correo electrónico diciendo que el stop loss de esa orden ha cambiado de tal a cual.
 
Vitaly Muzichenko #:


Parece que debería funcionar. No lo he probado.

Lógica del dibujo. No controlo los niveles, dibujo de nuevo y por debajo del precio, si en Compra dibujo en gris, por encima en azul, en Venta, si por encima del nivel de precio, es gris, por debajo en rojo.

Sí, me olvidé de establecer la eliminación de los niveles)))

Archivos adjuntos: