Questions des débutants MQL5 MT5 MetaTrader 5 - page 681
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Est-il possible de négocier des actions MT5 dans Otkritie ou non ?
Vladimir, n'embrouille pas l'homme !
Dans la documentation :
https://www.mql5.com/ru/docs/basis/variables/globalL'habitude de ne pas initialiser les variables est préjudiciable, car ce comportement aboutit souvent à un "cygne noir". Par conséquent, la règle empirique est de créer une variable et de l'initialiser immédiatement.
Whoa, whoa, whoa. Ne confondons pas "prenez-le comme une règle" et"vous devez explicitement initialiser (assigner des valeurs à) ces variablesdans OnInit()" - ce qui est carrément faux !
Vous n'avez pas besoin d'initialiser les variables - l'argent est à vous.
Vladimir a en partie raison.
Voici un exemple,
Il était une fois, je ne me souviens plus quand, j'ai déclaré une variable
bool STOP ;
et l'utiliser réellement dans OnTick .
Par défaut, le bool doit être false
Je l'ai fait :
{
if(!STOP) {Print("STOP");return;}
}
Le code n'a pas fonctionné parce que je n'avais pas spécifié boolSTOP=false;
Cette situation s'est produite une fois, sur une certaine version, et je ne l'ai pas reproduite par la suite (il y avait un bogue avec la version ou autre chose - je ne sais pas).
Vladimir a en partie raison.
L'habitude de la non-initialisation des variables est préjudiciable, car ce comportement conduit souvent à un "cygne noir". Par conséquent, vous devriez en faire une règle - créer une variable, l'initialiser immédiatement.
Vous pouvez perdre les valeurs des variables lorsque vous changez d'horizon temporel pendant leur initialisation dans OnInit() - d'où des erreurs possibles dans la logique du programme.
//| exTextInitGlobalVariables.mq5 |
//| Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
//--- input parameters
input int TestInput=0; // Внешняя переменная
int testInputGlobal=TestInput; // Значение внешней переменной, присвоенное на глобальном уровне
int testInputInit; // Значение внешней переменной, присвоенное в OnInit()
//--- global variables
int TestValueGlobalNoInitNo; // Не инициализирована значением нигде
int TestValueGlobalYesInitNo=0; // Инициализирована значением 0 при объявлении, не инициализирована в OnInit()
//---
int TestValueGlobalNoInitYes; // Не инициализирована значением при объявлении, инициализирована в OnInit() нулём
int TestValueGlobalYesInitYes=0; // Инициализирована нулём и при объявлении, и в OnInit()
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
testInputInit=TestInput;
TestValueGlobalNoInitYes=0;
TestValueGlobalYesInitYes=0;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
testInputInit++;
testInputGlobal++;
TestValueGlobalNoInitNo++;
TestValueGlobalNoInitYes++;
TestValueGlobalYesInitNo++;
TestValueGlobalYesInitYes++;
Comment
(
"\n"+"============================================="+
"\n"+"Значение внешней переменной TestInput(",TestInput,"), присвоенное в OnInit(): ",(string)testInputGlobal+
"\n"+"Значение внешней переменной TestInput(",TestInput,"), присвоенное на глобальном уровне: ",(string)testInputGlobal+
//---
"\n"+"============================================="+
"\n"+"Не инициализирована значением нигде: ",(string)TestValueGlobalNoInitNo+
"\n"+"Инициализирована значением 0 при объявлении, не инициализирована в OnInit(): "+(string)TestValueGlobalYesInitNo+
//---
"\n"+"============================================="+
"\n"+"Не инициализирована значением при объявлении, инициализирована в OnInit() нулём: "+(string)TestValueGlobalNoInitYes+
"\n"+"Инициализирована нулём и при объявлении, и в OnInit(): "+(string)TestValueGlobalYesInitYes
);
}
//+------------------------------------------------------------------+
Vous pouvez perdre les valeurs des variables lorsque vous changez d'horizon temporel pendant leur initialisation dans OnInit() - d'où des erreurs possibles dans la logique du programme.
Si vous ne prenez pas en compte :
Init
Immédiatement après que le terminal client ait chargé le programme (Expert Advisor ou indicateur personnalisé) et commencé l'initialisation des variables globales, l'événement Init sera envoyé, qui est traité par la fonctionOnInit(), si elle en a une. Cet événement est également généré après un changement de titre et/ou de période graphique, après une recompilation du programme dans MetaEditor, après un changement des paramètres d'entrée d'un Expert Advisor ou d'une fenêtre de réglage d'un indicateur personnalisé. Le conseiller expert est également initialisé après le changement de compte. L'événement Init n'est pas généré pour les scripts.
alors tu peux faire tout ce que tu veux.
Si vous ne prenez pas en compte :
Init
Immédiatement après que le terminal client ait chargé un programme (un Expert Advisor ou un indicateur personnalisé) et commencé l'initialisation des variables globales, l'événement Init sera envoyé, qui sera traité parOnInit(), s'il en a un. Cet événement est également généré après un changement de titre et/ou de période graphique, après une recompilation du programme dans MetaEditor, après un changement des paramètres d'entrée d'un Expert Advisor ou d'une fenêtre de réglage d'un indicateur personnalisé. Le conseiller expert est également initialisé après le changement de compte. L'événement Init n'est pas généré pour les scripts.
Vous pouvez faire tout ce que vous voulez.
Je parle de Thomas, il parle du vôtre...
Comment communiquer dans une telle situation ?
Je parle d'une habitude pernicieuse d'initialiser inconsidérément les variables globales dans OnInit().
En même temps, vous imposez votre habitude néfaste à tous les nouveaux arrivants, sans les remettre en question. Vous élevez une génération d'E.S.T. ? Des clones de ceux qui ne pensent pas, mais suivent aveuglément leur sensei ?