[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 38

 
ikatsko >> :

Lasciate (per semplicità) solo ciò che costituisce il problema nel codice. Metti l'indicatore e vedi il problema, per così dire.




Se non mi sbaglio, la funzione init viene chiamata solo una volta, quando si riaggancia un grafico. Sarebbe logico forzare la reinizializzazione quando tf cambia - per evitare "cose strane" con il lavoro del gestore della memoria.

if( CurrentPeriod!=Period())
{
    ReInitParam();
    CurrentPeriod=Period();
}

>> Buona fortuna.

 
ikatsko писал(а) >>

Lasciate (per semplicità) solo ciò che costituisce il problema nel codice. Mettiamo l'indicatore e vediamo il problema, per così dire.



//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//...........................................................
Set_SL[History*Depth]=1.0*Level*Point;
Alert("Init:"," Set_SL[",History*Depth,"]=",Set_SL[History*Depth]);//sospeso per vedere: mostra (diciamo) 0,0001
//--------------------------------------------------------------------//----
ritorno(0);
}

Non dovreste fare riferimento agli array da init(). Molto probabilmente, gli array non sono stati ancora inizializzati. Ha senso spostare la parte problematica in start()

 
Vinin >> :

È sufficiente controllare l'ultima transazione chiusa. Ma bisogna provvedere a quando non c'è ancora una storia

Quale funzione potete usare per fare questo?

 
xruss писал(а) >>

Quale funzione può essere usata per fare questo?

Dovete scrivere una funzione o cercarne una già pronta.

 
VladislavVG >> :

Se non mi sbaglio, la funzione init viene chiamata solo una volta, quando si riaggancia un grafico. Sarebbe logico forzare la reinizializzazione quando si cambia il t\f - per evitare "cose strane" con il funzionamento del gestore della memoria.


Buona fortuna.

Dal tutorial:

Funzione speciale init().
Negli indicatori personalizzati la funzione speciale init() viene chiamata (ed eseguita) immediatamente dopo l'avvio del terminale client, dopo un cambiamento di un simbolo e/o di un periodo del grafico, dopo aver ricompilato il programma in MetaEditor e dopo il cambiamento dei parametri di input dalla finestra di impostazione dell'indicatore personalizzato.

 
ikatsko >> :

Dal libro di testo:

Funzione speciale init().
Negli indicatori personalizzati la funzione speciale init() viene chiamata (ed eseguita) immediatamente dopo l'avvio del terminale client, dopo il cambio di simbolo e/o periodo del grafico, dopo la ricompilazione del programma in MetaEditor e dopo il cambio dei parametri di input dalla finestra di setup dell'indicatore personalizzato.

Ci vogliono cinque minuti al massimo - dichiarare una funzione e trasferirla lì dall'assegnazione init e chiamarla come ti ho scritto.

Buona fortuna.

SZ il valore massimo int che la tua funzione ti dà è molto probabilmente EMPTY_VALUE.

Sì, un'altra cosa: la variabile CurrentPeriod deve essere dichiarata come una variabile statica o globale per il file. Di solito assegno un valore di -1 a tali variabili.

 
Come posso fare riferimento alla barra precedente (già formata)?
 
RocketTrend >> :
Come riferirsi alla barra precedente (già formata)?

Close[1]/Open[1]/High[1]/Low[1]/.... A seconda del valore necessario.

 
VladislavVG >> :

Close[1]/Open[1]/High[1]/Low[1]/.... A seconda del valore richiesto.

Grazie a voi

 
VladislavVG >> :

Close[1]/Open[1]/High[1]/Low[1]/.... A seconda del valore richiesto.

Grazie