Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 960

 
Vitaly Muzichenko:

Sie sollten ein Flag setzen, um zu prüfen, ob sich der Wert geändert hat, damit SieOnInit nicht bei jedem Tick neu starten müssen

Zum Beispiel so:

Danke, es hat funktioniert.

Soweit ich verstehe, muss ichIndicatorRelease tun

Weil die alte Berechnung noch immer in der Tabelle steht? Zumindest im Testgerät.

Dann sieht der Code wie folgt aus?

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:

Danke, es funktioniert.

Soweit ich das verstehe, muss ich auchIndicatorRelease durchführen

Weil die alte Berechnung noch auf der Karte steht? Zumindest im Testgerät.

Dann sieht der Code wie folgt aus?

Und fügen Sie den Code hinzu:

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;
    }
  }
 

Wie kann ich meinen benutzerdefinierten MA aus dem RSI-Indikator anstelle des Preises ziehen?

Ich erhalte Daten von benutzerdefinierten MA überiCustomGet.

Ich möchteeinen zusammengesetzten Indikator (Indikator aus Indikator) erstellen.

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]);
  }

Beispiele für 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:

Wie kann ich meinen benutzerdefinierten MA aus dem RSI-Indikator anstelle des Preises ziehen?

Ich erhalte Daten von benutzerdefinierten MA überiCustomGet.

Ich möchteeinen zusammengesetzten Indikator (Indikator aus Indikator) erstellen.

Beispiele für mt4

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

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

Wie wäre es damit: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:

Wie wäre es damit:iMA

Danke, genau das, was ich brauche

 

Zu diesem:

int1 = NormalizeDouble(dou1,0)

Der Compiler antwortet: möglicher Datenverlust aufgrund der Typumwandlung

Frage: Wie kann man das richtig machen? (damit der Compiler nicht flucht)

 
User_mt5:

Zu diesem:

Der Compiler antwortet: möglicher Datenverlust aufgrund der Typumwandlung

Frage: Wie geht man richtig vor? (damit der Compiler nicht flucht)

Der Compiler schimpft nicht, sondern warnt Sie, dass Sie versuchen, double in int zu verwandeln.


 
User_mt5:

Zu diesem:

Der Compiler antwortet: möglicher Datenverlust aufgrund der Typumwandlung

Frage: Wie kann man das richtig machen? (damit der Compiler nicht flucht)

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

Der Compiler flucht nicht, sondern warnt, dass Sie versuchen, double in int zu verwandeln.


Ich war gerade über fast dasselbe verblüfft.

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

Das liegt daran, dass diese int ... Wenn ich mich recht erinnere, gab SymbolInfoInteger früher den Typ int zurück, und jetzt gibt es plötzlich long

 
Alexey Viktorov:

Ich bin über so ziemlich das Gleiche verblüfft.

das ist wegen dieser int ... Wenn ich mich recht erinnere, gab SymbolInfoInteger früher den Typ int zurück, und jetzt gibt es plötzlich long

Der Rückgabewert ist immer lang - siehe SymbolInfoInteger()-Eigenschaftsbezeichner

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