mql5 - línea vertical después de un tiempo determinado desde la última operación

 

Hola a todos.

Chicos, ¿puede alguien ayudar/sugerir cómo implementar la siguiente idea en MQL5 (acabo de familiarizarme con Metatrader - no estoy escribiendo ningún código todavía).

Algoritmo del código:
1) Se determina la hora de cierre de la última operación y el resultado de la misma.

2) Determina el resultado total del día tras el cierre de la última operación.

3) Según la configuración del indicador, se dibuja una línea vertical en un determinado intervalo en el futuro desde el momento del cierre de la última operación.
Ajustes:
- si el resultado de la última operación es negativo y el resultado del día es negativo, se traza una línea vertical a una distancia de 24 horas (un día) en el futuro.
- si el resultado de la última operación es negativo y el resultado del día es positivo, la línea vertical se dibuja 2 horas en el futuro.
- si el resultado de la última operación es positivo, la línea vertical se dibuja 1 hora en el futuro.

4) La línea permanece en el gráfico incluso después de abrir una nueva operación, pero se mueve después de cerrar una nueva operación según el algoritmo anterior, porque ya una nueva operación fue la última que se cerró.

Nota.
El resultado positivo es un resultado positivo, no importa si la orden se activó o la posición se cerró manualmente. Es decir, más en la balanza.
Un resultado negativo es menos o cero como resultado de un acuerdo.

P.D.

La esencia de este código para mí es acostumbrarse a tomar un descanso después de una operación, y no calentarse demasiado. Me he dado cuenta de que mis pérdidas se deben a que intento recuperar rápidamente las operaciones que no han tenido éxito. Para mí es posible poner una línea manualmente y moverla de acuerdo con esta regla, pero necesito exactamente una variante del programa, porque en el futuro quiero vincular condiciones/filtros adicionales al indicador, es decir, complicar el algoritmo de toma de decisiones.

Gracias de antemano y buena suerte.

 

Como ejemplo.

void moveVLine(string obj_name, datetime obj_time)
{
   int         tm       = PeriodSeconds(PERIOD_D1);
   datetime    next_day = obj_time + tm;
   MqlDateTime tm_str;
   
   TimeToStruct(next_day,tm_str);
   if(tm_str.day_of_week == 6)
   {
      tm *= 3;
      next_day = obj_time + tm;
   }
   ObjectMove(0,obj_name,0,next_day,0);
   
   return;
}
 
Сергей Таболин:

Como ejemplo.

Sergey, ¡gracias!
Te haré saber cómo resulta cuando ejecute tu ejemplo
 
Сергей Таболин:

Como ejemplo.

El ejemplo no compila :(
Según he entendido - el código es un fragmento y es necesario añadir algunos componentes obligatorios (#property, etc.)?
 

He encontrado un indicador similar que simplemente dibuja una línea vertical en un momento determinado - Voy a tratar de usarlo como base, añadiendo los algoritmos necesarios en lugar de tiempo estático predeterminado.
https://www.mql5.com/ru/code/18449

Vertical line
Vertical line
  • www.mql5.com
Индикатор рисует, а затем перемещает нарисованную вертикальную линию (OBJ_VLINE) на заданное время (часы и минуты). Входные параметры: Из параметра "Use only Hours and minutes" используются только часы и минуты.  Вертикальная линии рисуется для текущего дня. Если начинается новый день, то нарисованная линия переносится на этот новый день на...
 
La estupidez.
Hay una fuente (código arriba) que dibuja una línea en una barra en un momento dado. Sólo hay que eliminar el tiempo de los parámetros de entrada y obtener el valor del tiempo del historial de operaciones. Mirando la documentación de las funciones de comercio, sospecho que la verdad está en algún lugar entre las funciones del grupo de Historia... Hasta ahora no veo nada :(
¿Puede alguien ayudarme/decirme cómo obtener los datos de la última operación del historial (momento de cerrar una posición y fijar el resultado de una operación)?
 
renatmt5:
El ejemplo no compila :(
Según he entendido - el código es un fragmento y es necesario añadir algunos componentes obligatorios (#property, etc.)?

Se trata de una función de transferencia de línea vertical. Debe ser llamado desde el código principal si se cumplen ciertas condiciones. Además, la propia línea debe estar ya allí.

 
Сергей Таболин:

Se trata de una función de transferencia de línea vertical. Debe ser llamado desde el código principal si se cumplen ciertas condiciones.

Bien, ¡gracias de nuevo!
 
renatmt5:

Hola a todos.

Chicos, ¿puede alguien ayudar/sugerir cómo implementar la siguiente idea en MQL5 (acabo de familiarizarme con Metatrader - no estoy escribiendo ningún código todavía).

Código del algoritmo:
1) Determina la hora de cierre de la última operación y el resultado de la misma.

2) Determina el resultado total del día tras el último cierre comercial.

3) Según la configuración del indicador se dibuja una línea vertical en un determinado intervalo en el futuro desde el momento del cierre de la última operación.
Configuración:
- si el resultado de la última operación es negativo y el resultado del día es negativo, se dibuja una línea vertical a una distancia de 24 horas (24 horas) en el futuro.
- si el resultado de la última operación es negativo y el resultado del día es positivo, la línea vertical se dibuja 2 horas en el futuro.
- si el resultado de la última operación es positivo, se traza una línea vertical a una distancia de 1 hora en el futuro.

4) La línea permanece en el gráfico incluso después de abrir una nueva operación, pero se desplaza después de cerrar una nueva operación según el algoritmo anterior, ya que la nueva operación ya se ha convertido en la última operación cerrada.

Nota.
Un resultado positivo es una ventaja, independientemente de que la orden se haya activado o de que se haya cerrado una posición manualmente. Es decir, más en la balanza.
Un resultado negativo es menos o cero como resultado de la operación.

P.S>.

La esencia de este código para mí en lo siguiente - para acostumbrarse a hacer una pausa después de las ofertas y no romper una racha caliente. Me he dado cuenta de que mis pérdidas se deben a que intento recuperar rápidamente los tratos fallidos. Para mí es posible poner una línea manualmente y moverla de acuerdo con esta regla, pero necesito exactamente una variante del programa, porque en el futuro quiero vincular condiciones/filtros adicionales al indicador, es decir, complicar el algoritmo de toma de decisiones.

¡Gracias de antemano y buena suerte a todos!

Así que, llamémoslo indicador.

Así que, pongámoslo de esta manera. Definamos que interrogamos el historial de operaciones una vez por minuto. Entonces necesitamos dos parámetros más:

  • ¿tiene en cuenta las últimas operaciones sólo para el símbolo actual (el símbolo sobre el que se está ejecutando el indicador) o para todos?
  • y la contabilidad del número de la revista (¿considerar sólo uno o todos)?


Necesitaré una respuesta de su parte. Intentaré volver a aparecer en este hilo a la hora de comer.

 
Vladimir Karputov:

Un indicador es un indicador.

Así que es así. Definamos que interrogamos el historial de operaciones una vez por minuto. Entonces necesitamos dos parámetros más:

  • ¿tiene en cuenta las últimas operaciones sólo para el símbolo actual (el símbolo sobre el que se está ejecutando el indicador) o para todos?
  • y la contabilidad del número de la revista (¿considerar sólo uno o todos)?


Necesitaré una respuesta de su parte. Intentaré volver a aparecer en este hilo a la hora de comer.

Vladimir, gracias por tomarte el tiempo de hacer mi pregunta. Lo más sencillo posible al principio, ya que espero perfeccionarlo yo mismo a largo plazo, en lugar de detenerlo :)
- sólo en el símbolo actual
- En cuanto al número de la revista, no estoy seguro de qué se trata. ¿Como una especie de identificación? No es importante para mí, para ser honesto. Sólo necesito los datos de una última transacción cerrada

 

Me gustaría aclarar el término "último comercio".

¿Es la última operación del día actual? ¿O durante los últimos N días?