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
Quale build hai usato? Dato che sembra esserci un possibile bug nell'ultima build con la funzione"ObjectDelete()", potrebbe essere che ci siano problemi anche con la "ObjectFind()"!
MT5: Build 1495 (09 dicembre 2016)
MT5: build 1495 (09 dicembre 2016)
Ho eseguito il tuo codice sulla build 1491 e ho ottenuto risultati simili:
Ho eseguito il tuo codice sulla build 1491 e ho ottenuto risultati simili:
Questo potrebbe essere semantico piuttosto che un bug.
Lo scopo di ObjectDelete è di "rimuovere l'oggetto con il nome specificato".
Alla fine dell'esecuzione della funzione, c'è un oggetto chiamato "Oggetto inesistente" ancora sul grafico? No... quindi è un successo?
Guardandola in un altro modo, ObjectDelete ha rimosso un oggetto chiamato "Oggetto non esistente"? No... quindi questo è un fallimento?
Misurate il successo dal risultato o dall'azione intrapresa?
Forse ci si aspetterebbe un falso se l'oggetto chiamato rimane sul grafico dopo l'esecuzione della funzione. Altrimenti, è stato un successo.
Forse quello che dici è vero, ma siccome stiamo migrando da MQL4 a MQL5 ci aspettiamo di vedere lo stesso risultato o almeno un risultato che sia chiaramente scritto nel valore di ritorno del riferimento.
passando questo primo problema, ho testato la funzione ObjectMove, e di nuovo sto ottenendo anche il risultato TRUE! questo va oltre la tua spiegazione che perché l'oggetto non è disponibile alla fine quindi il vero è corretto.
con ObjectMove su un oggetto che non è disponibile dovrebbe restituire false!
moveResult=ObjectMove(ChartID(), "not available trend line",1,time[4950],low[4980]);
Print(__LINE__,"-moveResult=",moveResult);
2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=true
Ciao, sto scrivendo un indicatore in MQL5, ma qualsiasi cosa io scriva come nome di stringa ObejectDelete restituisce true! anche su un grafico vuoto senza oggetti!
Leggi la descrizione delle funzioni degli oggetti
Questo è il gruppo di funzioni destinate a lavorare con gli oggetti grafici relativi a qualsiasi grafico specificato.
Le funzioni che definiscono le proprietà degli oggetti grafici, così come le operazioni ObjectCreate() e ObjectMove() per la creazione e lo spostamento degli oggetti lungo il grafico sono effettivamente utilizzate per inviare comandi al grafico . Se queste funzioni vengono eseguite con successo, il comando viene incluso nella coda comune degli eventi del grafico. I cambiamenti visivi nelle proprietà degli oggetti grafici sono implementati quando si gestisce la coda degli eventi del grafico.
Leggi la descrizione delle funzioni dell'oggetto
Significa che il comando "Elimina questo oggetto" è stato accettato con successo. Puoi controllare il risultato del tuo comando con GetLastError(). Prova - quale codice viene restituito?Ho cambiato il codice in questo modo:
int ObjCount = ObjectsTotal(ChartID(),/*0=sottofinestra principale*/0,/*tutti gli objectTypes*/-1);
ResetLastError();
bool deleteResult=ObjectDelete(ChartID(), "oggetto non esistente");
Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError());
ecco il risultato:
2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0
ERR_SUCCESSO
0
L'operazione è stata completata con successo
quindi non restituisce errore per scoprire ad esempio che non poteva accedere a quell'oggetto. ma in MT4 restituisce l'errore.
ERR_SUCCESSO
0
L'operazione è stata completata con successo
quindi non restituisce errore per scoprire ad esempio che non poteva accedere a quell'oggetto. ma in MT4 restituisce l'errore.
OK. Come ho scoperto non si solleva alcun errore in questo caso in MQL5 perché queste operazioni sono asincrone. Quindi hai 2 opzioni:
OK. Come ho scoperto non solleviamo alcun errore in questo caso in MQL5 perché queste operazioni sono anisocrone. Quindi hai 2 opzioni:
OK. Come ho scoperto non solleviamo alcun errore in questo caso in MQL5 perché queste operazioni sono asincrone. Quindi hai 2 opzioni:
Come potrebbe restituire false in questo caso?
Ladocumentazione di ObjectDelete() dice:
Valore di ritorno
Restituisce true se la rimozione ha avuto successo, altrimenti restituisce false.
La documentazione dovrebbe essere più chiara, non dice "vero se il comando è accettato".
Se vogliamo essere sicuri che un oggetto sia cancellato, dovremo controllare se esiste dopo il comando di cancellazione, non ha senso.
Come potrebbe restituire false in questo caso?
Ladocumentazione di ObjectDelete() dice:
La documentazione dovrebbe essere più chiara, non dice "vero se il comando è accettato".
Sarà fissato in questo modo
Valore di ritorno
Restituiscetrue se il comando viene messo nella coda comune degli eventi del grafico , altrimenti restituisce false.