初学者的问题 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:

创建三个指标:)。

一般来说,你必须先思考,创造环境,然后才能获得数据。

假设 -

在EA的开始,MA=25。

每一个新的刻度,我都会改变MA = +1。

即MA=26。

我不会为不同的条件创建500个手柄)

 
ilvic:

如何在交易过程中改变自定义指标中的输入参数并应用这些改变?

比方说,我有马25,现在我需要马33。

据我所知,输入参数只在初始化时设置。但我需要在交易中改变指标

好吧,似乎在改变EA的输入参数值 时,OnInit()被触发了,这意味着参数的新值被应用。还是我错了?

 
Vitaly Muzichenko:

如果EA的输入参数 的值被改变,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();
    }
  }