Ho tutti i tipi di sciocchezze come i parametri degli indicatori ecc. come parametri nella mia classe. In generale, cose che saranno statiche e uguali. Quindi perché dovrei passare questi valori ogni volta che creo un oggetto?
è più breve? bool barup=... WindowRedraw(); verrà ancora eseguito - preso da if
può anche essere più breve ... vedi il mio file
Grazie. Come faccio a impostare correttamente l'intervallo in cui vengono disegnati i livelli Fibo? Se è (ora) 9.00, dovrebbe disegnare i livelli da 8.00 a 8.59 su М1.
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:
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.
Juer: 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
int i;
for(i=0;i<=OrderTicket();i++)
{
takelimit=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
if(iBarShift(Symbol(),0,OrderOpenTime())==2)//здесь нужно что бы на 2-ом баре если есть ордер его удалить, но удаляется он только если после его установки небыло на след баре еще лимитника
{
deletelimit=OrderDelete(ticket);
if(!deletelimit)
{
Comment(GetLastError());
}
}
}
if(условие для байлимита)
{ордерсенд}
elseif(условие для селлимита)
{ордерсенд}
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:
inputint i_nA = 10;
inputdouble i_fB = 20.0;
inputdatetime i_dtC = D'2018.03.08 10:12:14';
class CCandle
{
int m_nA;
double m_fB;
datetime m_dtC;
public:
CCandle(void);
};
CCandle::CCandle(void)
: m_nA(i_nA)
, m_fB(i_fB)
, m_dtC(i_dtC)
{
Print("Создан объект со значениями: A = ", m_nA, ", B = ", m_fB, ", C = ", m_dtC);
}
intOnInit()
{
CCandle arrclass[10];
return(INIT_SUCCEEDED);
}
Se lo eseguiamo, otteniamo:
022:09:36.706 Test EURUSD,M1 inputs: i_nA=10; i_fB=20.0; i_dtC=1520503934;
022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: initialized
022:09:36.995 Test EURUSD,M1: uninit reason 0022:09:37.062 Script Test EURUSD,M1: removed
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
è 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: