Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 681

 
post_ek:
¿Es posible operar con acciones MT5 en Otkritie o no?
Sí que puedes. Sólo que será de acciones o de futuros (sólo se da una plataforma MT5 gratis). Por la segunda, tendrás que pagar una cuota mensual. Que yo recuerde, es así. Busca los detalles en mi cuenta personal en Otkritie.
 
Alexey Kozitsyn:

¡Vladimir, no confundas al hombre!

De la documentación:

https://www.mql5.com/ru/docs/basis/variables/global
El hábito de desinicializar las variables es perjudicial, porque este comportamiento suele conducir a un "cisne negro". Por eso debes convertirlo en una regla: crear una variable, inicializarla de una vez.
 
Vladimir Karputov:
El hábito de desinicializar las variables es perjudicial, porque este comportamiento suele dar lugar a un "cisne negro". Por lo tanto, la regla general es crear una variable e inicializarla inmediatamente.
Para, para, para. No confundamos "hacer una regla" y"es necesario inicializar explícitamente (asignar valores a) estas variablesen OnInit()" - ¡lo cual es francamente falso!
 
Alexey Kozitsyn:
Whoa, whoa, whoa. No confundas "tómalo como una regla" y"debes inicializar explícitamente (asignar valores a) estas variablesen OnInit()" - ¡lo cual es descaradamente falso!
No tienes que inicializar las variables, el dinero es tuyo.
 
Vladimir Karputov:
No tienes que inicializar las variables, el dinero es tuyo.
Una vez más. No confunda las oportunidades con las responsabilidades.
 

Vladimir tiene parte de razón.

He aquí un ejemplo,

Una vez, no recuerdo cuándo, declaré una variable

bool STOP;

y utilizarlo realmente en OnTick .

Por defecto, el bool debe ser falso

Lo hice:

void OnTick ()

{

if(!STOP) {Print("STOP");return;}

}

El código no funcionó porque no había especificado boolSTOP=false;

Esta situación ocurrió una vez, en alguna compilación, y no la reproduje después (hubo algún error con la compilación o algo más - no lo sé).

 
Vladislav Andruschenko:

Vladimir tiene parte de razón.

No estoy llamando en absoluto a dejar las variables sin inicializar. Pero, cuando des un consejo a un novato, no digas que tu consejo es la única solución correcta, sobre todo porque no lo es.
 
Vladimir Karputov:
El hábito de la desinicialización de variables es perjudicial, porque este comportamiento a menudo conduce a un "cisne negro". Por lo tanto, debe hacer una regla - crear una variable, inicializarla inmediatamente.

Se pueden perder los valores de las variables al cambiar de marco temporal durante su inicialización en OnInit() - de ahí los posibles errores en la lógica del programa.

//+------------------------------------------------------------------+
//|                                    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:

Se pueden perder los valores de las variables al cambiar de marco temporal durante su inicialización en OnInit() - de ahí los posibles errores en la lógica del programa.

Si no se tiene en cuenta:

Init

Inmediatamente después de que el terminal cliente cargue el programa (Asesor Experto o indicador personalizado) y comience la inicialización de las variables globales, se enviará el evento Init, que es manejado por la funciónOnInit(), si la tiene. Este evento también se genera después de un cambio de valor y/o de período del gráfico, después de recompilar el programa en el MetaEditor, después de un cambio de parámetros de entrada de un Asesor Experto o de una ventana de configuración de indicadores personalizados. El Asesor Experto también se inicializa después de cambiar la cuenta. El evento Init no se genera para los scripts.

entonces puedes hacer lo que quieras.

 
Vladimir Karputov:

Si no se tiene en cuenta:

Init

Inmediatamente después de que el terminal cliente cargue un programa (un Asesor Experto o un indicador personalizado) y comience la inicialización de las variables globales, se enviará el evento Init, que es manejado porOnInit(), si tiene uno. Este evento también se genera después de un cambio de valor y/o de período del gráfico, después de recompilar el programa en el MetaEditor, después de un cambio de parámetros de entrada de un Asesor Experto o de una ventana de configuración de indicadores personalizados. El Asesor Experto también se inicializa después de cambiar la cuenta. El evento Init no se genera para los scripts.

Puedes hacer lo que quieras.

Yo hablo de Thomas, él habla del tuyo...

¿Cómo se comunica en una situación así?

Hablo de un hábito pernicioso de inicializar irremediablemente las variables globales en OnInit().

Al mismo tiempo, impone su hábito perjudicial a todos los recién llegados de forma incuestionable. ¿Estás criando una generación de E.S.T.? ¿Clones de los que no piensan, sino que siguen ciegamente a su sensei?

Razón de la queja: