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
Forum sul trading, sistemi di trading automatico e test di strategia
FAQ da principianti MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2019.02.17 06:56
Ho deciso di ripetere l'esperimento di nuovo, ecco il codice
Ed ecco il risultato
Qualche idea su cosa abbia causato l'errore?I telepati sono in vacanza. E per la gente comune abbiamo bisogno:
Dove vi è stato detto che c'era un errore? Te l'ho detto - cerca il punto della libreria in cui può essere scritto nella variabile _LastError. Non è detto che il codice con l'errore abbia funzionato. Perché potrebbe cercare un oggetto (e se è assente, il codice di errore sarà scritto nella variabile) e crearlo. Ma se l'oggetto non viene creato, è un errore, ma verrà creato e tutto si risolverà. Ma dopo il controllo, il codice di errore (l'oggetto era assente prima della creazione) sarà scritto in una variabile, che poi leggerete nel vostro codice.
I telepati sono in vacanza. Quello che serve alla gente comune è:
1. Codice
2. Nessuna aspettativa di messaggi di errore nel log
3. Windows 7 Home 32 bit, build 1940, non collegato al server durante i test - broker Discovery.
Dove le è stato detto che c'è un errore? Te l'ho detto - cerca un frammento nella libreria dove può essere scritto nella variabile _LastError. Non è detto che il codice con l'errore abbia funzionato. Perché potrebbe cercare un oggetto (e se è assente, il codice di errore sarà scritto nella variabile) e crearlo. Ma se l'oggetto non viene creato, è un errore, ma verrà creato e tutto si risolverà. Ma dopo il controllo, il codice di errore (l'oggetto era assente prima della creazione) sarà scritto in una variabile, che poi leggerete nel vostro codice.
La libreria deve produrre un errore quando c'è un errore reale, o gestire correttamente la situazione e non produrre un errore quando non c'è. Se il mio uso della libreria non è descritto nella classe durante il controllo degli errori, dovreste specificarlo. In ogni caso, è irragionevole che l'utente possa modificare le librerie del produttore del prodotto.
La libreria deve produrre un errore quando c'è un errore reale, o gestire correttamente la situazione e non produrre un errore quando non c'è. Se il mio uso della libreria non è descritto nella classe durante il controllo degli errori, dovreste specificarlo. In ogni caso, è irragionevole che l'utente possa modificare le librerie del produttore del prodotto.
Non c'è nessun errore, rileggilo:
Dove le è stato detto che c'era un errore? Te l'ho detto - cerca un frammento nella libreria dove può essere scritto nella variabile _LastError. Non è detto che il codice con l'errore abbia funzionato. Perché potrebbe cercare un oggetto (e se è assente, il codice di errore sarà scritto nella variabile) e crearlo. Ma se l'oggetto non viene creato, è un errore, ma verrà creato e tutto si risolverà. Ma dopo aver controllato il codice di errore (l'oggetto era assente prima della creazione) sarà scritto in una variabile che poi leggerete nel vostro codice.
Quindi è solo vostro interesse sapere perché leggete l'errore dopo la normale esecuzione del codice. Quello che molto probabilmente non capite è che avere un codice diverso da zero nella variabile _LastError non significa necessariamente che c'è un errore nel codice di CGraphic e non solo in esso. In questo caso, potrebbe essere un semplice risultato della ricerca dell'esistenza di un oggetto, che è stato eseguito all'interno del CGraphic in SB. C'è stata una richiesta per un oggetto per nome, il risultato ha restituito -1 e il codice 4202 è stato scritto in _LastError. Poi l'oggetto è stato creato, tutto ha funzionato ed è stato restituito al programma chiamante. E lì si legge immediatamente il codice di errore e lo si ottiene. Ma non c'è nessun errore - si vede il risultato delle query all'interno del SB.
Sto solo suggerendo una possibile ragione per quello che state riportando.
Quindi, se volete davvero trovare un vero errore e segnalarlo, dovete passare attraverso l'intero codice CGraphic nel debugger e catturare il vero errore che causerà fallimenti logici e di prestazioni, piuttosto che affermare semplicemente che avete letto il codice di errore e quindi - è sicuramente lì.
Non c'è nessun errore, rileggilo:
Quindi - è solo tuo interesse sapere perché stai leggendo l'errore dopo la normale esecuzione del codice. Probabilmente non capite che il contenuto della variabile _LastError, che non è zero, non significa necessariamente che c'è un errore nel codice CGraphic, e non solo in esso. In questo caso, potrebbe essere un semplice risultato della ricerca dell'esistenza di un oggetto, che è stato eseguito all'interno del CGraphic in SB. C'è stata una richiesta per un oggetto per nome, il risultato ha restituito -1 e il codice 4202 è stato scritto in _LastError. Poi l'oggetto è stato creato, tutto ha funzionato ed è stato restituito al programma chiamante. E lì si legge immediatamente il codice di errore e lo si ottiene. Ma non c'è nessun errore - si vede il risultato delle query all'interno del SB.
Sto solo suggerendo una possibile ragione per quello che stai riportando.
Quindi, se volete davvero trovare il vero errore e segnalarlo, allora dovete passare attraverso l'intero codice CGraphic nel debugger e catturare il vero errore che causerà il fallimento della logica e dell'operazione, piuttosto che affermare semplicemente che avete letto il codice di errore e quindi - è sicuramente lì.
Tu stesso hai detto nel tuo ragionamento logico che potrebbe esserci un errore nel codice, e si esprime nel non resettare l'errore. che è stato ricevuto per mancanza di un oggetto prima della sua creazione.
No, non ho la competenza per cercare un errore in un codice complesso e poi ottenere una risposta che è stato inteso in quel modo.
Potete dirmi se questo messaggio è un errore dell'utente o no?
Il codice che punta a questo èD.PointsFill(false);
Voi stessi avete indicato nel vostro ragionamento logico che ci può essere un errore nel codice, ed è espresso dal non resettare l'errore. che è stato ricevuto a causa dell'assenza dell'oggetto prima della sua creazione.
No, non ho la competenza per cercare un errore in un codice complesso e poi ottenere una risposta che è stato inteso in quel modo.
Potete dirmi se questo messaggio è un errore dell'utente o no?
Punta a questo codice -D.PointsFill(false);
Non capisco affatto il significato della frase.
Mi sembra di avervi già descritto tutto in dettaglio.
Non lo so. Non ci sono molte informazioni.
Non capisco affatto il significato della frase.
Mi sembra che vi ho già spiegato tutto in dettaglio.
Non lo so. Non ci sono molte informazioni.
Non capisci che se il tuo codice è costruito per reagire a un errore (creiamo un oggetto in caso di errore), allora dopo aver corretto l'errore(creando un oggetto) è logico resettare questo errore, cosa che secondo il tuo ragionamento logico non viene fatta nella libreria.
Anche qui non ho informazioni su come reagire a questo errore...
Non capisci che se il codice è costruito sulla risposta all'errore (in caso di errore si crea un oggetto), allora dopo la correzione dell'errore(creazione dell'oggetto), è logico resettare questo errore, cosa che secondo il tuo ragionamento logico non viene fatta nella libreria.
Qui non ho informazioni su come reagire a questo errore...
Dovete sapere bene che non è il codice in _LastError che non è uguale a zero ad essere un errore, ma il risultato restituito dalla funzione che indica un'esecuzione errata di questa funzione. E _LastError contiene codice che punta esattamente a quell'errore che fa eseguire la funzione per errore. Quindi è dubbio che si possa usare la descrizione del codice di errore memorizzato nella variabile di servizio invece di usare direttamente il codice di ritorno della funzione. Se la funzione ha restituito -1 o falso o 0 (per ogni funzione il suo codice di errore è descritto nell'aiuto), bene - solo l'analisi del risultato restituito dalla funzione dovrebbe essere gestita da voi, non il codice in _LastError, che non indica l'errore, ma è usato per indicare la causa del ritorno di qualche risultato restituito dalla funzione.
La funzione di ricerca degli oggetti restituisce un valore inferiore a zero nel caso in cui un oggetto con il nome dato non esista. È un errore? No. Questa è una risposta regolare della funzione, in base alla quale si prende una decisione sulla creazione di un oggetto con il nome dato. Il codice contenuto in _LastError dice esplicitamente che "Un oggetto con il nome richiesto non esiste" - potete crearlo.
Beh, sono stanco di spiegartelo. Chi vuole, capirà.