Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 959

 

Как изменить во время торговли входной параметр в кастомном индикаторе и применить изменения?

Допустим была ма 25 , теперь мне нужна ма 33. 

Насколько я понимаю входные параметры выставляются только во время инициализации. Но мне нужно изменить индикатор во время торгов

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:

Как изменить во время торговли входной параметр в кастомном индикаторе и применить изменения?

Допустим была ма 25 , теперь мне нужна ма 33. 

Насколько я понимаю входные параметры выставляются только во время инициализации. Но мне нужно изменить индикатор во время торгов

Создавайте заранее ДВА индикатора.

 
Vladimir Karputov:

Создавайте заранее ДВА индикатора.

Нет , мне не нужны два индикатора. Мне нужно этот менять во время торгов.

Динамика чтобы была , так сказать.

Может его как то выгрузить и загрузить с новыми параметрами?

 
ilvic:

Нет , мне не нужны два индикатора. Мне нужно этот менять во время торгов.

Динамика чтобы была , так сказать.

Может его как то выгрузить и загрузить с новыми параметрами?

Создайте три индикатора :).

В общем сначала нужно думать, создавать окружение и только потом получать данные.

 
Vladimir Karputov:

Создайте три индикатора :).

В общем сначала нужно думать, создавать окружение и только потом получать данные.

Допустим-

При старте советника параметр МА=25;

С каждым новым тиком я меняю параметр МА = +1.

Т.е МА =26;

Я же не создам 500хэндлов для разных условий)

 
ilvic:

Как изменить во время торговли входной параметр в кастомном индикаторе и применить изменения?

Допустим была ма 25 , теперь мне нужна ма 33. 

Насколько я понимаю входные параметры выставляются только во время инициализации. Но мне нужно изменить индикатор во время торгов

Ну так вроде при изменении значений во входных параметрах советника срабатывает OnInit(), значит при этом применяются новые значения параметров. Или Я ошибаюсь?

 
Vitaly Muzichenko:

Ну так вроде при изменении значений во входных параметрах советника срабатывает OnInit(), значит при этом применяются новые значения параметров. Или Я ошибаюсь?

Я пробывал вот так.

Не получается

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:

Я пробывал вот так.

Не получается

Ну так и не получится, нужно вызывать OnInit для переинициализации индикатора.

Как часто меняете параметры в процессе работы?

 
Vitaly Muzichenko:

Ну так и не получится, нужно вызывать OnInit для переинициализации индикатора.

Как часто меняете параметры в процессе работы?

Собираюсь менять часто.

Т.е код должен выглядеть так?

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

  }
 
ilvic:

Собираюсь менять часто.

Т.е код должен выглядеть так?

Вы должны ставить флаг на проверку изменения значения, чтобы не дёргать OnInit на каждом тике

Как-то так:

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