Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Von Metatrader 4 ausgetrickst.
19.06.2010, 16:06 (Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2010 19:02 von SIRIUS.)
Beitrag: #1
Von Metatrader 4 ausgetrickst.
Guten Tag an alle Leser.

Kurz zur Einstimmung meines Problems. Jeder, der am Börsenhandel Interesse hat, hat auch Ideen, die sich dann relativ einfach mit MATATRADER 4 umsetzen lassen. So auch in meinem Fall. Ein so entstandener Indikator wird dann erst einmal auf dem Chart begutachtet.
Da ich ein Modulares EA-System verwende, welches auf externe Indikatoren zugreift, ist ein Test schnell gemacht. Es wird dazu nur der Indikator-Name und die Parameter im EA eingetragen und schon ist das EA einsatzbereit. Backtest dienen in erste Linie dazu, die Funktion zu testen.

Und nun kommt’s ... das Backtest – Ergebnis, wie auch ein real-Test – Ergebis --- eine Katastrophe, der Handel folgte nicht meinem Indikator.

Eine eingehende Beobachtung zeigte, dass wenn der Indikator in einen Chart eingeblendet wird, alle Linien stimmen. Wenn dieser Chart nun mit REAL-TIME (Ticks) „updated“, so werden zwar entsprechen der TIME-FRAME (TF) die Balken / Kerzen gezeichnet, aber der Indikator zeichnet nicht mehr Regelkonform seine Linien.

Zum Zweck der Demo habe ich den Indikator auf ein Minimum zusammengestrichen, um das Verhalten zu zeigen. Die TF = M1 und die Parameter wurden bewusst so klein gewählt, dass das Fehlverhalten häufig genug auftritt. Der dargestellt Indikator hat folgende Funktion.
Zuerst wird ein MA mit einer Periode vom 5 auf close berechnet. Danach wird mit einem OFFSET von 2 eine „Obere-“ und eine „Untere – LINIE“ bezogen auf die MA-Line berechnet. Diese beiden Linien sind TRAILING-Linien d.h. bei LONG ( STATUS = 1) wird nur die UNTERE – Linie gezeichnet und kann nur nach oben nachgezogen werden.(TRAILING_FUNKTION) Kreuzt die MA-LINIE die UNTERE-Linie wird der TRADE_STATUS von LONG auf SHORT ( STATUS = -1) gesetzt und von da ab wird die OBERE – LINIE als Trailinglinie nach untern nachgezogen. Und nun seht was passiert..!

Im Anhang.:

TF = M1
PARAMETER.: FAST_MA = 5
OFFSET = 2.0

Bild 1.: Indikator neu in einen Chart eingefügt (größerer Abschnitt). ...so war der Linienverlauf gedacht.

Bild 2.: Nach dem einfügen, chart mit realtime ticks „updated“
Der Indikator – Verlauf ist falsch. ( ab 13:09 )

Bild 3.: Nachdem der Fehler auftrat, auf den Indikator geklickt -->
Rücksetzen --> OK --> Indikator wird richtig gezeichnet

Anmerkung.: in den Bildern im unteren Fenster wird das STATUS – Signal ( 1 = LONG / -1 = SHORT ) angezeigt als Referenz.

Wo liegt die Ursache für dieses unterschiedliche Verhalten? Die Entscheidungen habe ich alle auf die zurückliegende BAR bezogen, um sicher zu stellen, dass stabile Entscheidungskriterien vorliegen.

Nebenbei noch angemerkt, haben nachträgliche Stichproben von EA’s ergeben, dass alle Testergebnisse eindeutig falsch waren ... viel vergeudete Zeit. Welch großer Unterschied zwischen statischem und dynamischen Verhalten !!

Dank für das Interesse an diesem Fall ... hat jemand eine Idee dazu, wie das gelöst werden kann. Auch Rückfragen erwünscht.

Das Beispiel – Listing ist im Anhang.

Grüße SIRIUS


Angehängte Datei(en) Thumbnail(s)
           

.mq4  HK_IND_SIRIUS_MA_TRAILING_FEHLER_DEMO.mq4 (Größe: 6,46 KB / Downloads: 10)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.06.2010, 11:49
Beitrag: #2
RE: Von Metatrader 4 ausgetrickst.
Ich muss jetzt gleich weg für eine Weile. Bitte testen.


Angehängte Datei(en)
.ex4  HK_IND_SIRIUS_MA_Test2.ex4 (Größe: 6,58 KB / Downloads: 12)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.06.2010, 12:23
Beitrag: #3
RE: Von Metatrader 4 ausgetrickst.


Hallo Sirius,

vor einiger Zeit hatte ich Probleme,die Deinem ähneln.
Mein Indikator hat trotz vermeintlich korrektem Aufsammeln und Bewerten der einzelnen Ticks ab irgend einem Zeitpunkt einen zeitlichen Versatz.
In den aktuellen TimeFrames waren dann alte Werte.
Habe mich dann aber nicht mehr gekümmert, da ich dazu übergegangen war, berechnete Signale direkt im EA zu berechenen,-also ohne eigenen Indikator.
Ich habe allerdings Deinen Sourcecode noch nicht angeschaut, es liegt ja schon - so wie es aussieht - ein Lösungsvorschlag als exe File vor.
Da würde ich gern die erst mal die Korrekturen im Code sehen, bevor ich mir auch den Kopf zusätzlich zerbreche.

Gruß Orpheus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2010, 09:36
Beitrag: #4
RE: Von Metatrader 4 ausgetrickst.
Hallo SwinMan

zuerst vielen Dank, dass Du Dir mein Problem angesehen und gelöst hast. Habe die korrigierte Form mit realtime-Daten getestet und der Linienverlauf ist wie ich es mir vorstellte. Darf ich Dich bitten, mir bekanntzugeben, wo ich in meinem Programmablauf so daneben gelegen bin? Die Problemlösung ist sicher auch für andere Leser von Interesse.
Hoffe Du kommst in den nächsten Tagen dazu, hier Deinen Lösungsweg zu zeigen. DANKE

Hallo Orpheus,
danke für Deine Zeilen ... ja man kämpft wohl mit ähnlichen Problemen und ist dann immer wieder überrascht, welche Lösungen und Ideen anderer einem zum Ziel fühern. Das Thema "EA" wäre sicher ein interesantes Forums - Thema ... mal sehen ob dazu sich Mitkämpfer finden.

Grüße SIRIUS
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2010, 10:01
Beitrag: #5
RE: Von Metatrader 4 ausgetrickst.
Hallo SwingMan,

jetzt ist mir noch ein Problem aufgefallen, die untere Linie (rot) läuft als Trailing-Line zeitgleich mit der MA-Linie. Hingegen die obere Linie (weiß) ist um eine Zeiteinheit versetzt. Gibt es dafür eine Lösung ? Bild im Anhang

Grüße SIRIUS


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2010, 11:47 (Dieser Beitrag wurde zuletzt bearbeitet: 22.06.2010 11:58 von adamp.)
Beitrag: #6
RE: Von Metatrader 4 ausgetrickst.


Ich habe leider gerade nicht die Zeit um mich intensiv mit dem Code zu befassen, aber ein ähnliches Probleme hatte ich auch einmal.

Du kannst während eines Backtests auch Indikatoren in den Chart laden, wenn du den Backtest im visuellen Modus machst. Und dann siehst du live, wie sich der Indikator in Echtzeit verhalten würde. Lass dann mal vom Indikator und vom EA ein paar Debug-Infos auf dem Chart ausgeben, oder schreib sie in eine Datei bzw. ins Terminal (Print-Funktion). Vielleicht kannst du daran schon erkennen, woran es liegt. Leider bietet MT4 keine Möglichkeit des Debugging und man muss sich so behelfen.

Wenn man mit Moving Averages arbeitet darf man aber nicht vergessen, dass diese sich mit jedem Tick ändern wenn man den Close-Wert als Basis hat. Jetzt kann es passieren, dass der aktuelle Bar so tief runter geht, dass die Linien sich überkreuzen und damit schon das Signal ausgelöst wird. Später steigt der Kurs wieder, der Bar wird geschlossen und im Nachhinein betrachtet kann man nicht mehr nachvollziehen, wieso dort ein Signal ausgelöst wurde. Deshalb kann es passieren, dass im Live-Modus Signale auftreten und der Indikator falsch dargestellt wird. Wenn man ihn aber nochmal reinlädt, dann fließen ja wirklich nur die Schlusswerte in die Berechnung ein und der Indikator wird 'korrekt' dargstellt.

Dies ist deine For-Schleife:
Code:
for(int i=limit; i>=0; i--){ ... }

Das bedeutet, du beziehst Close[0] mit in die Berechnung ein - in jedem Tick. Und Close[0] ist der aktuelle Kurs. Dadurch kann so ein Fehlverhalten wie oben beschrieben entstehen - der Indikator arbeitet korrekt gemäß der Programmierung. Er zeigt nur nicht das an, was du gerne sehen willst.

Abhilfe:
Mach die Berechnung in der For-Schleife nur bis i>0 und nimm 0 heraus. Oder zeichne den kompletten Indikator mit jedem Tick komplett neu, statt immer nur die neu hinzukommenden Bars zu berechnen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2010, 16:59
Beitrag: #7
RE: Von Metatrader 4 ausgetrickst.
Hi adamp,

danke für Deine Info, die Idee mit dem Backtest langsam laufen lassen, habe ich genau so gemacht. Gut zu sehen war, wie der Indikator sich im altuellen Bar entwickelt. Der letzte feste Punkt war dabei immer der vorherige Zeitabschnitt ... deshalb glaubte ich auf der sicheren Seite zu sein, wenn ich die Entscheidungen von der aktuellen Bar + 1 ableite.
Wozu ich aber keine Erklärung habe, war die Beobachtung, dass das Signal bei Wechsel bis zu 3 Bar das Signal rückwärts verändert hat. Dafür habe ich überhaupt keinen Grund erkennen können, denn bei der Berechnung wird von zurückliegenden Bars zum aktuellen Kurs hingerechnet und das für den MA wie die Trailing-Linien. Die MA-Linie wurde ja in der gleichen Richtung berechnet wie die Trailing-Linien und doch kippten diese manchmal zurück... Durch beobachten bin ich dem Problem nicht beigekommen.
Möglicherweise, so hoffe ich, hat SwingMan eine einleuchtende Erklärung, warten wir einfach ab. Bin selbst sehr gespannt

schönen Tag noch SIRIUS
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2010, 02:19 (Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2010 10:27 von SwingMan.)
Beitrag: #8
RE: Von Metatrader 4 ausgetrickst.
(22.06.2010 10:01)SIRIUS schrieb:  ...jetzt ist mir noch ein Problem aufgefallen, die untere Linie (rot) läuft als Trailing-Line zeitgleich mit der MA-Linie. Hingegen die obere Linie (weiß) ist um eine Zeiteinheit versetzt. Gibt es dafür eine Lösung ?

Hello Sirius,

Das habe ich auch nur jetzt bemerkt!
Ich poste das Programm, dann kannst Du Dir weiter den Kopf zerbrechen...

Eigentlich wollte ich auch vorher ein paar Kommentare schreiben, bin aber mit ganz anderen Sachen beschäftigt worden, und leider sind es immer ähnliche oder noch schlimmere Sachen wie Deine...

Die Hauptursache für Deinen Fehler ist ein Gedankenfehler den wir Menschen machen, der Computer versteht aber nur das was man ihm sagt (man weisst das, aber als selbstverständlicher Satz wird nicht ganz ernst genommen...)

Als erste Feststellung: die Variable STATUS ist in unserem Kopf der letzte Stand der Dinge, d.h. am letzten Bar 0 haben wir ein Long/Short Signal, und es ist gut so.

AAAAABER, die Schleife "for (i=limit; i>=0; i--)" läuft ab dem Bar "limit=2" oder manchmal 3 (darum habe ich einen Comment mit dieser Information geschrieben).
JEEEEETZT stellen wir fest dass der Computer am Anfang der Schleife, für i=2 mit dem aktuellen STATUS am Bar 0 irgendetwas macht, UND DAS IST DER FEHLER.
Am Bar 2 müssen wir den Status der Bar 3, und nicht der Bar 0 haben!

Es gibt ein paar Möglichkeiten das abzufangen, mir schien zuverlässig einen Array mit dem Status zu benutzen.
Man muss auch bei den Indexen aufpassen: zu welchem Zeitpunkt entspricht der geänderte Status, darum habe ich sowohl bei [i] als auch bei [i+1] den Wert gespeichert.

Du kannst jetzt im Programm meine Kommentare und sonstiges löschen.
Es bleibt noch zu identifizieren warum die zwei Linien unterschiedlich gezeichnet werden, dass muss irgendetwas mit dem Index zu tun haben. Ich habe auch festgestellt dass manchmal eine Überlappung der Linien vorhanden ist, hatte nur nicht die Zeit die Ursache zu untersuchen, hoffentlich kommst weiter zurecht.

Für einen EA (vermutlich Scalping) würde ich aber nicht den Indikator benutzen.
Schreibe eine Variante des Indikators wo im "start()" eine Funktion aufgerufen wird, und in der Funktion verlagerst alles was jetzt im "start()" steht.
Dann kannst Du diese Funktion auch im EA übernehmen.
Bei Gelegenheit kannst mir auch den EA schicken, vielleicht gibt es manches zu bemerken...


Angehängte Datei(en)
.mq4  HK_IND_SIRIUS_MA_Test2.mq4 (Größe: 9,12 KB / Downloads: 9)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2010, 19:34
Beitrag: #9
RE: Von Metatrader 4 ausgetrickst.


Hallo SwingMan
danke für die Antwort und die .mq4-File.
Bei der Erstellung des Indikators bin ich von einer bestimmten Vorgabe ausgegangen und habe dazu das Programm gemacht. Dein Zitat.: ....ein Gedankenfehler den wir Menschen machen, der Computer versteht aber nur das was man ihm sagt (man weisst das, aber als selbstverständlicher Satz wird nicht ganz ernst genommen...) habe ich schon erst genommen und wenn ich den Indikator in einen Chart einfügte, dann waren alle Linien richtig gezeichnet. Um sicher zu sein, immer auf einen stabilen Wert zuzugreifen, habe ich die Berechnung immer auf den letzten zeitlich abgeschlossenen Balken bezogen. Warum dann die Berechnung im dynamischen Verhalten nicht wie erwartet mit Abschluß der Zeiteinheit in einem neuen Durchlauf der if-Loop beginnt, sondern statt dessen 2 bis 3 Schritte zurück wieder mit der Berechnung beginnt, das war mir neu. Dass es so ist, habe ich ja auch so weiter oben beschrieben.: Dass bis zu 3 Bars rückwärts die Linien neu ( und in meinem Fall falsch) gezeichnet wurden. Dieser Umstand ist sicher auch für manchen Leser neu und von Interesse. Dass in diesem Nichtwissen mein Problem begründet ist, ist schon klar. Doch von einer if-Loop bin ich bis jetzt davon ausgegangen, dass jede Zahl von Beginn bis Ende nur einmal durchlaufen wird und bei einem zeitweise zurücksetzten des Zähleres während der Durchläufe ja ein ganz anderes Ergebnis zu erwarten ist.
Dass durch die Zählerzurücksetzung um 2 bis 3 Einheiten die Variablen ganz anderst gesichert werden müssen ergibt sich daraus von selbst.
Jetzt meine Frage dazu, wo ist denn dieser (verhängnisvolle) Ablauf beschrieben, dass es auch verstanden werden kann? Oder hast Du SwingMan ein paar klärende Worte dazu?
Zitat.:Für einen EA (vermutlich Scalping) würde ich aber nicht den Indikator benutzen.
Der Indikator ist nicht für eine Scalping-Anwendung gedacht. Das TF =M1 und den Offset von 2 habe ich nur so gewählt, dass "mein" Problem einfach häufig genug auftritt. Das Programmlisting wurde auf den Fehlerteil für Demozwecke zusammengestrichen.
Für den Zeitlichen Versatz einer Linie, dazu habe ich im Listing noch keinen Grund gefunden (hatte nur wenig Zeit dazu, erst einmal)
SwingMan ... nochmal vielen Dank und hoffe, ein paar erklärende Infos dazu zu lesen.
Bin ab Montag 28-06-2010 für etwa 10 Tage unterwegs, dann gehts bei mir damit wieder weiter.
Grüße SIRIUS
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2010, 20:14
Beitrag: #10
RE: Von Metatrader 4 ausgetrickst.
(23.06.2010 19:34)SIRIUS schrieb:  Jetzt meine Frage dazu, wo ist denn dieser (verhängnisvolle) Ablauf beschrieben, dass es auch verstanden werden kann? Oder hast Du SwingMan ein paar klärende Worte dazu?

Vermutlich gibt es nur ein klärendes Wort: Erfahrung...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu: