ParameterGetRange

Riceve i dati sulla gamma di valori e lo step di cambiamento per una variabile di input quando si ottimizza un Expert Advisor nello Strategy Tester. Ci sono due varianti della funzione.

1. Ricezione di dati per il parametro di input di tipo integer

bool  ParameterGetRange(
   const string  name,          // nome parametro (input variable) 
   bool&         enable,        // ottimizzazione parametro abilitata
   long&         value,         // valore parametro
   long&         start,         // valore iniziale
   long&         step,          // step di cambiamento
   long&         stop           // valore finale
   );

2. Ricezione di dati per il parametro di input di tipo reale

bool  ParameterGetRange(
   const string  name,          // nome parametro (input variable) 
   bool&       enable,          // ottimizzazione parametro abilitata
   double&       value,         // valore parametro
   double&       start,         // valore iniziale
   double&       step,          // step di cambiamento
   double&       stop           // valore finale
   );

Parametri

name

[in] input variable ID. Queste variabili sono parametri esterni di un'applicazione. I loro valori possono essere specificati quando si avviano su un grafico o in un singolo test.

enable

[out] Flag di questo parametro che può essere utilizzato per enumerare i valori durante l'ottimizzazione dello Strategy Tester.

valore

[out]  Valore parametro.

start

[out] Valore iniziale del parametro durante l'ottimizzazione.

step

[out] Step di modifica dei parametri durante l'enumerazione dei suoi valori.

stop

[out] Valore del parametro finale durante l'ottimizzazione.

Valore restituito

Restituisce true se ha successo, altrimenti false. Per ulteriori informazioni sull'errore, utilizzare la funzione GetLastError().

Nota

La funzione può essere chiamata solo dagli handlers OnTesterInit(), OnTesterPass() ed OnTesterDeinit(). E' stato introdotto per ricevere valori di parametri di input degli Expert Advisor e gli intervalli di variazione durante l'ottimizzazione nello Strategy Tester.

Quando viene chiamato in OnTesterInit(), i dati ottenuti possono essere utilizzati per ridefinire le regole per l'enumerazione di qualsiasi variabile di input utilizzando la funzione ParameterSetRange (). Pertanto, nuovi valori di Start, Stop e Step possono essere impostati, ed il parametro di input può anche essere completamente escluso dall'ottimizzazione indipendentemente dalle impostazioni Tester della strategia. Ciò consente di gestire l'area dei parametri di input durante l'ottimizzazione escludendo alcuni parametri dall'ottimizzazione in base ai valori dei parametri chiave dell' Expert Advisor".

Esempio:

#property description "Expert Advisor per la dimostrazione della funzione ParameterGetRange()."
#property description "Dev'essere lanciato in modalità ottimizzazione dello Strategy Tester"
//--- parametri di input
input int                 Input1=1;
input double              Input2=2.0;
input bool                Input3=false;
input ENUM_DAY_OF_WEEK    Input4=SUNDAY;
 
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione dell' Expert                                      |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- L' Expert Advisor è designato per l'operazione solo nello the Strategy Tester
   if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
     {
      MessageBox("Dev'essere lanciato in modalità ottimizzazione dello Strategy Tester!");
      //--- finisce l'operazione dell' Expert Advisor in anticipo e lo rimuove dal chart
      return(INIT_FAILED);
     }
//--- completamento dell'inizializzazione, con successo
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione TesterInit                                                            |
//+--------------------------------------------------------------------------------+
void OnTesterInit()
  {
//--- esempio per il parametro di input di tipo long
   string name="Input1";
   bool enable;
   long par1,par1_start,par1_step,par1_stop;
   ParameterGetRange(name,enable,par1,par1_start,par1_step,par1_stop);
   Print("Primo parametro");
   PrintFormat("%s=%d  abilita=%s  da %d to %d con lo step=%d",
               name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- esempio di parametro di input per il tipo double
   name="Input2";
   double par2,par2_start,par2_step,par2_stop;
   ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
   Print("Secondo parametro");
   PrintFormat("%s=%G  abilita=%s  da %G to %G con lo step=%G",
               name,par2,(string)enable,par2_start,par2_stop,par2_step);
 
//--- esempio per il parametro di input di tipo bool 
   name="Input3";
   long par3,par3_start,par3_step,par3_stop;
   ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
   Print("Terzo parametro");
   PrintFormat("%s=%s  abilita=%s  da %s to %s",
               name,(string)par3,(string)enable,
               (string)par3_start,(string)par3_stop);
//--- esempio per il parametro di input di tipo enumerazione
   name="Input4";
   long par4,par4_start,par4_step,par4_stop;
   ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
   Print("Quarto parametro");
   PrintFormat("%s=%s  abilita=%s  da %s to %s",
               name,EnumToString((ENUM_DAY_OF_WEEK)par4),(string)enable,
               EnumToString((ENUM_DAY_OF_WEEK)par4_start),
               EnumToString((ENUM_DAY_OF_WEEK)par4_stop));
  }
//+--------------------------------------------------------------------------------+
//| Funzione TesterDeinit                                                          |
//+--------------------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- questo messaggio verrà mostrato dopo che l'ottimizzazzione è completata
   Print(__FUNCTION__," Ottimizzazione completata");
  }