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

 
renatmt5:
He entendido correctamente que las variables last_time y result son los valores que buscamos. El resultado determina en cuánto tiempo se desplazará (redibujará) la línea hacia el futuro. A continuación, el bloque de código "Beneficio del periodo" debe colocarse antes del bloque "Mover la línea vertical" para mover la línea teniendo en cuenta los datos obtenidos de la última operación.
¿Es esto correcto o estoy confundiendo algo?

Son variables internas de la función LastProfitForPeriod.

Queremos obtener el valor del beneficio de la última operación, ¿verdad? Aquí LastProfitForPeriod() nos da el beneficio de la última operación. Sólo queda mover la línea vertical en función de estos beneficios.

 
Vladimir Karputov:

Por lo tanto, el toque final es mover la línea en función del beneficio obtenido.

¿Recuerdas cuáles son las reglas de la mudanza?

oops, lo siento - sólo para aclarar:

- si el resultado de la última operación es negativo y el resultado del día es negativo, la línea vertical se dibuja 24 horas (24 horas) en el futuro.
- si el resultado de la última transacción es negativo y el resultado del día es positivo, la línea vertical se dibuja a una distancia de 2 horas en el futuro.
- si el resultado de la última transacción es positivo, la línea vertical se dibuja a una distancia de 1 hora en el futuro.

 
Vladimir Karputov:

Aquí se explica por qué el parámetro "antes" debe hacerse en el futuro:


Gracias.

 

Las condiciones exigen el resultado del día en que se realizó la última transacción (si hubo varias transacciones en ese día)

 
renatmt5:

Oops, lo siento - sólo para aclarar:

- si el resultado de la última operación es negativo y el resultado del día es negativo, la línea vertical se dibuja 24 horas (un día) en el futuro.
- si el resultado de la última transacción es negativo y el resultado del día es positivo, la línea vertical se dibuja a una distancia de 2 horas en el futuro.
- si el resultado de la última transacción es positivo, la línea vertical se dibuja a una distancia de 1 hora en el futuro.

Ah, así que también tenemos que obtener el beneficio para el día actual por separado.


Para hacer correcciones en LastProfitForPeriod() - eliminamos los parámetros de tiempo de entrada "desde" y "hasta" y formamos estos parámetros dentro de la función: formamos la hora de inicio del día (será "desde"), y "hasta" obtenemos la hora actual + el día.


Como resultado, pasaremos dos parámetros a LastProfitForPeriod() por referencia: el beneficio del día y el beneficio de la última operación.


El inicio del día se obtiene coniTime

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- es decir, es la hora de apertura de la barra diaria actual.

Archivos adjuntos:
 

Compilado - ¡genial!
Sólo hay unos pocos problemas:
1) Al imponer el indicador, el valor de la variable Beneficio último día no se asigna al último día de la última operación, sino al beneficio final de la cuenta en general. Sin embargo, al recalcular el indicador (en unos 1-2 minutos) el valor cambia al correcto (el beneficio total del día de la última operación). Sólo estoy juzgando por la cuenta donde la última operación fue hoy.
2) Al eliminar el indicador del gráfico, el comentario de la esquina superior izquierda no se elimina. Al borrar la lista de objetos tampoco se borran. Reinicio el terminal para que desaparezcan los valores, lo cual no es conveniente, claro. Cómo hacerlo más fácil - no lo sé :)

Tal vez, sería más razonable colocar los bloques con el código de creación de líneas, movimiento de líneas y eliminación de líneas (Crear la línea vertical, Mover la línea vertical y Eliminar la línea vertical) después del bloque de cálculo de la última operación (Beneficio del periodo). Trazar la línea teniendo en cuenta el desplazamiento en el futuro por n-horas, calculado sobre la base de profit_last_day y profit_last_deal.

Como

if (profit_last_day<=0 and profit_last_deal<=0){n=24;}

else (profit_last_day>0 and profit_last_deal<=0){n=2;}

si no {n=1;}
//---
tiempo = última_hora + n;
//---
luego dibujar la línea con un desplazamiento en el tiempo con respecto a la última operación, utilizando el valor de tiempo calculado...

 

La versión 1.002 introduce una protección: si la hora de apertura de la barra del día devuelve "0" - entonces no sirve y salimos.

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


Ahora no habrá ninguna solicitud durante toda la vida de la cuenta comercial.

Archivos adjuntos:
 
Vladimir, ¡muchas gracias de nuevo por tu trabajo!
Intentaré hacer el código yo mismo, para que no me atormente la conciencia y por aquello de practicar :) Informaré de los resultados, si los hay
 
renatmt5:
Vladimir, ¡muchas gracias de nuevo por tu trabajo!
Intentaré hacer el código yo mismo, para no enfermar de conciencia y práctica :) Informaré de los resultados, si los hay

Bien.

 
Por cierto, en la protección que has añadido está el siguiente punto. Como tengo un retraso de 1-2 minutos antes de que se calcule el valor correcto, durante el cual las variables son cero, cambio el marco temporal actual a otro para una actualización rápida - los valores se recalculan inmediatamente. Probablemente, es posible hacer alguna muleta de software sobre este principio?