Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 959

 

Come posso cambiare il parametro di input nell'indicatore personalizzato durante il trading e applicare le modifiche?

Diciamo che avevo ma 25, ora ho bisogno di ma 33.

Per quanto ho capito, i parametri di ingresso sono impostati solo durante l'inizializzazione. Ma ho bisogno di cambiare indicatore durante il trading

input int            InpMA_ma_period      = 25;        // Параметры МА 
input int            InpMA_ma_shift       = 0;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA;  // MA PRICE_HIGH: smoothing type 

int            handle_MA; 

int OnInit()
  {
    handle_MA=iCustom(m_symbol.Name(),Period(),"MA",InpMA_ma_period,InpMA_ma_shift,InpMA_ma_method,PRICE_CLOSE);
  }

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   InpMA_ma_period      = 33;
  }
 
ilvic:

Come posso cambiare il parametro di input nell'indicatore personalizzato durante il trading e applicare le modifiche?

Diciamo che avevo ma 25, ora ho bisogno di ma 33.

Per quanto ho capito, i parametri di ingresso sono impostati solo durante l'inizializzazione. Ma ho bisogno di cambiare indicatore durante il trading

Crea DUE indicatori in anticipo.

 
Vladimir Karputov:

Crea DUE indicatori in anticipo.

No, non ho bisogno di due indicatori. Devo cambiare questo durante il trading.

Voglio che abbia una dinamica, per così dire.

Posso scaricarlo e caricarlo con nuovi parametri?

 
ilvic:

No, non ho bisogno di due indicatori. Devo cambiare questo durante il trading.

La dinamica, per così dire.

Può essere scaricato in qualche modo e caricato con nuovi parametri?

Crea tre indicatori :).

In generale, bisogna prima pensare, creare l'ambiente e solo dopo ottenere i dati.

 
Vladimir Karputov:

Crea tre indicatori :).

In generale, bisogna prima pensare, creare l'ambiente e solo dopo ottenere i dati.

Supponiamo che -

All'inizio dell'EA il MA = 25;

Ad ogni nuovo tick cambio la MA = +1.

Cioè MA = 26;

Non creerò 500 maniglie per condizioni diverse)

 
ilvic:

Come posso cambiare il parametro di input nell'indicatore personalizzato durante il trading e applicare le modifiche?

Diciamo che avevo ma 25, ora ho bisogno di ma 33.

Per quanto ho capito, i parametri di ingresso sono impostati solo durante l'inizializzazione. Ma ho bisogno di cambiare indicatore durante il trading

Bene, sembra che al cambiamento dei valori nei parametri di input dell'EA OnInit() sia attivato, significa che i nuovi valori dei parametri sono applicati. O mi sbaglio?

 
Vitaly Muzichenko:

Se i valori nei parametri di input dell'EA vengono cambiati, OnInit() viene attivata, il che significa che i nuovi valori dei parametri vengono applicati. O mi sbaglio?

Ho provato in questo modo.

Non funziona

input int            InpMA_ma_period      = 25;        // Параметры МА 
input int            InpMA_ma_shift       = 0;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA;  // MA PRICE_HIGH: smoothing type 

double ExtInpMA_ma_period=InpMA_ma_period;
int            handle_MA; 

int OnInit()
  {
    handle_MA=iCustom(m_symbol.Name(),Period(),"MA",ExtInpMA_ma_period,InpMA_ma_shift,InpMA_ma_method,PRICE_CLOSE);
  }

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   ExtInpMA_ma_period      = 33;
  }
 
ilvic:

Ho provato così.

Non funziona.

Beh, non funzionerà, devi chiamareOnInit per reinizializzare l'indicatore.

Quanto spesso cambiate i parametri durante il funzionamento?

 
Vitaly Muzichenko:

Beh, non puoi, devi chiamareOnInit per reinizializzare l'indicatore.

Quanto spesso cambiate i parametri durante il funzionamento?

Ho intenzione di cambiarlo spesso.

Quindi il codice dovrebbe assomigliare a questo?

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   
   ExtInpMA_ma_period      = 33;
   OnInit();

  }
 
ilvic:

Lo cambierò molto.

Quindi il codice dovrebbe assomigliare a questo?

Dovreste mettere un flag per controllare se il valore è cambiato, in modo da non dover strattonareOnInit ad ogni tick

Qualcosa del genere:

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   static int NewExtInpMA_ma_period;
   if(ExtInpMA_ma_period != NewExtInpMA_ma_period)
    {
     NewExtInpMA_ma_period=ExtInpMA_ma_period;
     OnInit();
    }
  }
Motivazione: