初学者的问题 MQL5 MT5 MetaTrader 5 - 页 960

 
Vitaly Muzichenko:

你应该放一个标志来检查值是否发生了变化,这样你就不必在每次打勾 时都去检查OnInit 了。

像这样。

谢谢你,它起作用了。

根据我的理解,我需要做的是IndicatorRelease

因为旧的计算方法还挂在图表上?至少在测试器中是这样。

那么代码是这样的?

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

谢谢你,它正在工作。

根据我的理解,我还需要进行指标释放

因为旧的计算方法还挂在图表上?至少在测试器中是这样。

那么代码是这样的?

并添加到代码中。

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

如何使我的自定义MA从RSI指标而不是价格中提取?

我通过iCustomGet 接收自定义MA的数据。

我想做一个复合指标(指标的指标)。

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()
  {
  double MA_price=0.0;
  MA_price=iCustomGet(handle_MA,0,0);
  Print("MA_price",MA_price);
  }

//Получаем данные кастом МА
double iCustomGet(int handle,const int buffer,const int index)
  {
   double Custom[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iCustom array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle,buffer,index,1,Custom)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iCustom indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Custom[0]);
  }

mt4的例子

https://www.mql5.com/ru/forum/110186

https://www.mql5.com/ru/code/22638

Как в коде применить постороение одного индикатора по другому индикатору
Как в коде применить постороение одного индикатора по другому индикатору
  • 2008.08.03
  • www.mql5.com
Хочу написать советника по данной стратегии: http://unfx.ru/strategies_to_trade/strategies_139...
 
ilvic:

如何使我的自定义MA从RSI指标而不是价格中提取?

我通过iCustomGet 接收自定义MA的数据。

我想做一个复合指标(指标的指标)

mt4的例子

https://www.mql5.com/ru/forum/110186

https://www.mql5.com/ru/code/22638

这个 怎么样:iMA

int  iMA( 
   string               symbol,            // имя символа 
   ENUM_TIMEFRAMES      period,            // период 
   int                  ma_period,         // период усреднения 
   int                  ma_shift,          // смещение индикатора по горизонтали 
   ENUM_MA_METHOD       ma_method,         // тип сглаживания 
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle 
   );
 
Vladimir Karputov:

这个 怎么样:iMA

谢谢你,这正是我所需要的

 

对这一点。

int1 = NormalizeDouble(dou1,0)

编译器响应:由于类型转换可能导致数据丢失

问题:什么是正确的方法?(这样编译器就不会骂人了)

 
User_mt5:

对这一点。

编译器响应:由于类型转换可能导致数据丢失

问题:什么是正确的方法?(这样编译器就不会骂人了)

编译器没有骂人,但警告你,你试图把double放进int。


 
User_mt5:

对这一点。

编译器响应:由于类型转换可能导致数据丢失

问题:什么是正确的方法?(这样编译器就不会骂人了)

int1 = (int)NormalizeDouble(dou1,0)
 
Artyom Trishkin:

编译器没有骂人,但警告说你试图把double放进int。


我只是对几乎同样的事情感到疑惑。

deltaH4[i] = NormalizeDouble(bufOpen[i]-bufClose[i], (int)SymbolInfoInteger(m_symbol, SYMBOL_DIGITS));

这是因为在这个过程中,我们发现了一些问题。我记得SymbolInfoInteger过去是返回int类型的,现在它突然返回long类型

 
Alexey Viktorov:

我只是对几乎相同的事情感到困惑。

这是因为在这一过程中...我记得SymbolInfoInteger过去是返回int类型的,现在它突然返回long类型

它总是返回长的--看看SymbolInfoInteger()属性标识符

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...