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

 

Como posso alterar o parâmetro de entrada no indicador personalizado durante a negociação e aplicar as alterações?

Digamos que eu tinha ma 25, agora preciso de ma 33.

Tanto quanto sei, os parâmetros de entrada só são definidos durante a inicialização. Mas preciso de mudar o indicador durante o comércio

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:

Como posso alterar o parâmetro de entrada no indicador personalizado durante a negociação e aplicar as alterações?

Digamos que eu tinha ma 25, agora preciso de ma 33.

Tanto quanto sei, os parâmetros de entrada só são definidos durante a inicialização. Mas preciso de mudar o indicador durante o comércio

Criar DOIS indicadores com antecedência.

 
Vladimir Karputov:

Criar DOIS indicadores com antecedência.

Não, não preciso de dois indicadores. Preciso de mudar este durante o comércio.

Quero que tenha dinâmica, por assim dizer.

Posso descarregá-lo e carregá-lo com novos parâmetros?

 
ilvic:

Não, não preciso de dois indicadores. Preciso de mudar este durante o comércio.

A dinâmica, por assim dizer.

Pode ser descarregado de alguma forma e carregado com novos parâmetros?

Criar três indicadores :).

Em geral, é preciso pensar primeiro, criar o ambiente e só depois obter os dados.

 
Vladimir Karputov:

Criar três indicadores :).

Em geral, é preciso pensar primeiro, criar o ambiente e só depois obter os dados.

Suponhamos que -

No início do EA, o MA = 25;

A cada novo tick mudo o MA = +1.

I.e. MA = 26;

Não vou criar 500 pegas para condições diferentes)

 
ilvic:

Como posso alterar o parâmetro de entrada no indicador personalizado durante a negociação e aplicar as alterações?

Digamos que eu tinha ma 25, agora preciso de ma 33.

Tanto quanto sei, os parâmetros de entrada só são definidos durante a inicialização. Mas preciso de mudar o indicador durante o comércio

Bem, parece que ao alterar os valores dos parâmetros de entrada do EA OnInit() é desencadeado, significa que os novos valores dos parâmetros são aplicados. Ou estarei eu errado?

 
Vitaly Muzichenko:

Se os valores nos parâmetros de entrada da EA forem alterados, OnInit() é accionado, o que significa que os novos valores dos parâmetros são aplicados. Ou estarei eu errado?

Já tentei desta forma.

Não funciona

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:

Tentei desta forma.

Não funciona.

Bem, não vai funcionar, é preciso chamar oOnInit para reinicializar o indicador.

Com que frequência se alteram os parâmetros durante a operação?

 
Vitaly Muzichenko:

Bem, não pode, precisa de chamar oOnInit para reiniciar o indicador.

Com que frequência se alteram os parâmetros durante a operação?

Vou mudá-los frequentemente.

Então o código deve ter este aspecto?

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

  }
 
ilvic:

Vou mudá-lo muito.

Então o código deve ter este aspecto?

Deve colocar uma bandeira para verificar se o valor mudou, para que não tenha de puxar oOnInit em cada tick

Algo parecido com isto:

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