Indicatore Domande varie - pagina 12

 

Non c'è motivo per cui quella frase di stampa non dovrebbe generare qualcosa.

Se aggiungi l'indicatore a un nuovo grafico, viene stampato (senza dover cambiare il timeframe)?

Se è così, potrebbe essere un problema di avere già l'indicatore su un grafico e poi ricompilare aspettandosi di vedere il cambiamento.

 
honest_knave:

Non c'è motivo per cui quella frase di stampa non dovrebbe generare qualcosa.

Se aggiungi l'indicatore a un nuovo grafico, viene stampato (senza dover cambiare il timeframe)?

Se è così, potrebbe essere un problema di avere già l'indicatore su un grafico e poi ricompilare aspettandosi di vedere il cambiamento.


Grazie per il rapido commento, lo apprezzo.

Sì! Stampa sotto il messaggio sia Load Template che Add Indicator.

20...   ... EURUSD,M1: This Year1900

Ma come sai quel codice potrebbe darmi " 2017 ".

//--- 2a volta modificato

Quando ricompilo mostra il risultato corretto.

Ma non posso aprire MetaEditor che ricompilo quando cerco di aggiungere indicatore e caricare template... Spero che tu capisca cosa voglio dire.

 
Max Enrik:


Grazie per il rapido commento, lo apprezzo.

Si! Stampa il messaggio sottostante sia Load Template che Add Indicator.

Ma come sai quel codice potrebbe darmi " 2017 ".

//--- 2a volta modificato

Quando ricompilo mostra il risultato corretto.

Ma non posso aprire MetaEditor che ricompilo quando cerco di aggiungere indicatore e caricare template... Spero che tu capisca cosa voglio dire.


Forse la ragione per cui ti sta dando l'anno "sbagliato" è che OnInit() viene eseguito prima che tu ti sia connesso al tuo broker.

Year() si basa sull'ora del server... se non c'è una connessione, non conosce l'anno.

Confrontatelo con:

TimeYear(TimeLocal())
 
honest_knave:


Forse la ragione per cui vi sta dando l'anno "sbagliato" è che OnInit() viene eseguito prima che vi siate connessi al vostro broker.

Year() si basa sull'ora del server... se non c'è una connessione, non conosce l'anno.

Confrontatelo con:


So per certo che OnInit() eOnCalculate(...) richiedono uno stile di codice diverso...
Proverò a riscrivere di nuovo i miei indicatori.
( è possibile che mi arrenda )

Grazie per il tuo commento.

 

Penso che potrei scrivere un codice per cancellare prima tutti gli oggetti dell'indicatore e poi riscriverli.
Ho provato come sotto il codice. Ma ho dei dubbi su questo metodo.

D: Questo metodo è sufficiente per cancellare tutti gli oggetti dell'indicatore, per favore?

Qualsiasi consiglio sarebbe meglio grazie.

int OnInit()
 {
  ObjectsDeleteAll( 0, prefix );
  
  // then all my indicator code here...
 }
 
Max Enrik:

Penso che potrei scrivere un codice per cancellare prima tutti gli oggetti dell'indicatore e poi riscriverli.
Ho provato come sotto il codice. Ma ho dei dubbi su questo metodo.

D: Questo metodo è sufficiente per cancellare tutti gli oggetti dell'indicatore, per favore?

Qualsiasi consiglio sarebbe meglio grazie.


Questo è il modo corretto per cancellare tutti gli oggetti dal grafico corrente che iniziano con 'prefix'.
 
honest_knave:

Questo è il modo corretto per cancellare dal grafico corrente tutti gli oggetti che iniziano con 'prefix'

Forte! Grazie per la tua risposta.
Ora, ho solo bisogno di vedere come funzionerà il mio indicatore il giorno successivo.

(p.s. Non mi piace testare il mio indicatore con Tester)

 

(Una volta che ho detto)

Uso il codice del metodo qui sotto per i miei pochi indicatori, che gli indicatori non hanno problemi, ma hanno solo un problema quando avvio la piattaforma MT4 che è che gli indicatori hanno bisogno di riavviare la piattaforma che si aggiorna solo per i valori corretti. Affronto questo problema SOLO una volta al giorno.

Q: Quindi, la parte di codice sottostante può causare un problema che non può aggiornare i valori corretti, per favore?

Grazie in anticipo.

int OnInit()
{
    //---
    datetime a = iTime( Symbol(), 0, 0 );
    int      b = iBarShift( Symbol(), 0, a );
    datetime c = iOpen( Symbol(), 0, b );
    //---
    return(0);
}
 

Il codice in OnInit() viene eseguito solo una volta.

Quando riavviate il vostro terminale, OnInit() può finire prima che vi siate connessi al vostro broker.

Senza una connessione al vostro broker, il tempo sarà sbagliato.

Suggerirei di spostare il vostro codice fuori da OnInit(), o almeno di controllare IsConnected()

 
honest_knave:

Suggerirei di spostare il tuo codice fuori da OnInit(), o almeno di controllare IsConnected()

Non usare mai questo IsConnected(), farò una ricerca su questo.

Grazie mille.

Motivazione: