Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 681

 
post_ek:
Então é ou não possível negociar acções MT5 na Otkritie?
Pode! Apenas serão acções ou futuros (apenas uma plataforma MT5 é dada gratuitamente). Pela segunda, terá de pagar uma taxa mensal. Tanto quanto me lembro, é assim. Procurar detalhes na minha conta pessoal na Otkritie.
 
Alexey Kozitsyn:

Vladimir, não confunda o homem!

A partir da documentação:

https://www.mql5.com/ru/docs/basis/variables/global
O hábito de desinicializar variáveis é prejudicial, uma vez que este comportamento conduz frequentemente a um "cisne negro". É por isso que deve fazer dela uma regra - criar uma variável, rubricá-la de imediato.
 
Vladimir Karputov:
O hábito de não inicializar variáveis é prejudicial, porque este comportamento resulta frequentemente num "cisne negro". Portanto, a regra geral é criar uma variável e rubricá-la imediatamente.
Pare, pare, pare, pare. Não confundamos "fazer uma regra" e"é necessário inicializar explicitamente (atribuir valores a) estas variáveisno OnInit()" - o que é francamente falso!
 
Alexey Kozitsyn:
Whoa, whoa, whoa, whoa. Não confundamos "tomar como regra" e"deve rubricar explicitamente (atribuir valores a) estas variáveisno OnInit()" - o que é flagrantemente falso!
Não é necessário rubricar as variáveis - o dinheiro é seu.
 
Vladimir Karputov:
Não é necessário rubricar as variáveis - o dinheiro é seu.
Mais uma vez. Não confunda oportunidades com responsabilidades!
 

Vladimir está parcialmente certo.

Aqui está um exemplo,

Era uma vez, não me lembro quando, declarei uma variável

bool STOP;

e utilizá-lo efectivamente no OnTick .

Por defeito, o bool deve ser falso

Eu fi-lo:

void OnTick ()

{

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

}

O código não funcionou porque eu não tinha especificado boolSTOP=false;

Esta situação ocorreu uma vez, em alguma construção, e eu não a reproduzi mais tarde (havia algum bug com a construção ou outra coisa qualquer - não sei).

 
Vladislav Andruschenko:

Vladimir está parcialmente certo.

Não estou de forma alguma a chamar para deixar as variáveis por iniciar. Mas, quando der conselhos a um novato, não diga que o seu conselho é a única solução certa, especialmente porque não é.
 
Vladimir Karputov:
O hábito da desinicialização de variáveis é prejudicial, porque este comportamento conduz frequentemente a um "cisne negro". Por conseguinte, deve fazer dela uma regra - criar uma variável, inicializá-la imediatamente.

Pode perder valores variáveis ao mudar os períodos de tempo durante a sua inicialização no OnInit() - daí possíveis erros na lógica do 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:

Pode perder valores variáveis ao mudar os períodos de tempo durante a sua inicialização no OnInit() - daí possíveis erros na lógica do programa.

Se não tiveres em conta:

Init

Imediatamente após o terminal do cliente carregar o programa (Expert Advisor ou indicador personalizado) e iniciar a inicialização das variáveis globais, o Init() será enviado, que é tratado pela funçãoOnInit(), se tiver uma. Este evento também é gerado após uma mudança de segurança e/ou de período gráfico, após recompilar o programa no MetaEditor, após uma mudança dos parâmetros de entrada de um Expert Advisor ou uma janela de definição de indicadores personalizada. O Conselheiro Especialista também é inicializado após a conta ter sido alterada. O evento Init não é gerado para scripts.

então pode fazer o que quiser.

 
Vladimir Karputov:

Se não tiveres em conta:

Init

Imediatamente após o terminal do cliente carregar um programa (um Expert Advisor ou um indicador personalizado) e iniciar a inicialização de variáveis globais, o Init() será enviado, que é tratado peloOnInit(), se tiver um. Este evento também é gerado após uma mudança de segurança e/ou de período gráfico, após recompilar o programa no MetaEditor, após uma mudança dos parâmetros de entrada de um Expert Advisor ou uma janela de definição de indicadores personalizada. O Conselheiro Especialista também é inicializado após a conta ter sido alterada. O evento Init não é gerado para scripts.

Pode fazer tudo o que quiser.

Falo de Tomás, ele fala de Vosso...

Como se comunica em tal situação?

Falo de um hábito pernicioso de inicializar irreflectidamente variáveis globais no OnInit().

Ao mesmo tempo, impõe o seu hábito prejudicial a todos os recém-chegados de uma forma inquestionável. Está a criar uma geração de E.S.T.? Clones daqueles que não pensam, mas seguem cegamente o seu sentidoi?

Razão: