Erreurs, bugs, questions - page 3108

 
Nikolai Semko #:

Impossible de sauter les nouvelles versions des produits, alors que cela allait bien avant.


On dirait que je ne suis pas celui qui a le problème.
build 3110

Hier, nous avons eu des problèmes de connexion au serveur MetaQuotes-Demo, qui est utilisé, entre autres, pour valider les produits Marketplace.

Nous avons corrigé ce bug hier et revérifié tous les produits dont la validation a échoué pour des raisons techniques.

Nous nous excusons pour ce désagrément.

Si nous avons accidentellement manqué votre produit et que nous ne l'avons pas revérifié, veuillez le faire vous-même. La validation devrait maintenant fonctionner normalement.

 

Voici un exemple de code :

//+------------------------------------------------------------------+
#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)));  // опять штанга
  //-----------------------------------
 }

Résultat :

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

Quelqu'un peut-il expliquer - pourquoi

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

donne

4294966796

et non -500.

Je ne sais pas ce qui se passe dans ma tête... (

 
Mikhail Dovbakh #:

Voici un exemple de code :

Résultat :

Quelqu'un peut-il expliquer - pourquoi

donne

et non -500.

Je ne sais pas ce qui se passe dans ma tête... (

long temp=(long)iNext-iCurrent;

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

Vous avez d'abord réduit iNext à un entier non signé. Ensuite, le résultat entier non signé est converti en long.

Dans mon exemple, iNext est immédiatement converti en type long, donc iCurrent est également converti en type long, mais implicitement. Le résultat est immédiatement converti en long

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

La question était de savoir pourquoi ce type de commande ne donne pas le bon résultat. Je ne peux que supposer que cela dépend de l'ordre hiérarchique des types dans l'expression. Si les types sont dans l'ordre hiérarchique dans l'expression au moment de l'exécution, la réponse est correcte, et si ce n'est pas le cas, alors une conversion de type non explicite violant la hiérarchie peut changer la valeur de la variable.

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

En général, une conversion de type non explicite viole la hiérarchie.

 
MetaQuotes #:

Hier, nous avons eu des problèmes de connexion au serveur MetaQuotes-Demo, qui est utilisé, entre autres, pour valider les produits de la Place de marché.

Nous avons corrigé cette erreur hier et revérifié tous les produits qui n'ont pas passé la validation pour des raisons techniques.

Nous nous excusons pour tout désagrément.

Si nous avons accidentellement manqué votre produit et qu'il n'est pas revalidé, veuillez le faire vous-même. Le contrôle devrait maintenant fonctionner normalement.

Merci !
Tout fonctionne maintenant.
 
Slava #:

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

Vous avez d'abord obtenu que iNext soit réduit à un entier non signé. Ensuite, le résultat entier non signé est converti en long.

Dans mon exemple, iNext est immédiatement converti en type long, donc iCurrent est également converti en type long, mais de manière implicite. Le résultat est immédiatement converti en long

vous pouvez voir pourquoi

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

и

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


donne le bon résultat ?

En suivant votre description , nous commençons par transformer iNext en un entier non signé. Ensuite, le résultat du nombre entier non signé est converti en nombre entier signé.

N'est-ce pas ?

 

Ligne de tendance non magnétisée à la bougie rouge basse(EURUSD, M5 ;échelle de temps précise; magnétisation : 15)


 
Mikhail Dovbakh #:

alors expliquez pourquoi.

и

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


donne le bon résultat ?


Facilement

un nombre entier non signé d'une longueur de 32 bits 4294966796 converti en un nombre entier signé de même dimension donne -500

 
Valeriy Yastremskiy #:

La question était de savoir pourquoi ce type de commande ne donne pas le bon résultat. Je ne peux que supposer que cela dépend de l'ordre hiérarchique des types dans l'expression. Si les types sont dans l'ordre hiérarchique dans l'expression au moment de l'exécution, la réponse est correcte, et si ce n'est pas le cas, alors une conversion de type non explicite violant la hiérarchie peut changer la valeur de la variable.

Zy En général, une conversion de type non explicite et une violation de la hiérarchie.

Je vous ai déjà donné le lien https://www.mql5.com/ru/docs/basis/types/casting

Tout y est dit en détail. Lisez-le du début à la fin sans rien manquer

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

Mes amis, pouvez-vous me dire ce que je dois faire ?

J'ai remarqué que dans une position perdante chez le courtier *** avec une petite déviation - la perte est substantielle.

Dans le cas d'une position rentable, c'est l'inverse. Je l'ai mesuré et vérifié à plusieurs reprises. Dans l'image, vous pouvez voir un profit de 30 pips.

(moins le swap 0,04 et la commission 0,07) devrait être d'environ 2,7 - 2,8. Cependant, il lit et montre 2.12

Soit ils modifient le compteur, soit je ne sais pas. Votre avis, qu'en pensez-vous ?

Dossiers :