Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 600
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
Questo non è un club telepatico. Non hai allegato il tuo codice, quindi sta a te decidere dove mettere la cancellazione.
Sbagliato.
Bene, qui c'è il codice, di cos'altro avete bisogno? E se non è corretto?
Grazie.
Hai confuso tutto. Una pianificazione errata del compito è esattamente ciò che porta a queste conseguenze.
Se vengono creati oggetti in una classe, essa deve cancellarli nel suo distruttore al termine. Le altre classi, invece, prima di ottenere un puntatore a un oggetto, dovrebbero controllarne la validità. E in linea di principio non dovrebbe esserci una relazione così intrecciata. È un po' un groviglio. Complicato non significa qualità. Tutto dovrebbe essere trasparente e tracciabile. Prima di tutto - per voi.
Mostriamo invece il codice.
Qui, sto leggendo alcuni dati da un file all'inizio del programma.
Cioè, creo un oggetto CCandleCondition *candle_cond all'iterazione e poi lo aggiungo alla collezione candles_one_rules.
Ecco il metodo AddCondition della classe CCandlesOneRules:
CCandleRule è solo una classe contenitore per le condizioni. Aggiungo condizioni alle regole e regole a CCandlesOneRules, che a sua volta a CCandlesOneRules....
Ma questo while loop fallisce all'avvio e si blocca con un errore di esaurimento della memoria. E non ci sono molte di queste condizioni, solo 7 vengono lette prima di fermarsi. Se riduciamo il numero di dati nel file letto, funziona, senza errori, oggetti non cancellati e così via.
Mostriamo meglio il codice.
Sto cominciando a perdere la pazienza.
Dov'è la definizione del metodo Add?
A giudicare dal codice avete una completa mancanza di comprensione di ciò che state facendo.
Sto cominciando a perdere la pazienza.
Dov'è la definizione del metodo Add?
A giudicare dal codice avete un completo fraintendimento di ciò che state facendo.
CCandleOneRules, CCandlesOneRules, CCandleRule sono tutte classi ereditate da CArrayObj.
A giudicare dalle tue risposte generiche, semplicemente non capisci le mie domande. Sull'array con CArrayObj non hai ancora risposto nel modo giusto. Ancora una volta ripeterò questo problema. C'è una classe, nel metodo class gli oggetti globali della classe sono aggiunti all'array (oggetto di tipo CArrayObj), che è dichiarato in questo metodo. In questo metodo vengono eseguite alcune azioni in questo array. Al termine, l'oggetto array non è necessario, i membri dell'array sono necessari. Come sbarazzarsi correttamente di questo oggetto array, mantenendo i membri dell'array? Se non ve ne sbarazzate, otterrete un messaggio come oggetti non cancellati nel log. Ti ho dato la mia soluzione; l'hai detta in modo errato. Come è corretto? Come posso mettere la cancellazione in OnDeinit (o nel metodo Deinit della classe che sarà chiamato da OnDeinit), se questo oggetto array è visibile solo nel metodo della classe?
Inoltre, se gli oggetti vengono cancellati solo in OnDeinit, si può anche incorrere nell'esaurimento della memoria...
Salve colleghi.
Per favore, aiutatemi con questa domanda. Dove dovrei usare la funzione ArraySetAsSeries() per specificare l'ordine di numerazione degli elementi nel buffer dell'indicatore? Negli indicatori, che sono preinstallati nel terminale, ho osservato spesso che viene utilizzato all'interno di OnCalculate(). Ma il buffer dell'indicatore è dichiarato globalmente. Non è logico usare ArraySetAsSeries() dentro OnInit() per una singola chiamata in questo caso? O a causa del riempimento del buffer dell'indicatore con nuovi elementi l'ordine di numerazione può essere perso ed è necessario chiamare ArraySetAsSeries() ogni volta dentro OnCalculate()? Voglio scrivere un codice ottimale senza chiamate di funzioni inutili, quando non è necessario. Sarò grato per l'aiuto.
Salve colleghi.
Per favore, aiutatemi con questa domanda. Dove dovrei usare la funzione ArraySetAsSeries() per specificare l'ordine di numerazione degli elementi nel buffer dell'indicatore? Negli indicatori, che sono preinstallati nel terminale, ho osservato spesso che viene utilizzato all'interno di OnCalculate(). Ma il buffer dell'indicatore è dichiarato globalmente. Non è logico usare ArraySetAsSeries() dentro OnInit() per una singola chiamata in questo caso? O a causa del riempimento del buffer dell'indicatore con nuovi elementi l'ordine di numerazione può essere perso ed è necessario chiamare ArraySetAsSeries() ogni volta dentro OnCalculate()? Voglio scrivere un codice ottimale senza chiamate di funzioni inutili, quando non è necessario. Sarò grato per l'aiuto.
IMHO, scriverei indicatori senza queste funzioni (se da zero, ovviamente). Per i buffer - in OnInit(), per le serie temporali - in OnCalculate().
E, per parlare di codice ottimale, è necessario sapere quanto tempo impiega questa funzione ad essere eseguita. Quindi, il profilatore dovrebbe andare per primo, e solo dopo le domande sulle prestazioni.
IMHO, scriverei indicatori senza queste funzioni (se da zero, ovviamente). Ma per i buffer - in OnInit(), per le serie temporali - in OnCalculate().
E, per parlare di codice ottimale, è necessario sapere quanto tempo impiega questa funzione ad essere eseguita. Quindi, il profilatore dovrebbe andare per primo, e solo dopo le domande sulle prestazioni.
Questa è la conclusione a cui tendevo. Grazie per il suggerimento.
Buon pomeriggio. Ho una domanda: perché, quando applico le barre di bolinger al MACD, prendo i valori della linea del segnale e non l'istogramma stesso?
Buon pomeriggio. Ho una domanda: perché quando applico le barre di bolinger al MACD, prendo i valori della linea del segnale e non l'istogramma stesso?
Avete la possibilità di specificare quale buffer grafico utilizzare per il calcolo?