Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 508
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
è più breve? bool barup=... WindowRedraw(); verrà ancora eseguito - preso da if
può anche essere più breve ... vedi il mio file
Un po' come l'affermazione della domanda è chiara, no? Il punto è inizializzare la stessa cosa.
Come pensate di inizializzare qualcosa che non esiste già? Dopo che l'oggetto è stato creato, comincia ad esistere, ed è allora che può essere inizializzato.
Te l'ho detto subito - fai di un oggetto un costruttore parametrico, e passagli i parametri richiesti, che saranno usati per inizializzare l'oggetto appena creato.
Potete passare parametri attraverso una struttura, che riempite con i dati richiesti (costanti per tutti questi oggetti) in OnInit() del programma. Poi, in OnTick(), per esempio, o in qualsiasi altro gestore standard, create i vostri oggetti, ma quando li create scrivete quanto segue:
CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
Oppure, se i dati dell'oggetto non cambiano da programma a programma e hanno sempre gli stessi valori, allora inizializzateli esplicitamente con i parametri richiesti nel costruttore attraverso la lista di inizializzazione, come ha detto Igor sopra:
Forum sul trading, sistemi di trading automatico e test di strategia
Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici
Ihor Herasko, 2018.03.28 17:31
Questo viene fatto nella lista di inizializzazione, che si trova nel costruttore della classe:
Come pensate di inizializzare qualcosa che non esiste già? Dopo che l'oggetto è stato creato, comincia ad esistere, ed è allora che può essere inizializzato.
Te l'ho detto subito - fai di un oggetto un costruttore parametrico, e passagli i parametri richiesti, che saranno usati per inizializzare l'oggetto appena creato.
Potete passare i parametri attraverso una struttura, che riempirete con i dati richiesti (costanti per tutti questi oggetti) in OnInit() del programma. Poi, in OnTick(), per esempio, o in qualsiasi altro gestore standard, create i vostri oggetti, ma alla creazione scrivete quanto segue:
CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
Sì, capisco. Grazie. Beh, in qualche modo ho pensato che ci fosse una soluzione in modo che quando un oggetto viene creato abbia alcuni parametri preimpostati subito senza doverli passare al costruttore o altro. Attraverso una classe di genitori o qualcosa del genere.
Nella mia classe ho tutti i tipi di cose come i parametri degli indicatori ecc. come parametri. In generale, cose che saranno statiche e uguali. Quindi perché dovrei passare questi valori ogni volta che creo un oggetto?
Quindi non passarlo. Initialize nella lista di inizializzazione, come ho mostrato. Al momento di creare un'istanza della classe, verrà chiamato automaticamente il costruttore della classe, che inizializzerà tutti i membri della classe, specificati nella lista di inizializzazione. Mettete la funzione Print nel metodo CCandle e vedrete come il costruttore viene chiamato senza alcun riferimento ad esso.
Sì, capisco. Grazie. Beh, in qualche modo ho pensato che c'è una soluzione, in modo che quando un oggetto viene creato ha alcuni parametri preimpostati subito senza doverli passare al costruttore o altro. Tramite una classe madre o qualcosa del genere.
Di nuovo. Potete farlo senza trasferire i dati al costruttore.
Quindi non passarlo. Initialize nella lista di inizializzazione, come ho mostrato. Al momento di creare un'istanza della classe, verrà chiamato automaticamente il costruttore della classe, che inizializzerà tutti i membri della classe, specificati nella lista di inizializzazione. Mettete la funzione Print nel metodo CCandle e vedrete come il costruttore viene chiamato senza alcun riferimento ad esso.
Non capisco, che differenza fa se passarli attraverso il costruttore o attraverso la funzione di inizializzazione?
Quindi non passarlo. Initialize nella lista di inizializzazione, come ho mostrato. Al momento di creare un'istanza della classe, verrà chiamato automaticamente il costruttore della classe, che inizializzerà tutti i membri della classe, specificati nella lista di inizializzazione. Mettete la funzione Print nel metodo CCandle e vedete come il costruttore viene chiamato senza alcun riferimento ad esso.
Con cosa saranno inizializzati? Con quali valori? Non capisco.
Supponiamo che io abbia dei valori iniziali nei parametri di input di Expert Advisor. Quindi, ho bisogno di passarli ad ogni oggetto della classe. Ma non per passarli ad ogni oggetto appena creato.
come mai in questo ciclo il mio ordine limite viene cancellato solo se dopo aver piazzato un ordine limite sulla barra successiva non è stato piazzato un altro ordine limite, cioè un ordine limite viene cancellato solo se viene piazzato e poi seguito da due barre senza ordini limite
Con cosa saranno inizializzati? Con quali valori? Non chiaro
Quelli che si scrivono nella lista di inizializzazione.
Supponiamo che io abbia inizializzato i valori nei parametri di input di Expert Advisor. Quindi, ho bisogno di passarli ad ogni oggetto di questa classe. Ma non per passarli ad ogni oggetto appena creato.
Ecco qui:
Se lo eseguiamo, otteniamo: