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

 

Wie ändere ich den Eingabeparameter im benutzerdefinierten Indikator während des Handels und wende die Änderungen an?

Sagen wir, ich hatte ma 25, jetzt brauche ich ma 33.

Soweit ich weiß, werden die Eingabeparameter nur während der Initialisierung festgelegt. Aber ich muss den Indikator während des Handels ändern

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:

Wie ändere ich den Eingabeparameter im benutzerdefinierten Indikator während des Handels und wende die Änderungen an?

Sagen wir, ich hatte ma 25, jetzt brauche ich ma 33.

Soweit ich weiß, werden die Eingabeparameter nur während der Initialisierung festgelegt. Aber ich muss den Indikator während des Handels ändern

Erstellen Sie im Voraus ZWEI Indikatoren.

 
Vladimir Karputov:

Erstellen Sie im Voraus ZWEI Indikatoren.

Nein, ich brauche keine zwei Indikatoren. Das muss ich beim Handel ändern.

Ich möchte, dass es sozusagen eine Dynamik hat.

Kann ich sie herunterladen und mit neuen Parametern laden?

 
ilvic:

Nein, ich brauche keine zwei Indikatoren. Das muss ich beim Handel ändern.

Die Dynamik, um es mal so zu sagen.

Kann sie irgendwie entladen und mit neuen Parametern geladen werden?

Erstellen Sie drei Indikatoren :).

Im Allgemeinen muss man zuerst denken, die Umgebung schaffen und erst dann die Daten sammeln.

 
Vladimir Karputov:

Erstellen Sie drei Indikatoren :).

Im Allgemeinen muss man zuerst denken, die Umgebung schaffen und erst dann die Daten sammeln.

Angenommen, -

Zu Beginn des EA ist der MA = 25;

Mit jedem neuen Tick ändere ich den MA = +1.

D.h. MA = 26;

Ich werde nicht 500 Griffe für verschiedene Bedingungen erstellen)

 
ilvic:

Wie ändere ich den Eingabeparameter im benutzerdefinierten Indikator während des Handels und wende die Änderungen an?

Sagen wir, ich hatte ma 25, jetzt brauche ich ma 33.

Soweit ich weiß, werden die Eingabeparameter nur während der Initialisierung festgelegt. Aber ich muss den Indikator während des Handels ändern

Nun, es scheint, dass bei Änderung der Werte in den Eingabeparametern des EA OnInit() ausgelöst wird, was bedeutet, dass die neuen Werte der Parameter angewendet werden. Oder liege ich da falsch?

 
Vitaly Muzichenko:

Wenn die Werte in den Eingabeparametern des EA geändert werden, wird OnInit() ausgelöst, was bedeutet, dass die neuen Werte der Parameter angewendet werden. Oder liege ich da falsch?

Ich habe es auf diese Weise versucht.

Es funktioniert nicht

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:

Ich habe es auf diese Weise versucht.

Funktioniert nicht.

Nun, es wird nicht funktionieren, Sie müssenOnInit aufrufen, um den Indikator neu zu initialisieren.

Wie oft ändern Sie Parameter während des Betriebs?

 
Vitaly Muzichenko:

Nun, das geht nicht, Sie müssenOnInit aufrufen, um den Indikator neu zu initialisieren.

Wie oft ändern Sie Parameter während des Betriebs?

Ich werde sie oft wechseln.

Der Code sollte also wie folgt aussehen?

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

  }
 
ilvic:

Ich werde sie stark verändern.

Der Code sollte also wie folgt aussehen?

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

Etwa so:

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