La différence entre extern et input - page 4

 
Igor Makanu:

Comment déclarer une variable de type enum?

conversion enum implicite tst1.mq5 24 17


vous pouvez aussi vérifier EnumToString()...


Je pense que le type sans variables déclarées a juste été rejeté de la compilation comme non utilisé.

Je veux dire, vous pouvez accidentellement déclarer une variable avec le même nom que dans l'enum déjà utilisé et ensuite avoir un temps très long et douloureux à chercher où et où je me suis tiré dans le genou

 
Maksim Neimerik:
Alors quel est le verdict, messieurs ? Si j'écris un programme .mq5 avec .mqh (#include), je peux écrire extern en toute sécurité et ne pas avoir peur de conséquences inattendues (comme je le faisais dans mql4), ou utiliser input ?

Dans MT5, utilisez l'entrée pour déclarer des variables externes. Extern dans MT5 a un objectif différent.

 
Dmitry Fedoseev:

Dans MT5, utilisez l'entrée pour déclarer des variables externes. Extern dans MT5 a un objectif différent.

Pourquoi ne pouvez-vous pas utiliser extern dans MT5 ? - J'ai compilé mon exemple dans MT5, je ne vois pas de différence fondamentale.

 
Igor Makanu:

Pourquoi l'extern ne peut pas être utilisé dans MT5 ? - J'ai compilé mon exemple dans MT5, je ne vois pas de différence fondamentale.

Parce que les gens, par habitude de l'ancien MQL4, essaient d'utiliser extern pour les paramètres d'entrée.

Et dans les nouveaux MQL4 et MQL5, input est utilisé avec #property strict, et extern est utilisé à d'autres fins.

C'est pourquoi il a été dit de ne pas utiliser extern.

 
Artyom Trishkin:

Parce que les gens, par habitude de l'ancien MQL4, essaient d'utiliser extern pour les paramètres d'entrée.

Et dans les nouveaux MQL4 et MQL5, input est utilisé avec #property strict, et extern est utilisé à d'autres fins.

C'est pourquoi je vous ai dit de ne pas utiliser extern.

Ainsi, tout le monde essaie d'écrire beaucoup de bukuffs et le résultat est qu'ils ne devraient PAS être utilisés UNIQUEMENT dans MQL5 et ne devraient PAS être utilisés ailleurs)))).


ok, voici le grand argument, imho - si vous voyez extern dans un vieux code, remplacez-le par input et corrigez tous les avertissements, et que la puissance de MQL soit avec vous ! !!!

 
Igor Makanu:

Vous voyez, tout le monde essaie d'écrire beaucoup de bukuffs et finit par dire qu'il ne faut PAS l'utiliser UNIQUEMENT dans MT5 ou qu'il ne faut l'utiliser nulle part du tout )))).


Ok, voici le grand argument, imho - si vous voyez extern dans un vieux code, remplacez-le par input et corrigez tous les avertissements, et que la puissance de MQL soit avec vous ! !!!.

Je ne comprends pas grand-chose à ce qui est écrit ici.

Mais je ne voulais pas utiliser extern dans MQL5 et MQL4 avec #property strict pour déclarer les paramètres externes des programmes, mais l'utiliser dans le but décrit (vaguement) dans l'aide.

 

J'ai réfléchi, juste une idée... Dans MQL5, le travail avec iCustom() n'est-il pas beaucoup plus problématique que dans MQL4 (ou plus généralement avec les appels d'indicateurs dans MQL4) ? C'est vrai ? Si oui, je vais continuer.

Je viens de commencer à apprendre un peu MQL5...

Je vais probablement commencer un nouveau sujet.
 
Maksim Neimerik:
Je pense juste... Dans MQL5, il est beaucoup plus difficile de travailler avec iCustom() que dans MQL4 (ou généralement avec les indicateurs appelant dans MQL4), n'est-ce pas ? C'est vrai ? Si c'est le cas, je vais continuer.

pas plus problématique, c'est juste que dans MQL5 vous devez travailler avec iCustom() en deux étapes :

1. obtenir la poignée de l'indicateur

2. demander les valeurs des tampons indicateurs par CopyBuffer()


Dans MQL4 - iCustom() fonctionne comme un appel de fonction avec des paramètres - vous l'appelez, vous le recevez.

dans MQL5 cela fonctionne de la même manière - les développeurs ont volontairement réduit la fonctionnalité des fonctions intégrées et ont rendu l'accès aux séries temporelles peu pratique - ils ont juste récemment ajouté iClose(), iHigh() à MQL5, avant il fallait copier les données dans un tableau comme avec CopyBuffer()

en général, MT5 a plus d'écriture que MT4

 
Igor Makanu:

pas plus problématique, c'est juste que dans MQL5 vous devez travailler avec iCustom() en deux étapes :

1. obtenir la poignée de l'indicateur

2. demander les valeurs des tampons indicateurs par CopyBuffer()


Dans MQL4 - iCustom() fonctionne comme un appel de fonction avec des paramètres - vous l'appelez, vous le recevez.

dans MQL5 cela fonctionne de la même manière - les développeurs ont volontairement réduit la fonctionnalité des fonctions intégrées et ont rendu l'accès aux séries temporelles peu pratique - ils ont récemment ajouté iClose(), iHigh() à MQL5, avant il fallait copier les données dans un tableau comme avec CopyBuffer()

en général, MT5 a plus d'écriture que MT4

https://www.mql5.com/ru/forum/316800

MQL4 & MQL5
MQL4 & MQL5
  • 2019.06.29
  • www.mql5.com
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике...
 

Malheureusement, l'implémentation des variables externes dans MQL5 n'est pas finalisée, et c'est pourquoi je ne recommande pas de l'utiliser - cela pourrait causer des problèmes. Je veux dire le manque de contrôle sur l'initialisation obligatoireet unique de ces variables.

Par exemple, vous pouvez l'écrire de telle manière :

extern int a=1;
extern int a=2;

et il n'y aura pas d'erreur. Imaginez que ces initialisations soient effectuées dans des plugins différents. Le résultat final dépendra alors de l'ordre dans lequel ces fichiers sont inclus.

Ou nous pouvons l'écrire comme ceci (fichier exécutable) :

extern int a;

void OnStart() { Print(a); }

ici nous n'avons pas initialisé la variable externe du tout, mais il n'y a pas d'erreur non plus.

Par conséquent, il n'y a aucun contrôle sur le fait que les mêmes variables soient définies ou non dans d'autres fichiers. Vous pouvez accidentellement changer son nom, mais le programme compilera comme si rien ne s'était passé, bien que dans d'autres fichiers nous ayons une variable avec un nom différent.

Dans l'ensemble, il ne va nulle part. C'est pourquoi il est préférable d'utiliser des fonctions plutôt que des variables externes. Elles sont garanties d'avoir une seule définition, ni plus ni moins.