Diskussion zum Artikel "Entwicklung fortschrittlicher ICT-Handelssysteme: Implementierung von Orderblöcken in einem Indikator" - Seite 2

 
Niquel Mendoza #:

Was das erste Problem betrifft, so könnte es daran liegen, dass der Indikator die Daten nicht korrekt lädt. Das passiert normalerweise, wenn man den Chart wechselt oder einen neuen öffnet. Wenn es sich jedoch um ein bereits verwendetes Diagramm handelt, wäre es sinnvoll, weiter zu untersuchen, warum die Orderblöcke nicht erhalten werden. In diesem Fall wäre es sinnvoll, Debug-Meldungen (Print) in den Code aufzunehmen, um das Problem zu identifizieren.

Was das zweite Problem betrifft, bei dem nur bullische Orderblöcke gezeichnet werden, könnte es daran liegen, dass der EURUSD im H4-Zeitrahmen derzeit bei 600-700 Candlestick-Hochs liegt. In diesem Zusammenhang ist es möglich, dass alle bärischen Orderblöcke abgeschwächt wurden, weshalb sie nicht auf dem Chart angezeigt werden.

Was die Änderung der Kriterien betrifft, so habe ich einige boolesche Variablen im Code reduziert. Es wäre jedoch kein Problem, diese Bedingungen bei Bedarf wieder einzuführen.

Was die Farben betrifft, so wendet die letzte Version, die ich in den Kommentaren gepostet habe, Transparenz auf die Farben der Rechtecke des Auftragsblocks an. Vielleicht ist das der Grund, warum die Farben visuell nicht mit denen früherer Versionen übereinstimmen. Was schließlich die Animation betrifft, so habe ich nicht ganz verstanden, worauf Sie sich bezogen haben. Könnten Sie genauer erklären, was Sie in diesem Zusammenhang mit Animation meinen?

In Abschnitt 3.0 Schlussfolgerung haben Sie ein Video des Indikators in Aktion für XAUUSD M1 gezeigt. Ich habe mich gefragt, ob Sie die Indikatorfunktion des Strategietesters verwendet haben, um das Video zu produzieren. Wenn ich den Strategietester ausführe, zeigt er im Allgemeinen für einen EA mit aktiviertem Visal-Modus die Indikatoren und Trades an, aber er zeigt im Allgemeinen nicht den Text des laufenden EA an. Ich habe mich nur gefragt, ob Sie die Ursache oder eine Lösung kennen könnten.


Außerdem habe ich festgestellt, dass die Größenänderung großer multidemensionaler Arrays sehr viel Zeit in Anspruch nimmt. Ich bin dazu übergegangen, bei jeder Größenänderung 100 zusätzliche Elemente zu verwenden, um die verstrichene Zeit zu minimieren. Das funktioniert bei mir hervorragend, da ich die nullbasierten Arrays für Zeitreihen verwende.

 
CapeCoddah #:

In Abschnitt 3.0 Schlussfolgerung haben Sie ein Video des Indikators in Aktion für XAUUSD M1 gezeigt. Ich habe mich gefragt, ob Sie die Indikatorfunktion des Strategietesters verwendet haben, um das Video zu produzieren. Wenn ich den Strategietester ausführe, zeigt er im Allgemeinen für einen EA mit aktiviertem Visal-Modus die Indikatoren und Trades an, aber er zeigt im Allgemeinen nicht den Text des laufenden EA an. Ich habe mich gefragt, ob Sie vielleicht die Ursache oder eine Lösung kennen.


Außerdem habe ich festgestellt, dass die Größenanpassung großer multidimensionaler Arrays sehr viel Zeit in Anspruch nimmt. Ich bin dazu übergegangen, bei jeder Größenanpassung 100 zusätzliche Elemente zu verwenden, um die verstrichene Zeit zu minimieren. Das funktioniert gut für mich, da ich die nullbasierten Arrays für Zeitreihen verwende.

Hallo CapeCoddah.

Ich habe eine externe Anwendung verwendet, um das Video aufzuzeichnen, keine eingebaute Funktion von Strategy Tester.

Was den Text angeht, den Sie während der Ausführung des Expert Advisors erwähnen, so verstehe ich, dass es sich um etwas Externes von MQL5 handeln könnte und nicht um grafische Objekte wie Labels. Es wäre sehr hilfreich, wenn Sie einen Screenshot zur Verfügung stellen könnten, damit ich das Problem besser analysieren kann.

Mit freundlichen Grüßen.


 

HI,

Vielen Dank für die Informationen, ich weiß sie zu schätzen.

Zur Übersetzung Ihrer Kommentare vom Spanischen ins Englische: Da Google Translate keinen Text nach einem // in der Zeile übersetzt, war es für mich nicht geeignet, Ihre Kommentare zu übersetzen. Ich habe DeepL ausprobiert und es übersetzt Text nach //. Es war für mich auch schwer zu verstehen. Den Code zu übersetzen war nicht schwierig, aber die Übersetzung zu speichern war unmöglich.Nichtsdestotrotz hat es bei der Übersetzung Pfusch gemacht. Es hat Punkte und "Ende" eingefügt, wo es dachte, dass der Satz endet. Außerdem hat es && in &&& geändert und sicherlich noch mehr Probleme. Ich habe aufgegeben, nachdem ich diese Fehler korrigiert hatte, und die Kompilierung hat immer noch mehr als 100 Fehler produziert.

Ich habe Ihren Teil 2 durch den Strategietester laufen lassen, und Ihre TP- und SL-Linien und der Text werden angezeigt. Es sieht jedoch so aus, als müssten Ihre Berechnungen für die TP- und SL-Niveaus angepasst werden. Außerdem zeigt der Test überlappende SLs und TPs. In einer Umgebung ohne Hedging würden die SLs und TPs zu einem SL oder TP verschmolzen werden. Es sollte nur eine Linie geben, nicht zwei, und sie sollte eine Stufe haben, um die Wertänderung anzuzeigen. Außerdem wird auf dem Diagramm nicht angezeigt, wo Ihr vorhergesagter Handel beginnt.

Ich habe beschlossen, mich auf Ihr erstes Programm zu konzentrieren, da es mehr Signale zu erzeugen scheint.Ich habe vor: einen Mechanismus einzubauen, der das Signal beendet, wenn sein Trend endet; doppelte Signale innerhalb von n Balken zu eliminieren; die Höhe der Box um den Balkenmedian herum zu standardisieren; die Parameter des Orderblocks zu identifizieren und zu modifizieren, um eine rationelle Verwendung in Perioden ab H1 zu ermöglichen; einen gleitenden Durchschnitt der Volumina entweder auf dem Hauptchart oder in einem offenen Indikatorchart zu platzieren; und schließlich in nullbasierte Arrays zu konvertieren, um meiner Standardverwendung zu entsprechen und sie schließlich in meinen EA einzubauen.Ich werde versuchen, Funktionen zu verwenden, um die Logik auszuführen und zu kapseln, damit Sie sie auf Wunsch übernehmen können. Allerdings ist mein Programmierorganisationsstil nicht traditionell und entspricht nicht den automatischen Einrückungen von MetaQuotes.

Ich werde Ihnen weiterhin folgen, da ich glaube, dass Sie einen sehr guten Ansatz für den Handel haben, machen Sie weiter so.

Cheers und herzliche Grüße,


CapeCoddah

 

Hallo,

ich habe gerade meinen EA im Strategy Tester getestet, EURUSD H4 1/1/2025-2//1/2025, und am Ende des Laufs festgestellt, dass es zwei Probleme mit dem Block Order Indikator gab.

Erstens wählte er eine Block Order am 2/3/2025 aus, was außerhalb des Testfensters liegt und zweitens platzierte er den Block Text im Chart Shift Bereich.


Viel Spaß mit


CapeCoddah

 

Hier ist eine ins Englische übersetzte Version Ihres ersten Indikators. Ich habe beschlossen, dass ich Ihre vielen Code-Kommentare auf Englisch verstehen muss und habe Google Translate erneut in Betracht gezogen, da DeepL mich nicht beeindruckt hat. Ich habe zunächst alle //-Kommentare in #/# geändert, damit Google die //-Zeilenkommentare übersetzen kann, und dann die Textdatei in ein MS Word-Dokument für die Eingabe in Translate konvertiert.Nach der Übersetzung öffnete ich das neue Dokument und speicherte es als Textdatei, benannte es um und begann mit der Syntaxierung des neuen Quelltextes. Ich schätze, dass Translate 90 % der Arbeit erledigt hat, aber es fügte Leerzeichen und Zeichen hinzu, die eine manuelle Konvertierung erforderten. Nach einem Tag Arbeit wurde es ohne Fehler kompiliert. Erstaunlicherweise funktionierte es beim ersten Versuch! Ich habe ihn mit Ihrem ursprünglichen Indikator für 1000 Balken verglichen, und sie waren identisch.

Dateien:
 
CapeCoddah # :

Hier ist eine ins Englische übersetzte Version Ihres ersten Indikators. Ich habe beschlossen, dass ich Ihre vielen Code-Kommentare auf Englisch verstehen muss und habe Google Translate erneut in Betracht gezogen, da DeepL mich nicht beeindruckt hat. Ich habe zunächst alle //-Kommentare in #/# geändert, damit Google die //-Zeilenkommentare übersetzen kann, und dann die Textdatei in ein MS Word-Dokument für die Eingabe in Translate konvertiert.Nach der Übersetzung öffnete ich das neue Dokument und speicherte es als Textdatei, benannte es um und begann mit der Syntaxierung des neuen Quelltextes. Ich schätze, dass Translate 90 % der Arbeit erledigt hat, aber es fügte Leerzeichen und Zeichen hinzu, die eine manuelle Konvertierung erforderten. Nach einem Tag Arbeit wurde es ohne Fehler kompiliert. Erstaunlicherweise funktionierte es beim ersten Versuch! Ich habe ihn mit Ihrem ursprünglichen Indikator für 1000 Balken verglichen, und sie waren identisch.

Hallo CapeCoddah, ich fand den Code, den Sie erstellt haben, ausgezeichnet. Es tut mir leid, dass ich nicht früher geantwortet habe; ich bin in mehrere Projekte involviert, was meine Verfügbarkeit, Ihnen zu helfen, eingeschränkt hat. Heute kann ich jedoch etwas Zeit aufwenden, um an einer verbesserten Version des Indikators zu arbeiten. Ich stelle den Code unten zur Verfügung.
 

Leider hat es den Anschein, dass Ihr Indikator strukturell fehlerhaft und für den Handel unbrauchbar ist, da er seine Berechnungen auf Basis zukünftiger Variablen durchführt, die zum Zeitpunkt der Berechnung unbekannt sind, wie im nachstehenden Code fett hervorgehoben.

for( int i = Universal_search_range ; i > 5 ; i--) {
//Fehlerprüfung
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;

// Aktualisierung der Candlestick-Indizes
one_candle = i ; //Zentralkerze
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
zwei_Kerze = eine_Kerze - 1;
drei_Kerze = eine_Kerze - 2;
four_candle = one_candle -3
;

// Berechne das durchschnittliche Volumen der vorherigen Kerzen
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);

 
CapeCoddah #:

Leider hat es den Anschein, dass Ihr Indikator strukturell fehlerhaft und für den Handel unbrauchbar ist, da er seine Berechnungen auf Basis zukünftiger Variablen durchführt, die zum Zeitpunkt der Berechnung nicht bekannt sind, wie im Code unten fett hervorgehoben.

for( int i = Universal_search_range ; i > 5 ; i--) {
//Fehlerprüfung
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;

// Aktualisierung der Candlestick-Indizes
one_candle = i ; //Zentralkerze
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
zwei_Kerze = eine_Kerze - 1;
drei_Kerze = eine_Kerze - 2;
four_candle = one_candle -3
;

// Berechne das durchschnittliche Volumen der vorherigen Kerzen
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);

Hallo CapeCoddah, ich denke, das ist nicht der Fall, da der Indikator zum Beispiel alle Berechnungen mit Arrays in Serie durchführt (obwohl es nicht üblich ist, werden sie normalerweise ohne Serie durchgeführt) im Rahmen der ersten Schleife gezeigt, dass Schleife verwendet wird, um um Blöcke zu erkennen, was getan wird, ist von der "Universal_search_range" Kerze gehen (Denken Sie daran, dass in der Serie Kerze 0 ist die jüngste) bis Kerze 6 so zu keiner Zeit sehe ich zukünftige Kerzen verwendet werden und wenn das der Fall wäre dann two_candle oder ein anderer Index würde in einem Wert kleiner als 0 verursacht außerhalb des Bereichs führen. Die Kerze four_candle = one_candle - 3 wäre also der Wert, der 0 am nächsten kommt, wenn die Schleife mit i = 6 und four_candle = 3 endet, so dass ich sagen kann, dass die aktuelle Kerze 0 ist und ich zu keinem Zeitpunkt zukünftige Kerzen verwende. Der Name mag verwirrend klingen, ich weiß, aber ich habe es so gemacht, weil es für mich einfacher zu verstehen war, denn wenn es darum ging, die Orderblöcke zu erhalten, war one_vela wie die zentrale Kerze. Wenn ich also nach einer starken Bewegung suchte, wertete ich die Kerzen aus, die darauf folgten (in der Serie wäre das eine Subtraktion).