c'è un bug in mt5 ObjectDelete? - pagina 2

 

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.

 
Farzin Sadeghi:
Sì, ho intenzione di scriverlo. Aspettavo la tua conferma. grazie.

Ho appena provato a segnalarlo sul Service Desk e non accetta il mio messaggio, dicendo "Error saving data".

Ho provato anche da un luogo diverso, da un PC e da un browser diverso (usando il mio VPS) ed è successo lo stesso.

Sei stato in grado di segnalarlo dalla tua parte?

 
honest_knave:

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.

Se questo è il caso, allora la differenza di funzionalità tra MQL4 e MQL5 non è riportata o spiegata nella documentazione!
 
Fernando Carreiro:
Se questo è il caso, allora la differenza di funzionalità tra MQL4 e MQL5 non è riportata o spiegata nella documentazione!

Sono d'accordo. Sono solo curioso di sapere quale "loro" diranno che è corretto :-)

Personalmente, penso che sia meglio restituire true. Altrimenti, è necessario aggiungere del codice extra per controllare che l'oggetto esista, altrimenti si devono sopportare gli errori 4202.

 
honest_knave:

Sono d'accordo. Sono solo curioso di sapere quale "loro" diranno che è corretto :-)

Personalmente, penso che sia meglio restituire true. Altrimenti, è necessario aggiungere del codice extra per controllare che l'oggetto esista, altrimenti si devono sopportare gli errori 4202.

Secondo me, in entrambi i casi bisogna controllare l'esistenza dell'oggetto prima di cancellarlo, indipendentemente da quale versione sia "corretta".

EDIT: Comunque, spero che lo "aggiustino" in modo che funzioni allo stesso modo di MQL4. Altrimenti ci sarà l'ennesima differenza di funzionalità in cui dovremo mettere la compilazione condizionale nel codice fatto per compilare su entrambe le versioni.

 
Fernando Carreiro:
A mio parere, in entrambi i casi è necessario verificare l'esistenza dell'oggetto prima di cancellarlo, indipendentemente da quale versione sia "corretta".

Interessante! Perché dovreste controllare che esista se volete che sparisca?

Il tempo impiegato per controllare se un oggetto inesistente esiste è in gran parte paragonabile al tentativo di cancellare un oggetto inesistente su MT4 (e un'ispezione sommaria su MT5 mostra che è sostanzialmente più lento), quindi non vedo alcun beneficio tangibile in termini di prestazioni eseguendo il controllo. Ma aggiungerà più linee al tuo codice.

 
Fernando Carreiro:

EDIT: Tuttavia, spero che lo "aggiustino" in modo che funzioni allo stesso modo di MQL4. Altrimenti ci sarà l'ennesima differenza di funzionalità in cui dovremo mettere la compilazione condizionale nel codice fatto per compilare su entrambe le versioni.

Forse fa tutto parte del loro piano per costringerci a MT5 attraverso la frustrazione!
 
honest_knave:

Interessante! Perché dovreste controllare che esista se volete che sparisca?

Il tempo impiegato per controllare se un oggetto inesistente esiste è in gran parte paragonabile al tentativo di cancellare un oggetto inesistente su MT4 (e un'ispezione sommaria su MT5 mostra che è sostanzialmente più lento), quindi non vedo alcun beneficio tangibile in termini di prestazioni eseguendo il controllo. Ma aggiungerà più linee al tuo codice.

Quando vuoi rilevare se l'utente ha accidentalmente cancellato e deve essere ricreato. Intendevo questo come "pulizia della casa" generale e non per una singola funzionalità di cancellazione una volta sola.

Ma sì, sono d'accordo, per una funzionalità"OnDeinit()", non c'è bisogno di testarla prima.

 
Fernando Carreiro:

Quando si vuole rilevare se l'utente ha cancellato accidentalmente e deve essere ricreato. Intendevo questo come "pulizia generale" e non per una funzionalità di cancellazione una volta sola.

Ma sì, sono d'accordo, per una funzionalità"OnDeinit()", non c'è bisogno di testarla prima.

Ah, capisco.

Come nota a margine:

#property strict

void OnStart()
  {
   string name = "MysteryObject";
   ulong begin;

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) int result = ObjectFind(0,name);
   printf("ObjectFind took %i μs", GetMicrosecondCount()-begin);

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) bool result = ObjectDelete(0,name);
   printf("ObjectDelete took %i μs", GetMicrosecondCount()-begin);
  }

Lo sto eseguendo su MT4, non c'è molto in esso.

Esecuzione su MT5, è più di 50 volte più lento.

Qualcuno ha qualche idea del perché?

 
honest_knave: Ah, capisco.

Come nota a margine:

Eseguirlo su MT4, non c'è molto in esso.

Esecuzione su MT5 Il sistema è oltre 50 volte più lento.

Qualcuno ha qualche idea del perché?

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 "ObjectFind()"!
Motivazione: