Questions des débutants MQL5 MT5 MetaTrader 5 - page 681

 
post_ek:
Est-il possible de négocier des actions MT5 dans Otkritie ou non ?
Vous pouvez ! Il s'agira uniquement d'actions ou de contrats à terme (une seule plateforme MT5 est fournie gratuitement). Pour le second, vous devrez payer une redevance mensuelle. Autant que je m'en souvienne, c'est le cas. Vous trouverez les détails dans mon compte personnel sur Otkritie.
 
Alexey Kozitsyn:

Vladimir, n'embrouille pas l'homme !

Dans la documentation :

https://www.mql5.com/ru/docs/basis/variables/global
L'habitude de ne pas initialiser les variables est préjudiciable, car ce comportement conduit souvent à un "cygne noir". C'est pourquoi vous devriez en faire une règle - créer une variable, l'initialiser en une fois.
 
Vladimir Karputov:
L'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.
Arrêtez, arrêtez, arrêtez. Ne confondons pas "faire une règle" et"il est nécessaire d'initialiser (attribuer des valeurs à) ces variables demanière explicite dans OnInit()" - ce qui est franchement faux !
 
Alexey Kozitsyn:
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 Karputov:
Vous n'avez pas besoin d'initialiser les variables - l'argent est à vous.
Encore une fois. Ne confondez pas opportunités et responsabilités !
 

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 :

void OnTick ()

{

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).

 
Vladislav Andruschenko:

Vladimir a en partie raison.

Je n'appelle en aucun cas à laisser des variables non initialisées. Mais, lorsque vous donnez un conseil à un débutant, ne dites pas que votre conseil est la seule bonne solution, d'autant plus qu'il ne l'est pas.
 
Vladimir Karputov:
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
         );
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

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.

 
Vladimir Karputov:

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 ?