Errori, bug, domande - pagina 1182
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
L'ottimizzazione non funziona.
2014.08.05 19:34:42 Tester nessun parametro ottimizzato selezionato, controllare gli ingressi da ottimizzare e impostare accuratamente i valori di start, step e stop
La traduzione non ha dato nulla.
Cosa vuol dire "niente"? La traduzione avrebbe dovuto darmi qualcosa, tipo che dovrei selezionare almeno un parametro per l'ottimizzazione e assicurarmi che l'inizio, la fine e il passo del test siano corretti.
Ho affrontato questo problema: ho bisogno di confrontare due oggetti della stessa classe tra loro e ho deciso di sovraccaricare l'operatore == per comodità. Si è scoperto che se gli oggetti sono dinamici, il mio operatore non viene eseguito, e invece degli oggetti stessi vengono confrontati i loro puntatori. Beh, ha senso in linea di principio, l'operazione di salto all'oggetto tramite il suo puntatore è richiesta: *a == *b. Ma MQL ha dimenticato di fornire una tale possibilità. Dobbiamo aggiungere.
Anche se ho appena pensato, il fatto che stiamo confrontando puntatori invece di oggetti è fondamentalmente sbagliato, considerando le specifiche del linguaggio. Dopo tutto, MQL è un linguaggio gestito, e il concetto stesso di "oggetto" è usato qui indipendentemente da come l'oggetto è memorizzato e da come vi si accede. I membri e i metodi sono in ogni caso accessibili con un punto. Corrispondentemente, l'operatore di confronto dovrebbe funzionare allo stesso modo sia per gli oggetti selezionati staticamente che per quelli dinamici. E se avete bisogno di confrontare i puntatori, dovreste farlousando GetPointer().
Anche se stavo pensando, il fatto che ci sia un confronto tra puntatori invece che tra gli oggetti stessi è fondamentalmente sbagliato, date le specifiche del linguaggio.
Quando si testa l'Expert Advisor, genera un errore
takeprofit non valido per la funzione OrderSend
Errore 4107 di OrderSend
Come posso risolvere il problema senza entrare nel codice?
Non c'è bisogno di inventare regole di confronto in MQL che contraddicono il C++, finché si possono usare altri mezzi. Se avete puntatori e avete bisogno di confrontare oggetti, usate una funzione di confronto Una cosa è suggerire di permettere una voce del tipo (*a == *b), e un'altra cosa è dare un significato diverso alla voce (a == b)
Beh, sto spiegando che le regole del MQL contraddicono il C++ così com'è. Riferirsi a un oggetto con un puntatore qui è fatto con un punto, mentre dovrebbe essere fatto con ->, se seguiamo le regole del C++.
Cioè "puntatore" e "oggetto" sono due nozioni assolutamente diverse in C++, per questo la sintassi è diversa. Tutto è rigoroso. Ma qui tutto è mischiato in un unico gruppo. Sembra che ci rivolgiamo a proprietà e metodi di un puntatore. Non sto dicendo che è male, è più conveniente per l'OOP, è fatto in C# per esempio. Ma poi tutto il resto deve essere implementato allo stesso modo. Ci deve essere un unico concetto. Altrimenti si verificano contraddizioni e confusione: in alcuni casi usiamo un puntatore allo stesso modo dell'oggetto stesso, e in altri casi il puntatore improvvisamente prende vita.
Procedendo al lato pratico di tutto questo, ho già affrontato un problema: il mio codice utilizzava oggetti statici. Poi ho deciso di sostituire alcuni di essi con oggetti dinamici. Come risultato, le operazioni di confronto e di assegnazione hanno iniziato a funzionare in modo molto diverso. E questo problema era difficile da rilevare perché il programma continua a compilare e a funzionare normalmente ma non nel modo in cui dovrebbe.
Ho qualche classe nel mio codice che contiene qualche oggetto:
La classe CObj è dichiarata prima di essa.
Quando provo a compilare ottengo il seguente errore: 'Object' - cannot be unset
Cosa significa questo errore e qual è la sua causa? Non ricordo di aver incontrato questo errore prima. La classe CObj ha un costruttore e un distruttore.
Ho provato a dichiarare Object semplicemente come una variabile - tutto è OK. Ma non lo farà quando fa parte di una classe.
Qualcuno può spiegare cos'è questo errore ("- cannot be unset") e quando si verifica?