Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1448

 
Alexey Viktorov:

Nun, danke... Zumindest habe ich mich vor sechs Jahren gesehen... Ich war genau wie Sie jetzt. Ich habe nicht darüber nachgedacht, dass ich einen falschen Ratschlag geben könnte.

Wie für die Vorlage: Wenn die Vorlage einen Indikator, aber keine EA hat, dann wird die Vorlage ohne den EA geladen werden... Und wenn die Vorlage einen EA hat? Sind Sie sicher, dass der EA, der auf die Vorlage geladen wird, die Vorlage nicht anwendet und somit das Terminal fixiert und hängen lässt?

Nein, es funktioniert alles einwandfrei!

 
SanAlex:

Ich habe keine Probleme - alles funktioniert einwandfrei!

Seien Sie nicht so faul wie ich. Machen Sie ein Video von solchen Manipulationen :-)))

 
Vitaly Muzichenko:

Jetzt bin ich dazu gekommen, das "SmoothedMAOnBuffer()"-Konstrukt in mt4 zu debuggen.

Ich verstehe überhaupt nicht, was los ist.

Ich habe es schon hundertmal geschrieben - entfernen Sie die Funktion aus der Schleife.

Stattdessen dieser Quatsch:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);
   for(i = 0; i < counter - a; i++) {
     // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // Так индикатор работает
      SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); Совсем не работает, но и ошибок в журнале нет
      buf_3[i] = buff[0]; ???
   }
   for(i = counter - a; i > 0; i--) {
      Array_2[i] = Array_2[i + 1];

Schreiben Sie so:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);

if(SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff)==0)
   return 0;

for(i = counter - a; i > 0; i--) {
   Array_2[i] = Array_2[i + 1];

Ich sage Ihnen, der Aufruf dieser Funktion ist eine vollständige Schleife zur Glättung von Daten in Array. Die geglätteten Daten dieses Arrays befinden sich in einem Buff-Array, aus dem Sie nur noch die benötigten geglätteten Daten entnehmen müssen.

 
Alexey Viktorov:

Seien Sie nicht so faul wie ich. Machen Sie ein Video von solchen Manipulationen :-)))

Es ist schade, dass ich Ihr Profil nicht schon früher besucht habe. Sie haben da so tolle Codes. Das gefällt mir sehr.https://www.mql5.com/ru/code/16396

EURGBPH1

TralingLine
TralingLine
  • www.mql5.com
Виртуальный Stop Loss или Trailing Stop.
 
Artyom Trishkin:

Ich habe Ihnen schon hundertmal gesagt, dass Sie die Funktion aus der Schleife entfernen sollen.

Stattdessen dieser Quatsch:

schreiben Sie es so:

Ich sage Ihnen, der Aufruf dieser Funktion ist ein ganzer Zyklus der Glättung von Daten in Array. Die geglätteten Daten dieses Arrays befinden sich in einem Buff-Array, aus dem Sie nur noch die benötigten geglätteten Daten entnehmen müssen.

Danke, es funktioniert.

SmoothedMAOnBuffer(rates_total, prev_calculated, count, period, Array_1, buf_3);

Ich verstehe nicht, wie das funktioniert, aber ich werde versuchen, es jetzt herauszufinden.

 
Artyom Trishkin:

Ich habe Ihnen schon hundertmal gesagt, dass Sie die Funktion aus der Schleife entfernen sollen.

Stattdessen dieser Quatsch:

schreiben Sie es so:

Ich sage Ihnen, der Aufruf dieser Funktion ist ein ganzer Zyklus der Glättung von Daten in Array. Die geglätteten Daten dieses Arrays befinden sich im Buff-Array - gehen Sie einfach weiter und entnehmen Sie die geglätteten Daten, die Sie benötigen.

Ich habe es bei weitem nicht geschafft, alles anzuwenden, ich habe mehr als 4 Stunden gebraucht.

Beim ersten Start wird es richtig angezeigt, dann keine Aktualisierung - es friert ein, mit dem Standard funktioniert es gut.

   double Array_1[];
   double Array_2[];
   int i=0;
   int period = (int)MathFloor(MathSqrt(a));
   int val = (int)MathFloor(a / 1.9);
   int bars=rates_total;
   int counter = bars - prev_calculated + a + 1;
   if(counter > bars)
      counter = bars;
   ArrayResize(Array_1, counter);
    ArraySetAsSeries(Array_1, true);
   ArrayResize(Array_2, counter);
    ArraySetAsSeries(Array_2, true);

   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val) - ma_1(i, a);
  //  for(i = 0; i < counter - a; i++)
  //  buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i);
   SmoothedMAOnBuffer(rates_total, prev_calculated, prev_calculated, period, Array_1, buf_3); // Где-то здесь не правильно вписаны параметры

---

Was muss ich eingeben?

Im MT5 wird mir überhaupt nichts angezeigt.

Dateien:
test.mq4  13 kb
 
Vitaly Muzichenko:

Ich konnte bei weitem nicht alles anwenden, habe über 4 Stunden damit verbracht.

Beim ersten Start wird es korrekt angezeigt, dann keine Aktualisierung - friert ein, funktioniert gut mit Standard

---

Was muss ich eingeben?

Ich habe keine Ahnung, was in MT5 vor sich geht.

Können Sie erklären, was Sie sich davon versprechen?

Ihr Indikator ist so aufgebaut, dass Sie den Leuten zeigen müssen, wie man es nicht macht :)

Die gezeichneten und berechneten Puffer sind durcheinander. Die berechneten sollten an letzter Stelle stehen - man kann sie leider nicht wahllos mischen.

Bei einem Fünfer funktioniert das nicht, weil die Funktion ma_1() in einem Fünfer einen Handle und keinen MA-Wert zurückgibt.

In der Funktion SmoothedMAOnBuffer() übergeben Sie prev_calculated anstelle des Beginns der sinnvollen Daten im Array - wozu? Sie müssen dort übergeben Minimum 0, und Maximum - ein berechneter Wert in Abhängigkeit von der Periode der Berechnung der MA-Daten in Array_1 gespeichert - gut, zumindest Zeitraum

In dem Block, in dem es darum geht, welche Farbe gezeichnet werden soll, haben Sie einen logischen Fehler - Sie überschreiben die Puffer - setzen Sie einfach einen leeren Wert außerhalb der Klammern. Sie prüfen die Bedingung, aber was im Falle der Wahrheit zu tun ist, steht nicht in der Klammer. Das heißt, sie wird immer ausgeführt. Dies ist eine Folge der Gewohnheit, Klammern zu setzen, wenn ihre Position nicht klar erkennbar ist.

Array_1 und Array_2 - warum sind sie keine berechneten Puffer?

Alles in allem gibt es eine Menge Fragen.

Der Wert der Variablen a ist fest vorgegeben. Warum wird der Wert der Variablen val bei jedem Tick berechnet ?

Erstellen Sie zwei berechnete Puffer für zwei Variablen, die mit der Periode a und val bei OnInit() berechnet werden. Aus diesen Puffern können Sie Werte entnehmen - das funktioniert dann für beide Plattformen.

 
Artyom Trishkin:

Können Sie in Worte fassen, was Sie am Ende haben wollen?

Ihr Indikator ist so aufgebaut, dass Sie den Leuten zeigen müssen, wie man es nicht macht :)

Zeichnungs- und Berechnungspuffer sind durcheinander. Die berechneten sollten an letzter Stelle stehen - man kann sie leider nicht wahllos mischen.

Bei einem Fünfer funktioniert das nicht, weil die Funktion ma_1() in einem Fünfer einen Handle und keinen MA-Wert zurückgibt.

In der Funktion SmoothedMAOnBuffer() übergeben Sie prev_calculated anstelle des Beginns der sinnvollen Daten im Array - wozu? Sie müssen dort übergeben Minimum 0, und Maximum - ein berechneter Wert in Abhängigkeit von der Periode der Berechnung der MA-Daten in Array_1 gespeichert - gut, zumindest Zeitraum

In dem Block, in dem es darum geht, welche Farbe gezeichnet werden soll, haben Sie einen logischen Fehler - Sie überschreiben die Puffer - setzen Sie einfach einen leeren Wert außerhalb der Klammern. Sie prüfen die Bedingung, aber was im Falle der Wahrheit zu tun ist, steht nicht in der Klammer. Das heißt, sie wird immer ausgeführt. Dies ist eine Folge der Gewohnheit, Klammern zu setzen, wenn ihre Position nicht klar erkennbar ist.

Array_1 und Array_2 - warum sind sie keine berechneten Puffer?

Alles in allem gibt es eine Menge Fragen.

Der Wert der Variablen a ist fest vorgegeben. Warum wird der Wert der Variablen val bei jedem Tick berechnet ?

Erstellen Sie zwei berechnete Puffer für zwei Variablen, die mit der Periode a und val bei OnInit() berechnet werden. Aus diesen Puffern können Sie Werte entnehmen - das funktioniert dann für beide Plattformen.

Wenn ich die Lösung wüsste, hätte ich sie nicht geschrieben.

Der Indikator ist nicht mein, ich habe nicht einmal unter iMAOnArray(), die gesamte Aufgabe ist nur zu ersetzen iMAOnArray() mit etwas.

Kann ich ein Beispiel dafür haben, wie es sein sollte?

Danke!

P.S. Für mt5 sind Griffe in Ordnung
Dateien:
max.mq5  14 kb
 
Vitaly Muzichenko:

Kann ich ein Beispiel dafür haben, wie es sein sollte?

Ein funktionierendes Beispiel für was? Ein Indikator aus vier, der in fünf funktioniert? Dann geben Sie mir einen voll funktionsfähigen Indikator ab vier.

Oder ein Beispiel, wie man mit der Funktion SmoothedMAOnBuffer() arbeitet?

 
Artyom Trishkin:

Ein funktionierendes Beispiel für was? Ein Indikator aus vier, der in fünf funktioniert? Dann geben Sie mir einen voll funktionsfähigen Indikator ab vier.

Oder ein Beispiel, wie man mit der Funktion SmoothedMAOnBuffer() arbeitet?

Ein funktionierendes Beispiel aus mt4, mit dem Standard-iMAOnArray ist die Aktualisierung, aber SmoothedMAOnBuffer beim ersten Durchlauf ist ok, und dann keine Aktualisierung

Ich brauche ein Beispiel für die Arbeit mitSmoothedMAOnBuffer( )

Dateien:
test.mq4  17 kb
Grund der Beschwerde: