Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 182

 

Hola.

Existe una función NewBar(sy, TF). Parece que se ha abierto un nuevo bar. Necesito obtener una señal en el gráfico horario sobre la aparición de una nueva barra con un desfase de 5 min. Quiero obtener la señal a 0,05, 1,05, 2,05, ..........., 10,05, 11,05, etc.


¿Cómo se puede hacer esto? ¿Quizás la propia función pueda ser rediseñada de alguna manera?

 
hoz:

Bueno, he eliminado la biblioteca #property, pero no había ninguna advertencia, mientras que no hay ninguna función de inicio...

¿Advertencias sobre qué?
 
Vinin:

¿Advertencias sobre qué?


¿Qué hay de...? Aquí:

sargazo:
lo necesitas si no quieres ver avisos de falta de inicio

 
gince:

Hola.

Existe una función NewBar(sy, TF). Comprueba si se ha abierto un nuevo bar. Necesito obtener una señal en el gráfico horario sobre la aparición de una nueva barra con un desfase de 5 minutos. Quiero obtener la señal a 0,05, 1,05, 2,05, ..........., 10,05, 11,05, etc.


¿Cómo se puede hacer esto? ¿Es posible modificar la propia función?


Lo declaras globalmente:

datetime = bdt_lastBarTime;

EN INIT:

bdt_lastBarTime = 0;

EN COMIENZO:

if (g_lastBarTime == Time[0])         // На текущем баре все необходимые действия..
       return (0);                    // ..уже были выполнены

// если ...
//.. бар новый...
//.. делаем то..
//.. что нужно выполнить на очередном..
//.. новом баре

g_lastBarTime = Time[0];               // На текущем баре все необходимые действия..
                                       // .. успешно выполнены

En lugar de Time[0]; puede marcar iTime() para obtener una nueva barra para un marco de tiempo distinto al actual.

 
hoz:


Lo declaras globalmente:

INIT:

EN COMIENZO:

Puede marcar iTime() en lugar de Time[0]; para obtener una nueva barra para un marco de tiempo distinto al actual.


El único problema es. Los nombres de las variables no coinciden. Ouch, ouch. Es por falta de atención o por costumbre.
 
Vinin:

Excepto que aquí está el problema. Los nombres de las variables no coinciden. Oh, querida. Ya sea por falta de atención o por costumbre

Eso es falta de atención. Corrección.

Declaras globalmente:

datetime = bdt_lastBarTime;

EN INIT:

bdt_lastBarTime = 0;

EN COMIENZO:

if (bdt_lastBarTime == Time[0])         // На текущем баре все необходимые действия..
       return (0);                    // ..уже были выполнены

// если ...
//.. бар новый...
//.. делаем то..
//.. что нужно выполнить на очередном..
//.. новом баре

bdt_lastBarTime = Time[0];               // На текущем баре все необходимые действия..
                                       // .. успешно выполнены

En lugar de Time[0]; puede marcar iTime() para obtener una nueva barra para un marco de tiempo distinto al actual.

 

de un vistazo, sólo específicamente para esta tarea.

bool NewBar05()
{
static bool newbar;
if (Minute()==5 && !newbar) 
   {
   newbar=true;
   return true;
   } 
if (Minute()>5 && newbar)  newbar=false;
   return  false;
}
    
 
xxxKillxxx:

Camarada, discúlpeme de nuevo, pero tengo un problema.... He conseguido comprobar que todos los bloques se cierran sin ningún tipo de error o advertencia y no estoy recibiendo ninguna sintaxis, pero no estoy recibiendo ninguna señal cuando inicio mi EA, mis operaciones no se cierran como se espera. El problema es que no puedo poner el código de la EA, y para resolver el problema bien muy necesario, si no te importa a gastar en mí de nuevo su precioso tiempo, por favor dígame qué opciones pueden ser para abordar el problema, si es importante, sólo puedo decir que la EA fue creado en el generador de divisas 4.

Me gustaría que me explicarais las razones (preferiblemente con los dedos y con la lengua en la boca, porque sólo me dedico a este tipo de programación) Gracias de antemano.


Bueno mi código o ya parte de su Asesor Experto cierra el beneficio especificado de 0,1% y más. En el generador de divisas 4, ¿pudiste hacer algo para que el capital fuera mayor que el saldo?
 
Roger:

de un vistazo, específicamente para esta tarea.


Gracias a todos por su ayuda.

La pregunta era la siguiente.

<Hay una función NewBar(sy, TF). Comprueba si se ha abierto un nuevo bar. Necesito obtener una señal en el gráfico horario sobre la aparición de una nueva barra con un desfase de 5 min. Es decir, quiero obtener una señal a 0,05, 1,05, 2,05, ..........., 10,05, 11,05, etc. >

Para aclarar la pregunta. La función debe devolver true cada hora, pero con un retraso de 5 min. Es decir, cuando termina la formación de la barra 1.05 y aparece la barra 2.05, la función devuelve true cuando aparece esta última. La función devuelve true cuando la barra aparece a 1,10, 2,10, etc.

En la imagen, la línea amarilla muestra que la siguiente barra era verdadera.

Siguiendo tu consejo lo he probado así pero no funciona.

bool isNewBar5 ()
{

    static int   LastBar = 0; 
    datetime      curbar = iTime (Symbol(), 60, 0) +300; 
    int                h = Hour();
    if (LastBar != curbar && h == h + 1 && Minute() == 5)
    {
        LastBar = curbar;
        return (true);
    }
    else
    {return (false);}
}
 
gince:

Hola.

La función NewBar(sy, TF) está disponible. Comprueba si se ha abierto un nuevo bar. Necesito obtener una señal de una nueva barra en el gráfico horario con un desfase de 5 minutos. Quiero obtener la señal a 0,05, 1,05, 2,05, ..........., 10,05, 11,05, etc.


¿Cómo se puede hacer esto? ¿Tal vez se pueda reescribir la propia función?


int bt=((TimeCurrent()-5*60)/3600)*3600;

El valor de bt cambiará a los 5 minutos de cada hora. Es posible no multiplicar por 3600 al final, será el número de barra desde el principio de la época, esto es suficiente para definir una nueva barra.