Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 183

 
Integer:


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

Il valore bt cambierà a 5 minuti di ogni ora. È possibile non moltiplicare per 3600 alla fine, sarà il numero di barra dall'inizio dell'epoca, questo è sufficiente per definire una nuova barra.

Non capisco. Se puoi ottenere il codice completo.
 
gince:


Grazie a tutti per il vostro aiuto.

La domanda era questa.

<C'è una funzione chiamata NewBar(sy, TF). Sembra che si sia aperto un nuovo bar. Voglio ottenere un segnale sul grafico orario sulla comparsa di una nuova barra con un ritardo di 5 minuti. Cioè, voglio ottenere un segnale a 0,05, 1,05, 2,05, ..........., 10,05, 11,05, ecc. >

Per chiarire la domanda. La funzione dovrebbe restituire vero ogni ora, ma con un ritardo di 5 minuti. Cioè quando la formazione della barra 1.05 è finita e appare la barra 2.05, la funzione restituisce vero quando appare quest'ultima. La funzione restituisce vero quando la barra appare a 1,10, 2,10, ecc.

Nell'immagine la linea gialla mostra che la barra successiva era vera.

Seguendo il tuo consiglio ho provato in questo modo ma non funziona.


Mi ha subito colpito che i tipi non sono giusti:

static int  LastBar = 0; 
datetime    curbar = iTime (Symbol(), 60, 0) +300; 

E poi confrontarli e assegnare dei valori... da int a datetime

 

L'ho appena scritto a mano. Si può avere il succo del discorso, e va bene così.

bool IsTrueBar ()
{
    static datetime LastTrueBar = 0;
    datetime OOT, CurBar, ShiftFromOOT;
//----    
    OOT = iTime (Symbol(), PERIOD_H1, 0);   // Время открытия часовик
    CurBar = OOT + ShiftFromOOT;            // Время открытия со сдвигом
    
    if (LastTrueBar != CurBar)
    {
        LastTrueBar = CurBar;
        return(true);
    }
    else return (false);
}
 

Cos'è tutto questo trambusto... Qui ogni quinto minuto dell'ora restituisce TRUE e lo mantiene per un minuto:

bool NewBar(){
 if(Minute()==5)return(true);
 else return(false);
}
 
Integer:


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

Il valore bt cambierà a 5 minuti di ogni ora. È possibile non moltiplicare per 3600 alla fine, sarà il numero di barra dall'inizio dell'epoca, questo è sufficiente per definire una nuova barra.


Mancato. Se moltiplicato per 3600 alla fine, aggiungete anche la correzione 5*60.

 
Sepulca:

Cos'è tutto questo trambusto... Qui ogni quinto minuto dell'ora restituisce TRUE e lo mantiene per un minuto:


Voglio dire, davvero, e stiamo facendo i furbi qui...
 
Integer:


Mancato. Se moltiplicato per 3600 alla fine, aggiungete anche la correzione 5*60.


È un po' impacchettato e illeggibile. Ho capito il punto però.
 
hoz:


Mi ha subito colpito che i tipi sono sbagliati:

E poi confrontarli e assegnare i valori... da int a datetime

int e datetime sono lo stesso tipo.
 
Sepulca:

Cos'è tutto questo trambusto... Qui ogni quinto minuto dell'ora restituisce TRUE e lo mantiene per un minuto:

Durante questo minuto il consigliere aprirà fino a quaranta ordini per lui.
 
Roger:
In quel minuto, il consigliere aprirà fino a quaranta ordini per lui.


Questo è il modo per controllare... il numero di ordini o solo la prima chiamata alla funzione...