Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 195

 
Artyom Trishkin:

Suchen Sie den Punkt, an dem der Kurs den MA nach oben kreuzt. Dies ist der Beginn des Suchbereichs.

Suchen Sie den Punkt, an dem der Kurs den MA nach unten gekreuzt hat. Dies wäre der Stoppbereich.

Nehmen Sie iHighest() nur in diesem Bereich.

Und wie man eine Suche nach MA-Punkte zu implementieren, so dass es nur 2 extreme Punkte und nicht auf unendlich sucht. in Worten verstehe ich es auch, aber wenn es nicht schwierig ist, wie man es in Code zu implementieren.
 
GlaVredFX:
Und wie man die Suche nach MA-Punkten implementiert, so dass nur 2 Extrempunkte gesucht werden und nicht bis ins Unendliche. Ich verstehe es auch, aber wenn es nicht schwierig ist, wie man es im Code implementiert.

Eine Möglichkeit: Erstellen Sie eine Variable auf globaler EA-Programmebene (deklarieren Sie eine Variable in der EA-Kopfzeile) - schreiben Sie in diese Variable die Eröffnungszeit des Balkens, bei dem die letzte Überquerung stattgefunden hat. Dies wird helfen, die dritte Form des Aufrufs vonCopyBuffer zu verwenden:

Die Referenz der Start- und Enddaten des gewünschten Zeitintervalls

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

Hier ist start_time einfach die Zeit aus unserer Variablen, und stop_time ist die Zeit des letzten bekannten Angebots des Servers.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
GlaVredFX:
Und wie man die Suche der Punkte des MA implementiert, so dass es nur 2 äußere suchen würde, und nicht ins Unendliche. In Worten verstehe ich es auch, aber wenn es nicht schwierig ist, wie man es im Code implementiert.

Sie müssen den Zyklus so lange durchlaufen, bis Sie einen Weg weg von den MA finden.

Ein Punkt, dieser durch das gelbe Rechteck hervorgehobene Abschnitt, wird die Schleife unterbrechen, bevor sie den zweiten Crossover zwischen dem Preis und dem MA erreicht. Das Maximum wird an der ersten rechten Kreuzung gefunden


P.S. Was ist der Unterschied zwischen den beiden hervorgehobenen Bereichen?

 
Vitaly Muzichenko:

P.S. Was ist der Unterschied zwischen den beiden hervorgehobenen Bereichen?

Sie können unterschiedlich sein, d. h. der erste Punkt kann höher oder niedriger als der zweite Punkt sein.

Dies ist nur ein Beispiel. Das bedeutet aber nicht, dass sie immer identisch sein werden.



Wer kann Beispiele für Code mit ähnlichen Bedingungen nennen..:

Aktueller Wert von MA> 0 bar.
Suche nach Bar Nummer, Preis<MA, gefundene Nummer 1 Bar, Wert in Puffer 2 schreiben
Suche nachnächster Nummer Preis>MA hat Nummer 2 Bar gefunden, schreibe Wert in Puffer 1.
Suche beenden.
Suchen Sie dann zwischen den Werten von Puffer 1 und 2 nach dem niedrigsten Preis Low.
Wenn aktueller MA-Wert < 0 bar
Suche nach der Anzahl der Bar, Preis>MA, fand die Anzahl der 1 bar, schreiben Sie den Wert in Puffer 2
Suche nachnächster Nummer Preis<MA gefundene Nummer 2 bar, Wert in Puffer 1 schreiben.
Suche beenden.
Dann suchen wir zwischen den Werten von Puffer 1 und 2 den höchsten Preis High.

 
GlaVredFX:

Sie können unterschiedlich sein - der erste Punkt kann höher oder niedriger sein als der zweite Punkt.

Das ist nur ein Beispiel. Das heißt aber nicht, dass sie immer gleich bleiben werden.



Wer kann Beispiele für Code mit ähnlichen Bedingungen nennen..:

Der aktuelle Wert MA> 0 bar
Wir suchen nach der Taktnummer, Preis <MA, wir haben die Nummer von 1 Takt gefunden und schreiben den Wert in Puffer 2
Suche nachnächster Nummer Preis>MA hat Nummer 2 Bar gefunden, schreibe Wert in Puffer 1.
Suche beenden.
Suchen Sie dann zwischen den Werten von Puffer 1 und 2 nach dem niedrigsten Preis Low.
Wenn aktueller MA-Wert < 0 bar
Suche nach der Anzahl der Bar, Preis>MA, fand die Anzahl der 1 bar, schreiben Sie den Wert in Puffer 2
Suche nachnächster Nummer Preis<MA gefundene Nummer 2 bar, Wert in Puffer 1 schreiben.
Suche beenden.
Dann suchen wir zwischen den Werten von Puffer 1 und 2 den höchsten Preis High.

Wenn wir dem Bild folgen, müssen wir eine Schleife starten und suchen, bis die Bedingung MA<Wert gefunden ist.

Sobald diese gefunden ist, füllen wir das Feld mit Hochpreisen. Wir lassen den Zyklus so lange laufen, bis wir die Bedingung MA>Preis gefunden haben. Sobald wir diese Stelle gefunden haben, unterbrechen wir den Zyklus.

Und im Array suchen wir nach den Spitzenpreisen

 
Vitaly Muzichenko:

Wenn Sie der Abbildung folgen, sollten Sie eine Schleife laufen lassen und so lange suchen, bis die Bedingung MA<Wert gefunden ist.

Sobald diese gefunden ist, füllen wir das Feld mit Hochpreisen. Wir lassen den Zyklus so lange laufen, bis wir die Bedingung MA>Preis gefunden haben. Sobald wir den Ort gefunden haben, unterbrechen wir den Zyklus.

Dann suchen wir nach den Spitzenpreisen in der Reihe.

Sie haben Recht, und ich schrieb es auch auf die gleiche Weise, aber wie man es in den Code zu implementieren, können Sie zumindest geben uns ein Code-Beispiel für diese :


eine Schleife starten und so lange suchen, bis die Bedingung MA<Preis gefunden wird.

Sobald diese Bedingung erfüllt ist,füllen wir das Array mit den Preisen High

Документация по MQL5: Операции с массивами / ArrayFill
Документация по MQL5: Операции с массивами / ArrayFill
  • www.mql5.com
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
 
GlaVredFX:

Das ist richtig, und das ist, wie ich es geschrieben habe, aber wie es in Code zu implementieren, können Sie zumindest ein Code-Beispiel für diese geben:


eine Schleife laufen lassen und so lange suchen, bis die Bedingung MA<Preis gefunden wird.

Sobald diese Bedingung erfüllt ist,füllen wir das Array mit den Preisen High

Ich kann den Code jetzt nicht schreiben, vielleicht schreibt ihn jemand anders - er ist einfach

 

Dies ist, was benötigt wird, kann jemand mit diesem Code helfen.

int start()                           

  {

  int    i;

  double No_1;

  double No_2;

  double k=iClose(NULL,0,i);
  double h=iHigh(NULL,0,i);

  if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

  for (i=0; i< Bars; i++) {

  //---- Код поиска номер крайнего бара где  iHigh>ma

  //---- Если нашли то возвращаем номер бара No_1

            

          }

Dann wird der nächste Wert gesucht, bei dem iLow>ma ist und die Taktnummer No_2 zurückgegeben.
Stoppen Sie die Suche und verwenden Sie die Funktion iHighest, um den Scheitelpunkt zwischen diesen Balken zu finden
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);

 
GlaVredFX:

if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

Dies ist kein MQL5-Code.

 
Vladimir Karputov:

Dies ist kein MQL5-Code.

Dies ist ein Layout, es gibt keinen Unterschied zwischen 4 und 5

:)