Variáveis de Entrada

A classe de armazenamento input define uma variável externa. O modificador input é indicada antes do tipo de dado. Uma variável com o modificador input não pode ser modificada dentro de programas mql5, tais variáveis podem ser acessadas somente para leitura. Valores de variáveis de entrada podem ser modificados pelo usuário somente a partir da janela de propriedades do programa. Le variabili esterne vengono sempre reinizializzate immediatamente prima che OnInit() venga chiamato.

Exemplo:

//--- parâmetros de entrada
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

Variáveis de entrada determinam a entrada de parâmetros de um programa. Eles estão disponíveis a partir da janela de Propriedades de um programa.

Defina um valor para um parâmetro de entrada

 

É possível definir uma outra forma de exibir nomes de parâmetros de entrada na aba Parâmetros de Entrada. Para fazer isso, um comentário string é usado, que deve estar localizado após a descrição de um parâmetro de entrada na mesma linha. Assim, nomes mais compreensivos para o usuário podem ser associados aos parâmetros de entrada.

Exemplo:

//--- parâmetros de entrada
input int            InpMAPeriod=13;         // Período suavizado
input int            InpMAShift=0;           // Deslocamento da linha horizontal
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Método de Suavização

Método razoável de exibir parâmetros de entrada

Observação:Arrays e variáveis de tipos complexos não podem agir como variáveis de entrada.

Observação:O comprimento de um comentário string para as variáveis ​​de entrada não pode exceder 63 caracteres.

 

Passando Parâmetros Ao Chamar Indicadores Customizados a partir de Programas MQL5 #

Indicadores Customizados são chamados usando a função iCustom(). Após o nome do indicador customizado, os parâmetros devem aparecer em estrita conformidade com a declaração das variáveis de entrada deste indicador customizado. Se os parâmetros indicados são em número menor que as variáveis de entrada declaradas no indicador customizado chamado, os parâmetros faltantes são preenchidos com os valores especificados durante a declaração de variáveis.

Se o indicador customizado usar a função OnCalculate do primeiro tipo (isto é, o indicador é calculado usando o mesmo array dos dados), então um dos valores ENUM_APPLIED_PRICE ou o manuseio de um outro indicador deve ser usado como o último parâmetro ao chamar tal indicador customizado. Todos os parâmetros correspondentes às variáveis de entrada devem ser claramente indicados.

Enumerações como Parâmetros de Entrada

Não apenas enumerações internas fornecidos no MQL5, mas também variáveis definidas pelo usuário podem ser usadas como variáveis de entrada (parâmetros de entrada para programas MQL5). Não apenas enumerações internas fornecidos no MQL5, mas também variáveis definidas pelo usuário podem ser usadas como variáveis de entrada (parâmetros de entrada para programas MQL5).

Exemplo:

#property script_show_inputs
//--- dias da semana
enum dayOfWeek 
  {
   S=0,     // Domingo
   M=1,     // Segunda-feira
   T=2,     // Terça-feira
   W=3,     // Quarta-feira
   Th=4,    // Quinta-feira
   Fr=5,    // Sexta-feira,
   St=6,    // Sábado
  };
//--- parâmetros de entrada
input dayOfWeek swapday=W;

A fim de permitir a um usuário selecionar um valor necessário da janela de propriedades durante o início da execução de um script, nós usamos o comando de pré-processamento #property script show inputs. Iniciamos o script e podemos escolher um dos valores da enumeração dayOfWeek da lista. Iniciamos o script EnumInInput e vamos para a aba Parâmetros de Entrada. Por default, o valor de swapday (dia de cobrança tripla de swap) é Wednesday (W = 3), mas nós podemos especificar qualquer outro valor, e usar este valor para mudar a operação do programa.

Exemplo de uma enumeração customizada como um parâmetro de entrada

O número de possíveis valores de uma enumeração é limitada. A fim de obter o código de erro, a função GetLastError() deve ser chamada. Nomes mnemônicos de membros da enumeração são usados para valores exibidos na lista. Se um comentário é associado com um nome mnemônico, como mostrado no exemplo, o conteúdo do comentário é usado ao invés do nome mnemônico.

Cada valor da enumeração dayOfWeek tem seu valor de 0 a 6, mas na lista de parâmetros, os comentários especificados para cada valor será exibido. Isso fornece flexibilidade adicional para escrever programas com descrições mais claras dos parâmetros de entrada.

 

Variáveis com Modificador sinput #

Variáveis com modificador input não apenas permitem definir parâmetros externos ao iniciar programas mas também são necessárias na otimização de estratégias de negociação no Provador de Estratégia. Cada variável de entrada excluindo-se o do tipo string pode ser usada em optimização.

Algumas vezes, é necessário excluir alguns parâmetros externos do programa da área total de passos do Provador de Estratégia. O modificador de memória sinput foi introduzido para tais casos. sinput significa declaração de variável externa estática (sinput = static input). Significa que a declaração seguinte em um código Expert Advisor

sinput       int layers=6;   // Número de camadas

será equivalente a declaração completa

static input int layers=6;   // Número de camadas

A variável declarada com o modificador sinput é um parâmetro de entrada de um programa MQL5. O valor deste parâmetro pode ser modificado ao iniciar o programa. Entretanto, esta variável não pode ser usado na otimização de parâmetros de entrada. Em outras palavras, seu valor não é enumerado ao procurar pelo melhor conjunto ajustado de parâmetros a uma condição específica.

Parâmetro sinput no Provador de Estratégia

O Expert Advisor mostrado acima tem 5 parâmetros externos. "Número de camadas" é declarado para ser sinput e igual a 6. Este parâmetro não pode ser modificado durante um otimização de estratégia de negociação. Podemos especificar o valor necessário para ele ser usado mais adiante. Os campos Iniciar, Passo, Parar não ficam disponíveis para tal variável.

Portanto, usuários não serão capazes de otimizar este parâmetro após especificarmos o modificador sinput para a variável. Em outras palavras, o usuário do terminal não será capaz de definir os valores inicial e final para ele no Provador de Estratégia para enumeração automática na faixa especificada durante uma otimização.

Porém, existe uma exceção a esta regra: variáveis sinput podem variar em tarefas de optimização usando a função ParameterSetRange(). Esta função foi introduzida especificamente para o programa controlar os conjuntos de valores disponíveis para qualquer variável input, incluindo aquelas declaradas como static input (sinput). A função ParameterGetRange() permite receber os valores variáveis ​​de entrada quando a otimização é iniciada (com o manipulador OnTesterInit()) e redefine uma alteração do valor do passo e um intervalo, no qual uma otimização dos valores dos parâmetros serão enumerados.

Desta forma, ao combinando o modificador sinput com duas funções que trabalham com parâmetros de entrada, isso permite criar regras flexíveis para definir intervalos de otimização de parâmetros de entrada que dependem dos valores de outros parâmetros de entrada.

 

Agrupando Parâmetros de Entrada #

Para facilitar o trabalho com programas MQL5, os parâmetros de entrada podem ser divididos em blocos nomeados usando a palavra-chave group. Isso permite que você separe visualmente alguns parâmetros de outros com base na lógica incorporada neles.

input group           "Nome do grupo"
input int             variable1 = ...
input double          variable1 = ...
input diuble          variable3= ...

Todos os parâmetros de entrada após essa declaração são visualmente agrupados no grupo especificado, facilitando para o usuário do programa MQL5 configurar parâmetros ao executar no gráfico ou no testador de estratégia. A indicação de cada grupo é válida até que apareça uma declaração do grupo:

input group           "Nome do grupo #1"
input int             group1_var1 = ...
input double          group1_var2 = ...
input double          group1_var3 = ...
 
input group           "Nome do grupo #2
input int             group2_var1 = ...
input double          group2_var2 = ...
input double          group2_var3 = ...

Exemplo de EA no qual o bloco de parâmetros de entrada é dividido segundo sua finalidade:

input group           "Signal"
input int             ExtBBPeriod   = 20;       // Bollinger Bands period
input double          ExtBBDeviation2.0;      // deviation
input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // BB timeframe
 
input group           "Trend"
input int             ExtMAPeriod  = 13;        // Moving Average period
input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // MA timeframe
 
input group           "ExitRules"
input bool            ExtUseSL      = true;     // use StopLoss
input int             Ext_SL_Points = 50;       // StopLoss in points
input bool            ExtUseTP      = false;    // use TakeProfit
input int             Ext_TP_Points = 100;      // TakeProfit in points
input bool            ExtUseTS      = true;     // use Trailing Stop
input int             Ext_TS_Points = 30;       // Trailing Stop in points
 
input group           "MoneyManagement"
sinput double         ExtInitialLot = 0.1;      // initial lot value
input bool            ExtUseAutoLot = true;     // automatic lot calculation
 
input group           "Auxiliary"
sinput int            ExtMagicNumber = 123456;  // EA Magic Number
sinput bool           ExtDebugMessagetrue;    // print debug messages

Ao iniciar este EA no testador de estratégia, você pode clicar duas vezes no nome do grupo para recolher e expandir o bloco de parâmetros de entrada, além de selecionar todos os seus parâmetros com um clique na caixa de seleção do grupo para otimização.

Agrupando os parâmetros de entrada do EA no testador de estratégia

Veja Também

iCustom, Enumerações, Propriedades de Programas