Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 681
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Es posible operar con acciones MT5 en Otkritie o no?
¡Vladimir, no confundas al hombre!
De la documentación:
https://www.mql5.com/ru/docs/basis/variables/globalEl 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.
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 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:
{
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é).
Vladimir tiene parte de razón.
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
);
}
//+------------------------------------------------------------------+
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.
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?