Variabili di Input

La classe di memorizzazione input definisce la variabile esterna. Il modificatore input viene indicato prima del tipo di dati. Una variabile con il modificatore input non può essere modificata all'interno dei programmi MQL5, tali variabili sono accessibili in sola lettura. I valori delle variabili di ingresso possono essere modificati solo dall'utente dalla finestra delle proprietà del programma. Le variabili esterne vengono sempre reinizializzate immediatamente prima che OnInit() venga chiamato.

The maximum length of input variable names is 63 characters. For the input parameter of string type, the maximum value length (string length) can be from 191 to 253 characters (see the Note). The minimum length is 0 characters (the value is not set).

Esempio:

//--- parametri di input
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

Variabili di input determinano i parametri di input di un programma. Esse sono disponibili nella finestra Proprietà di un programma.

Impostare un valore per un parametro di input

 

È possibile impostare un altro modo per visualizzare i nomi dei parametri di input nella scheda Input. Per fare questo, viene utilizzato un commento stringa, che dovrebbe trovarsi dopo la descrizione di un parametro di input nella stessa riga. Così, nomi più comprensibili per un utente possono essere abbinati a parametri di input.

Esempio:

//--- parametri di input
input int            InpMAPeriod=13;         // Periodo di smussamento
input int            InpMAShift=0;           // Slittamento linea orizziontale
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Metodo di smussamento

Un metodo ragionevole per visualizzare i parametri di input

Nota: Array e variabili di tipo complesso non possono agire come variabili di input.

Nota: La lunghezza di un di un commento string per le variabili di input non può superare i 63 caratteri.

Note: For input variables of string type, the limitation of the value length (string length) is set by the following conditions:

  • the parameter value is represented by the "parameter_name=parameter_value" string ('=' is considered),
  • maximum representation length of 255 characters (total_length_max=255 or 254 characters excluding '='),
  • maximum length of the parameter_name_length string parameter = 63 characters.

Thus, the maximum string size for a string parameter is calculated using the equation:

parameter_value_length=total_length_max-parameter_name_length=254-parameter_name_length

This provides the maximum string size from 191 (parameter_name_length=63) to 253 characters (parameter_name_length=1).

 

Passaggio di parametri al momento della chiamata Indicatori personalizzati da Programmi MQL5 #

Gli indicatori personalizzati vengono chiamati con la funzione iCustom(). Dopo il nome dell' indicatore personalizzato, i parametri dovrebbero andare in stretta conformità con la dichiarazione delle variabili di input di questo indicatore personalizzato. Se i parametri indicati sono meno delle variabili di input dichiarate nell'indicatore personalizzato chiamato, i parametri mancanti vengono riempiti con i valori specificati durante la dichiarazione delle variabili.

Se l'indicatore personalizzato utilizza la funzione OnCalculate del primo tipo (cioè, l'indicatore è calcolato utilizzando lo stesso array di dati), allora uno dei valori ENUM_APPLIED_PRICE o l'handle di un altro indicatore deve essere utilizzato come ultimo parametro quando si chiama un indicatore personalizzato. Tutti i parametri relativi alle variabili di input devono essere chiaramente indicati.

Enumerazioni come Parametri di Input

Non solo le enumerazioni built-in fornite in MQL5, ma anche variabili definite dall'utente possono essere utilizzate come variabili di input (parametri di input per programmi MQL5). Per esempio, si può creare l'enumerazione dayOfWeek, descrivendo giorni della settimana, ed utilizzare la variabile di input per specificare un particolare giorno della settimana, non come un numero, ma in modo più comune.

Esempio:

#property script_show_inputs
//--- giorno della settimana
enum dayOfWeek 
  {
   S=0,     // Domenica
   M=1,     // Lunedì
   T=2,     // Martedì
   W=3,     // Mercoledì
   Th=4,    // giovedì
   Fr=5,    // Venerdì,
   St=6,    // Sabato
  };
//--- parametri di input
input dayOfWeek swapday=W;

Al fine di consentire ad un utente di selezionare un valore necessario dalla finestra delle proprietà durante l'avvio dello script, si usa il comando del preprocessore #property script_show_inputs. Avviamo lo script e possiamo scegliere uno dei valori dell'enumerazione dayOfWeek dall'elenco. Avviamo lo script EnumInInput ed andiamo alla alla scheda Input. Per impostazione predefinita, il valore di swapday (giorno di triplo carico swap) è Mercoledì (W=3), ma è possibile specificare un altro valore, ed utilizzare questo valore per modificare il funzionamento del programma.

Esempio di enumerazione personalizzata come parametro di input

Numero di possibili valori di un'enumerazione è limitato. Per selezionare un valore di input viene utilizzata una lista a discesa. Nomi mnemonici dei membri di enumerazione vengono utilizzati per i valori visualizzati nella lista. Se un commento è associato ad un nome mnemonico, come mostrato in questo esempio, il contenuto del commento viene usato al posto del nome mnemonico.

Ogni valore dell'enumerazione dayOfWeek ha il suo valore da 0 a 6, ma nella lista dei parametri, verranno mostrati i commenti specificati per ogni valore. Ciò fornisce una maggiore flessibilità per la scrittura di programmi con chiare descrizioni di parametri di input.

 

Le variabili con Modificatore sinput #

Le variabili con il modificatore input consentono non solo l'impostazione di valori dei parametri esterni al momento del lancio dei programmi, ma sono anche necessarie per ottimizzare le strategie di trading nello Strategy Tester. Ogni variabile di input esclusa quella del tipo stringa, può essere utilizzata nell' ottimizzazione.

Talvolta, è necessario escludere alcuni parametri esterni di programma dall'area di tutti i passi nel tester. sinput è un modificatore di memoria che è stato introdotto per casi del genere. sinput sta per dichiarazione statica di variabile esterna (sinput = static input). Ciò significa che la seguente dichiarazione in un codice di Expert Advisor

sinput       int layers=6;   // Numero di strati

sarà equivalente alla dichiarazione completa

static input int layers=6;   // Numero di strati

La variabile dichiarata con modificatore sinput è un parametro di input di un programma MQL5. Il valore di questo parametro può essere modificato al momento del lancio del programma. Tuttavia, questa variabile non viene utilizzata per l'ottimizzazione dei parametri di input. In altre parole, i suoi valori non vengono enumerati quando si va alla ricerca del miglior set di parametri che corrispondono ad una condizione specificata.

Parametro sinput nello Strategy Tester

L'Expert Advisor mostrato sopra ha 5 parametri esterni. "Numero di strati" è dichiarato in modo da essere sinput e pari a 6. Questo parametro non può essere modificato durante l'ottimizzazione della strategia di trading. Possiamo specificare il valore necessario per esso, per essere utilizzato ulteriormente. I campi Start, Step e Stop non sono disponibili per tale variabile.

Pertanto, gli utenti non saranno in grado di ottimizzare questo parametro dopo aver specificato il modificatore sinput per la variabile. In altre parole, gli utenti dei terminali non saranno in grado di impostare i valori iniziali e finali nello Strategy Tester per l'enumerazione automatica nell'intervallo specificato, durante l'ottimizzazione.

Tuttavia, vi è una sola eccezione a questa regola: le variabili sinput possono essere variate in attività di ottimizzazione utilizzando la funzione ParameterSetRange(). Questa funzione è stata introdotta specificatamente per il controllo del programma sui sets di valori disponibili per qualsiasi variabile input comprese quelle dichiarate come static input (sinput). La funzione ParameterGetRange() consente di ricevere i valori delle variabili di input quando viene lanciata l'ottimizzazione (nell' handler OnTesterInit()) e per resettare un valore di cambiamento di step, all'interno del quale, i valori dei parametri ottimizzati verranno enumerati.

In questo modo, combinando il modificatore sinput e due funzioni che lavorano con parametri di input, si consente di creare un setting di regole flessibili per l'impostazione di intervalli di ottimizzazione dei parametri di input che dipendono da valori di altri parametri di input.

 

Organizzazione dei parametri di input #

Per la comodità di lavoro con i programmi MQL5, i parametri di input possono essere divisi in blocchi nominativi, usando la parola chiave group. Ciò consente la separazione visiva di alcuni parametri da altri in base alla logica in essi incorporata.

input group           "Group name"
input int             variable1 = ...
input double          variable2 = ...
input double          variable3= ...

Dopo tale dichiarazione, tutti i parametri di input vengono uniti visivamente in un gruppo specificato, semplificando la configurazione dei parametri per gli utenti MQL5 all'avvio su un chart o nello strategy tester. Le specifiche di ciascun gruppo sono valide fino a quando appare una nuova dichiarazione di gruppo:

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

Un EA di esempio con i blocchi di input separati dal loro scopo:

input group           "Signal"
input int             ExtBBPeriod   = 20;       // Bollinger Bands period
input double          ExtBBDeviation2.0;      // deviazione
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;     // usa StopLoss
input int             Ext_SL_Points = 50;       // StopLoss in punti
input bool            ExtUseTP      = false;    // usa TakeProfit
input int             Ext_TP_Points = 100;      // TakeProfit in punti
input bool            ExtUseTS      = true;     // usa Trailing Stop
input int             Ext_TS_Points = 30;       // Trailing Stop in punti
 
input group           "MoneyManagement"
sinput double         ExtInitialLot = 0.1;      // valore lotto iniziale
input bool            ExtUseAutoLot = true;     // calcolo automatico del lotto
 
input group           "Auxiliary"
sinput int            ExtMagicNumber = 123456;  // EA Magic Number
sinput bool           ExtDebugMessagetrue;    // stampa messaggi di debug

Quando si avvia tale EA nello strategy tester, è possibile fare doppio clic sul nome di un gruppo per comprimere/espandere il blocco di input, nonché fare clic sulla casella di controllo del gruppo per selezionare tutti i suoi parametri per l'ottimizzazione.

Organizzazione dei parametri di input EA nello strategy tester

 

Vedi anche

iCustom, Enumerazioni, Proprietà dei Programmi