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

 
renatmt5:
Por cierto, hay otra cosa sobre la protección que has añadido. Como tengo un retraso de 1-2 minutos antes de que se calcule el valor correcto, durante el cual las variables son iguales a 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?

Odio la palabra "muleta".


Ya he pensado en todo de antemano y está muy bien que lo hayas preguntado. Necesitamos convertir LastProfitForPeriod de void a bool. Si hay un error - por ejemplo, la fecha no se encuentra o algo más, devolvemos false y así sucesivamente.

Así, no habrá pérdida de minutos.

 

Si obtienes "falso", reinicia la hora:

   double profit_last_day=0.0,profit_last_deal=0.0;
   if(!LastProfitForPeriod(profit_last_day,profit_last_deal))
     {
      ExtLastMove=0;
      return(rates_total);
     }

   Comment("Profit last day: ",DoubleToString(profit_last_day,2),"\n",
           "Profit last deal: ",DoubleToString(profit_last_deal,2));


Versión 1.003

Archivos adjuntos:
 
Vladimir Karputov:

Odio la palabra "muleta".


Ya he pensado en todo de antemano y está muy bien que lo hayas preguntado. Necesitamos convertir LastProfitForPeriod de void a bool. Si hay un error - por ejemplo, la fecha no se encuentra o algo más, devolvemos false y así sucesivamente.

Así, no habrá pérdida de minutos.

Sobre la "muleta" - sí, hay una actitud descuidada hacia la programación en esta palabra :)

Sí, el efecto de minutos perdidos ha desaparecido en la v.3 del script.

 
renatmt5:

En cuanto a "muleta" - sí, hay una actitud descuidada de programación en esa palabra :)

Sí, el efecto de minutos perdidos ha desaparecido en la v.3 del script.

Esun indicador:)

 
Vladimir Karputov:

Esun indicador:)

Sí, así es, sigo confundiéndome.

 

He añadido un bloque para calcular el desplazamiento de tiempo en relación con el cierre de la última transacción. Al intentar utilizar last_time y n para el desplazamiento de línea más adelante, obtengo un error de compilación :(

.....

                    {

                     last_time=deal_time;

                     profit_last_deal=full_profit;

                    }

                 }

        }

     }

//-------------//     

// MY CODE     //   

//-------------//

if (profit_last_day<=0 && profit_last_deal<=0){uint n=60*60*24;}

else if (profit_last_day>0 && profit_last_deal<=0){uint n=60*60*2;}

else {uint n=60*60*1;}

//-------------//     

// MY CODE END //   

//-------------//

   return(true);

  }

.......
 
Por alguna razón no estoy insertando el fragmento de código correctamente :)
 
Al crear ObjectCreate (chart_ID,name,OBJ_VLINE,sub_window,time,0), necesito cambiar el tiempo de TimeCurrent() alast_time con un desplazamiento hacia el futuro por un periodo igual a n.
¿O tal vez hay una función que desplaza un objeto hacia delante/atrás en un número determinado de barras? ¿Qué es mejor? Confieso que hasta ahora mis esfuerzos independientes han sido infructuosos :(
 
renatmt5:
Al crear ObjectCreate (chart_ID,name,OBJ_VLINE,sub_window,time,0), quiero cambiar el valor del tiempo para que no sea TimeCurrent(), sinolast_time con un desplazamiento para el periodo igual a n.
¿O tal vez hay una función que desplaza un objeto hacia delante/atrás en un número determinado de barras? ¿Qué es mejor? Confieso que hasta ahora mis esfuerzos independientes han sido infructuosos :(

La línea se crea una vez - en OnInit().

Entonces sólo se mueve -VLineMove

 

¿Entiendo correctamente que tengo que hacer cambios en la última línea del fragmento de código (time=0 en particular)?

//+------------------------------------------------------------------+ 
//| Move the vertical line                                           | 
//+------------------------------------------------------------------+ 
bool VLineMove(const long   chart_ID=0,   // chart's ID 
               const string name="VLine", // line name 
               datetime     time=0)       // line time 


¿O VLineMove es una función, que todavía necesita ser iniciada en algún lugar (por ejemplo, en OnCalculate) y pasarle los parámetros entrantes?
Estoy completamente confundido :)