Errori, bug, domande - pagina 3108

 
Nikolai Semko #:

Capito.
Oh, questo corridoio dell'eclissi...

Ho del tempo nella mia demo da quando non c'è connessione e sono passate 40 ore.

 
Nikolai Semko #:

Non può saltare le nuove versioni dei prodotti, anche se prima andava bene.


Sembra che non sia io ad avere il problema.
build 3110

Ieri abbiamo avuto problemi di connessione al server MetaQuotes-Demo, che viene utilizzato per convalidare i prodotti Marketplace, tra le altre cose.

Abbiamo risolto questo bug ieri e abbiamo ricontrollato tutti i prodotti che non sono stati validati per motivi tecnici.

Ci scusiamo per l'inconveniente.

Se abbiamo accidentalmente mancato il tuo prodotto e non l'abbiamo ricontrollato, per favore fallo tu stesso. La convalida dovrebbe ora funzionare normalmente.

 

Ecco un codice di esempio:

//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
void OnStart()
  {
  uint iCurrent =722;
  int  iinterval=1000;         
  int  iNext=(int)(iCurrent-iinterval/2); // 722-500=222
  Print ("Current :",iCurrent);
  Print ("iNext   :",iNext);
  long  temp=(long)(iNext-iCurrent); //предупреждений нет ожидаем Лонг -500
  Print ( " temp (long):",temp);//int - uint ->uint Result: uint -- oшибка!

  Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех  
  Print ( " delta(&long)"+string((long)(iNext-iCurrent)));  // опять штанга
  //-----------------------------------
 }

Risultato:

2021.11.23 13:07:35.931 testUint (Volatility 75 Index,M15)      Current :722
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)      iNext   :222
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       temp (long):4294966796
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       delta(&int)-500
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       delta(&long)4294966796

Qualcuno può spiegare perché

long  temp=(long)(iNext-iCurrent);

4294966796

e non -500.

Non so cosa sta succedendo nella mia testa... (

 
Mikhail Dovbakh #:

Ecco un codice di esempio:

Risultato:

Qualcuno può spiegare perché

e non -500.

Non so cosa sta succedendo nella mia testa... (

long temp=(long)iNext-iCurrent;

https://www.mql5.com/ru/docs/basis/types/casting

Prima hai ridotto iNext a un intero senza segno. Poi il risultato intero senza segno viene convertito in un long.

Nel mio esempio, iNext è immediatamente castato al tipo long, quindi anche iCurrent è castato al tipo long, ma implicitamente. Il risultato è immediatamente convertito in lungo

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Slava #:

La domanda era perché questo tipo di ordine non dà il giusto risultato. Posso solo supporre che dipenda dall'ordine della gerarchia dei tipi nell'espressione. Se i tipi sono in ordine gerarchico nell'espressione a runtime, la risposta è corretta, e se non lo sono, allora una conversione di tipo non esplicita che viola la gerarchia può cambiare il valore della variabile.

long temp=(long)((int)iNext-(uint)iCurrent); 

In generale, una conversione di tipo non esplicita viola la gerarchia.

 
MetaQuotes #:

Ieri abbiamo avuto problemi di connessione al server MetaQuotes-Demo, che viene utilizzato, tra le altre cose, per convalidare i prodotti del Marketplace.

Abbiamo corretto questo errore ieri e ricontrollato tutti i prodotti che non hanno superato la convalida per motivi tecnici.

Ci scusiamo per qualsiasi inconveniente.

Se ci siamo accidentalmente persi il tuo prodotto e non è stato riconvalidato, per favore fallo tu stesso. Il controllo dovrebbe ora funzionare normalmente.

Grazie!
Ora tutto funziona.
 
Slava #:

https://www.mql5.com/ru/docs/basis/types/casting

Avete prima ottenuto il cast di iNext in un intero senza segno. Poi il risultato intero senza segno viene convertito in long.

Nel mio esempio, iNext è immediatamente castato al tipo long, quindi anche iCurrent è castato al tipo long, solo implicitamente. Il risultato è immediatamente castato in long

si può vedere perché

 Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех 

и

int itemp=(int)(iNext-iCurrent); 


dà il risultato giusto?

Seguendo la vostra descrizione , iNext viene prima castato in un intero senza segno. Poi il risultato intero senza segno viene convertito in intero con segno.

Giusto?

 

Linea di tendenza non magnetizzata alla candela rossa bassa(EURUSD, M5;scala temporale precisa; magnetizzazione: 15)


 
Mikhail Dovbakh #:

poi spiegare perché.

и

int itemp=(int)(iNext-iCurrent); 


dà il risultato giusto?


Facilmente

un intero senza segno con una lunghezza di 32 bit 4294966796 quando viene convertito in un intero firmato della stessa dimensione dà -500

 
Valeriy Yastremskiy #:

La domanda era perché questo tipo di ordine non dà il giusto risultato. Posso solo supporre che dipenda dall'ordine della gerarchia dei tipi nell'espressione. Se i tipi sono in ordine gerarchico nell'espressione a runtime, la risposta è corretta, e se non lo sono, allora una conversione di tipo non esplicita che viola la gerarchia può cambiare il valore della variabile.

Zy In generale una conversione di tipo non esplicita e una violazione della gerarchia.

Ti ho già dato il link https://www.mql5.com/ru/docs/basis/types/casting

Dice tutto in grande dettaglio. Leggilo dall'inizio alla fine senza perdere nulla

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5