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

 
Igor Makanu:

Dies ist ein Beispiel dafür, wie man es in einem Indikator macht. Die Frage bezog sich auf Expert Advisor.

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen von Neulingen zu MQL4, Hilfe und Diskussion über Algorithmen und Codes

Nordwest, 2019.03.28 03:54

Guten Tag zusammen!

Zwei Stunden verloren, aber noch nichts gefunden.

Können Sie mir bitte sagen, wie in mq4, in der EA, um korrekt

einen Indikator unter Verwendung der Daten eines anderen Indikators mit Hilfe integrierter Funktionen zu erstellen

und es sollte in den Tests im Unterfenster so angezeigt werden, wie es sein sollte,

zum Beispiel MA auf RSI-Daten?


Aber im Allgemeinen ist es fast richtig. Es ist einfacher, einen Indikator zu schreiben und ihm Werte zu entnehmen, als ein Array für iMAOnArray zu füllen. Aber warum zwei Schleifen?

 
Alexey Viktorov:

Aber warum zwei Zyklen?

nicht für den ersten Indikatorlauf oder das Laden von historischen Daten zu prüfen

Manchmal ist es kompakter und effizienter, die Bedingungsprüfung in while/for zu verwenden, anstatt ein zusätzliches if zu machen und dann die Schleifenoperatoren zu verwenden, nachdem die Bedingung erfüllt ist.

Wenn Sie den iMAOnArray()-Berechnungscode in eine Schleife einfügen, die das Array mit RSI-Daten füllt, führt dies zu falschen Berechnungen der noch nicht gefüllten Elemente des rsiBuffer[]-Arrays.

Beachten Sie, dass ich in der Beispielberechnung iMAOnArray() für alle Elemente des Arrays (insgesamt = 0) verwendet habe. Ich habe diese Frage vor einigen Monaten untersucht, aber leider gibt es keine spezifischen Informationen darüber, wie man iMAOnArray() und den Parameterhttps://docs.mql4.com/ru/indicators/imaonarray korrekt verwendet

int total, // Anzahl der Elemente


iMAOnArray() Thema https://www.mql5.com/ru/forum/303372/page2#comment_10617854




Alexey Viktorov:

Dies ist ein Beispiel dafür, wie man es in einem Indikator macht. Die Frage bezog sich auf den Expert Advisor.

Sind Sie sicher, dass dies die Frage war?

Nordwesten:

Sie können es während der Tests im Unterfenster sehen,

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

nicht für den ersten Indikatorlauf oder das Laden von historischen Daten zu prüfen

Manchmal ist es kompakter und effizienter, die Bedingungsprüfung im while/for-Code zu verwenden, als ein zusätzliches if zu erstellen und dann Schleifenoperatoren zu verwenden, nachdem die Bedingung erfüllt ist


Sind Sie sicher, dass es das ist, was Sie fragen wollten?

)))))

)))) Es ist nicht das erste Mal, dass ich bei einer Unachtsamkeit erwischt werde. Ich bin nicht einmal bis zum Ende des Indikators gekommen.

Aber über das zusätzliche Wenn

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

kann geschrieben werden als

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
Verwenden Sie solche Datensätze nicht?
 

Igor Makanu:

...Ich habe diese Frage vor ein paar Monaten untersucht, aber leider gibt es keine spezifischen Informationen darüber, wie man iMAOnArray() und seinen Parameterhttps://docs.mql4.com/ru/indicators/imaonarray korrekt verwendet.

int total, // Anzahl der Elemente

Die Anzahl der Elemente ist wichtig, wenn Sie keinen einfachen Durchschnitt benötigen. Ich kann mich nicht erinnern, welche Arten von MA ihren vorherigen Wert in ihren Berechnungen auf einen Blick verwenden. In diesem Fall wirkt sich die Anzahl der Elemente auf das Ergebnis aus. Im Allgemeinen ist das Problem in mql5 innerhalb eines halben Ticks gelöst, und ich bin nicht mehr daran interessiert.

 
Alexey Viktorov:
Sie verwenden solche Einträge nicht?

Ich benutze es, aber ich schreibe meine Codes in der Regel "in zwei Durchgängen" - wenn ich von Grund auf schreibe, verwende ich Konstruktionen, die für "phonetisches Parsing" (d. h. im Wesentlichen für das Vorlesen) klar sind, mit if()-Bedingungen ist es einfacher, alles zu sagen )))

dann, ja, kann ich den Code ein wenig "aufräumen" und ähnliche Verfassungen machen, aber normalerweise benutze ich es in meiner Bibliothek von vorgefertigten Beispielen (Codes)

SZS: Ich habe irgendwo Informationen über die Steigerung der Produktivität von C#-Programmen gesehen. Ich weiß sicher, dass empfohlen wurde, die Verwendung von foreach() und diesem Operator zu vermeiden? wie der if()-Operator ist produktiver, aber ich denke, es ist nicht entscheidend - ich verwende ihn nach Belieben


Alexey Viktorov:

Die Anzahl der Elemente ist wichtig, wenn Sie keinen einfachen Durchschnitt benötigen. Ich kann mich nicht mehr daran erinnern, welche KIs ihren vorherigen Wert in ihren Berechnungen verwenden. In diesem Fall wirkt sich die Anzahl der Elemente auf das Ergebnis aus. Im Allgemeinen ist das Problem in mql5 innerhalb eines halben Ticks gelöst, und ich bin nicht daran interessiert.

Es ist ein tieferes Problem, suchte ich sowohl auf diesem Forum und auf dem englischen Forum, gab es eine Diskussion und Beispiele für die Verwendung, die insgesamt = 0 oder insgesamt !=0 Parameter macht die iMAOnArray() Berechnung anders - bei der Diskussion mit Igor (Link oben), beschloss ich, iMAOnArray() nur mit dem Parameter insgesamt = 0 zu verwenden - die gleiche Lösung wurde in früheren Diskussionen verwendet

 
Igor Makanu:

Es gibt ein tieferes Problem, suchte ich sowohl auf diesem Forum und auf dem englischen Forum, gab es eine Diskussion und Beispiele für die Verwendung, aus dem Parameter insgesamt = 0 oder insgesamt !=0 die Berechnung von iMAOnArray() kann unterschiedlich sein - in der Diskussion mit Igor (Link oben), entschied ich mich, iMAOnArray() nur mit dem Parameter insgesamt = 0 zu verwenden - in alten Diskussionen wurde die gleiche Lösung verwendet

Das ist richtig. Wenn Sie nicht alle Elemente des Arrays nehmen und versuchen, auch EMA ohne Fehler zu erhalten, wird es schwierig.

Exponentieller gleitender Durchschnitt (EMA)

Ein exponentiell geglätteter gleitender Durchschnitt wird ermittelt, indem ein bestimmter Teil des aktuellen Schlusskurses zum vorherigen gleitenden Durchschnittswert addiert wird. Bei exponentiell geglätteten gleitenden Durchschnitten wird dem letzten Schlusskurs mehr Gewicht beigemessen. Ein exponentieller gleitender Durchschnitt in Prozent P hat die folgende Form:

EMA = (CLOSE (i) * P) + (EMA (i - 1) * (100 - P))

Wo:

CLOSE (i) - Schlusskurs der laufenden Periode;
EMA (i - 1) - Wert des gleitenden Durchschnitts der Vorperiode;
P - Anteil am Wert des verwendeten Preises.

Wenn Sie also einen EMA der Periode 30 aus einem Array mit 30 Elementen lesen, erhalten Sie einen einfachen MA anstelle eines EMA.

 
Alexey Viktorov:

Richtig. Wenn Sie nicht alle Elemente eines Arrays nehmen und versuchen, auch EMA ohne Fehler zu erhalten, wird es schwierig.

Wenn Sie also den EMA der Periode 30 aus einem Array mit 30 Elementen lesen, erhalten Sie einen einfachen MA anstelle des EMA.

Ich habeiMAOnArray() überprüft- die Ergebnisse sind unvorhersehbar, manchmal können 2 * MA-Periode verwendet werden, manchmal wird mehr benötigt. Wenn total = 0 ist, können Sie es einmal für die Berechnung verwenden, aber wenn Sie es zu oft verwenden, hängt sich das Terminal auf

Ich verwende nur selten iMAOnArray()

 
Maxim Kuznetsov:

if (response == 0) {

   Print("Что-то пошло не так");

  // потом уже добавите диагностику из WinAPI

   return false;

}

und vor der normalen Rückkehr auch das Ergebnis ausgeben

Print(" всё хорошо, результат:" toStr);

return toStr;

und führen Sie den gesamten Code in einem Timer aus, z. B. einmal pro Minute. Üben Sie auf einer Ressource, die sicher ist, nicht gesperrt zu werden, und die verschiedene, aber vorhersehbare Zeiten angibt, so dass Sie dies überprüfen können.

----
telepathisch - wenn es wirklich ein Problem gibt,
entweder ist die Initialisierung falsch (ich weiß nicht mehr, ob WinSOCK für InternetOpenW initialisiert werden sollte oder nicht)
Oder eine Ressource wird nicht freigegeben.

alle hinzugefügt! In Print taucht nichts auf!!!

 

Wie kann ich die Variable im Datenfenster ausgeben, ohne dass sie im Diagramm angezeigt wird?

Ich kann sie aus irgendeinem Grund nicht in der Dokumentation finden.

 
psyman:

Wie kann ich die Variable im Datenfenster ausgeben, ohne dass sie im Diagramm angezeigt wird?

Ich kann sie aus irgendeinem Grund nicht in der Dokumentation finden.

Setzen Sie die Anzeigefarbe auf clrNONE.
Grund der Beschwerde: