Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Fehlerhafte Werte beim Auslesen von Indikatoren (http://www.expert-advisor.com/forum/showthread.php?t=5118)

Dick_Turpin 19.08.16 08:51

Fehlerhafte Werte beim Auslesen von Indikatoren
 
Kann es sein, dass beim ersten Auslesen von Indikatoren fehlerhafte Werte ausgelesen werden, und dann beim zweiten Auslesen die Werte stimmen?

Kann das ev. mit einer zu hohen anzahl an Werten zusammenhängen? Ich lese z.B. 5 verschiedene Indikatoren von Bar 1 bis 40 in einer for-Schleife aus. Und da habe ich dieses Problem.

Sollte man die Indikatoren vielleicht "schonender" auslesen, z.B. jeden Indikator in einer separaten for-Schleife?

Gruß
Dick

ralfbenker 19.08.16 11:38

Kenne den Code nicht aber das kann eigentlich nicht sein.
Da muss was anderes in der Schleife nicht hinhauen.

traderdoc 19.08.16 15:55

Da tippe ich auch auf einen Codefehler. Also am Besten mal den Code posten.

traderdoc

Dick_Turpin 19.08.16 22:13

Liste der Anhänge anzeigen (Anzahl: 1)
Also wenn der Indi-Wert nicht stimmt, dann sind die Werte meist verschoben, d.h. der Wert von Bar 1 steht in der Variablen für z.B. Bar 4...

Anbei der etwas abgespeckte Code.

Gruß
Dick

Dick_Turpin 20.08.16 18:32

Liste der Anhänge anzeigen (Anzahl: 1)
Oft sind die Werte auch nur um einen Bar verschoben.

Ich habe mal den angehängten Repainting-EA laufen lassen und sehe, dass vor allem Nachts, vor allem in H4, viele Repaintings auftreten. Oder liegt das ev. daran, dass es sich um ein Demokonto (AM) handelt?

Aber trotzdem verstehe ich nicht, dass bei meinem ersten EA "Dick_H1" beim allerersten Start manchmal zuerst falsche Werte ausgelesen werden und danach die Werte dann stimmen...

Gruß
Dick

ralfbenker 21.08.16 15:15

Hab mir Deinen Dick_H1 mal angeschaut, bei mir scheinen die ausgelesenen Werte zu stimmen. Zumindest konnte ich im Journal nichts außergewöhnliches feststellen.
Es sei denn, der Name des Währungspaares stimmt nicht oder es gibt für den getesteten Zeitraum keine Kursdaten. Dann liefert der Inhalt des Array eben 0.

Den Repainting EA kann ich nicht testen da ich diesen CHO-Indikator nicht habe.

Raul0 21.08.16 19:51

Vielleicht bist Du mit Deinen Währungspaar- und Indikatorenarrays durcheinandergekommen. Prüfe doch den Einzelfall.

UND, läuft der EA irgendwann, bitte laß uns noch was vom Markt übrig :D

Dick_Turpin 22.08.16 10:55

Also die Probleme entstehen immer dann, wenn ich den EA zum Auslesen der Werte zum ersten mal in einem neuen TF laufen lasse.
Erst wenn ich den EA nach dem ersten Auslesen neu starte und der EA zum zweiten mal im gleichen TF ausliest, dann stimmen die Werte!

Bin langsam am verzweifeln...

Gruß
Dick

ralfbenker 22.08.16 11:32

Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir stimmen die Werte auch beim ersten Mal. Hab jetzt allerdings nur den CCI14 und den Stoch14 mit denen im Chart verglichen und es waren die gleichen Werte. Was allerdings nicht funktioniert ist wenn Du Deinen EA von Timeframe H1 in M30 oder einem anderen Timeframe wechselst und die Berechnung deiner Indikatoren im EA weiter auf H1 läuft.
Wenn du den Indikator im Chart mit Timeframe M30 und Deinen Werten im EA H1 vergleichst muss ja was anderes rauskommen.

14 Perioden M30 sind ja nicht gleich 14 Perioden H1.
Ansonsten weiss ich dann auch nicht weiter.

Dick_Turpin 22.08.16 11:39

Hallo ralfbenker,
da hab ich mich wohl nicht deutlich genug ausgedrückt:

Wenn ich den EA in einem neuen TF laufen lasse, dann meinte ich damit, dass ich im EA den TF in den Funktionen ReadIndi() und PrintIndi() auf einen neuen TF umstelle.

Gruß
Dick

Dick_Turpin 22.08.16 13:36

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ralf,

anbei mein EA etwas umgeändert. Jetzt kannst Du beim Start des EA unter "Eingaben" den TF, der getestet werden soll als Minuten eintragen.

Gruß
Dick

ralfbenker 22.08.16 14:30

Läßt du den EA im Strategietester laufen oder im Livechart(Demo oder Real)?
Im Strategietester könnte das sein dass er keine ausreichende Datenhistorie findet und im ersten Anlauf das Array mit 0.00 befüllt.
Sowas ähnliches hatte ich auch mal. Eventuell solltest Du Dir in der Printroutine auch mal die Close-Kurse der dazugehörigen Bars anzeigen lassen.

Viele Grüße
Ralf

ralfbenker 22.08.16 14:46

Nochmal ich,
im Strategietester zeigt er teilweise 0.00 für die Indikatorwerte an. Das liegt aber wohl daran, dass keine Kurse in der Historiendatenbank vorhanden sind.
Im realen Chart(Demo oder Geldkonto) scheinen die Werte richtig zu sein.

Dick_Turpin 22.08.16 14:59

Hallo Ralf,

ich teste nicht im Strategietester, sondern im realen Chart.

Wie gesagt, es kommen keine 0-Werte, sondern die Werte innerhalb der Bars sind mal um eine Stelle, mal um mehrere Stellen verschoben. Aber nur wenn ich zum ersten mal in einem neuen TF auslese. Habe ich nach dem ersten fehlerhften Auslesen den EA neu initialisiert oder neu gestartet, dann stimmen die Werte ?!?!?!?

ralfbenker 22.08.16 15:38

Das ist ja echt eigenartig - fehlt mir im Moment jegliche Erklärung.

Dick_Turpin 22.08.16 17:09

Hallo Ralf,

kommst Du zu den selben Ergebnissen wie ich, wenn Du den EA testest?

Gruß
Dick

ralfbenker 22.08.16 17:42

Ne, ich starte den Metatrader, ziehe den EA auf den Chart und die Werte im Journal scheinen zu stimmen. Von Verschiebungen um ein-zwei Bars hab ich nichts mitgekriegt.
Allerdings musste ich die Namen der Währungspaare umbenennen da ich keinen ECN-Broker habe.

traderdoc 22.08.16 22:12

Der MT4 besitzt die Besonderheit, bei eine Änderung der externen Variablen des EAs über z.B. die Taste F7, zwar die externen Variablen zu berücksichtigen, aber nicht!! die globalen Variablen. Bei einem Neustart per Compilierung oder auf den Chart ziehen des EAs werden auch die globlen Variablen, z.B.

datetime OldBarOpenTimeH1 = 0;
datetime OldBarOpenTimeD1 = 0;

durchlaufen.
Da die aber wie gesagt beim TF-Wechsel per Variablenänderung nicht mit berücksichtigt werden, springt der EA erst gar nicht in den Teil:

if(OldBarOpenTimeD1 != iTime(NULL,PERIOD_D1,0))
weil immer noch
OldBarOpenTimeD1 = iTime(NULL,PERIOD_D1,0) ist!

Nach Zusatz des Codes im OnInit() um die Zeilen:
OldBarOpenTimeD1 = 0;
OldBarOpenTimeH1 = 0;

werden immer beide Abfagen anfangs true sein und damit der Klammerausdruck abgearbeitet.

Und dann erscheinen immer und sofort die richtigen Indikatorwerte.

traderdoc

Dick_Turpin 23.08.16 09:24

Liste der Anhänge anzeigen (Anzahl: 2)
Hallo traderdoc,

vielen Dank für Deine Hilfe und die Infos, wieder was dazu gelernt.

Aber: Ich habe den EA jetzt mal komplett auf das pure Auslesen der Indi-Werte reduziert und habe immer noch das Problem, dass beim ersten Auslesen die Werte nicht stimmen.

Anbei der EA und das Logfile mit eingefügten Kommentaren.

Ich versuche jetzt noch mal ohne WP-Array die Werte einzulesen...

Gruß
Dick

Dick_Turpin 23.08.16 12:11

Liste der Anhänge anzeigen (Anzahl: 2)
So, ohne WP-Array klappt die Sache, siehe angehängten EA und Logfile.

Ist natürlich etwas seeehr umständlich das Ganze.

Gruß
Dick

ralfbenker 23.08.16 13:03

Jo, ganz schön eigenartig.

Hast Du mal versucht mit:

Closekurs[i] = iClose(argSymbol,PERIOD_H1,i);

die zugehörigen Closekurse zu ermitteln und Dir anzeigen zu lassen ? Die Kurse dürften dann ja auch nicht stimmen da die Indikatorwerte ja aus diesen berechnet werden.

traderdoc 23.08.16 13:53

Also an einer prinzipiellen Benutzung eines Arrays kann und darf es nicht liegen.

Ich würde z.B. auch mal mit w=1 beginnen, zumal der Indikatorwert der aktuellen Kerze eh nich ausgegeben wird.

Ansonsten schaue ich mir den vorletzten Code heute Abend noch mal an.

traderdoc

Dick_Turpin 23.08.16 20:52

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von traderdoc (Beitrag 35483)
Ich würde z.B. auch mal mit w=1 beginnen, zumal der Indikatorwert der aktuellen Kerze eh nich ausgegeben wird.

traderdoc

hab ich gemacht, hat aber leider auch nichts gebracht.

Das Verhalten ist wirklich sehr rätselhaft:
Wenn ich den EA zum ersten Mal die Werte in einem neuen TF auslesen lasse, dann sind viele Werte falsch. Sobald ich aber den EA erneut im selben TF auslesen lasse, stimmen die Werte immer.

Sobald die Indi-Werte nicht stimmen, stimmt auch der Closekurs nicht. Anbei der EA incl. Closekurs.

Gruß
Dick

ralfbenker 24.08.16 15:24

Liste der Anhänge anzeigen (Anzahl: 1)
Merkwürdig, hab deine Dick2 gerade eben ausprobiert, unterschiedliche Charts unterschiedliche Timeframes und erster/zweiter/dritter Durchlauf machen keinen Unterschied.

Allerdings hab ich nur drei Währungspaare drin gelassen weil ich zu faul war die ganzen Namen zu ändern :-(

Dick_Turpin 25.08.16 21:15

Bei mir tritt der Fehler auf zwei unterschiedlichen Rechnern auf...

Aufgefallen ist mir das Problem zum ersten mal in der richtigen Fassung meines EA, wo bei jeder Neueröffnung eines H4-Bar einmal die ReadIndi()- und einmal die PrintIndi()-Funktion für den H4-TF aufgerufen wird. Hier habe ich dann im Nachhinein festgestellt, dass die Indi-Werte öfters falsch bzw. verschoben sind.

Habe auch noch mal das Auslesen und Ausgeben der Indi-Werte direkt in der OnInit()-Funktion probiert - aber gleiches Problem.

Bin mit meiner Weisheit nun am Ende. Wenn nicht noch der traderdoc eine Idee hat, dann muss ich meinen EA eben irgendwie umschreiben...

Vielleicht bringt es ja was, wenn ich die Indi-Werte ständig, z.B. alle 5 Minuten aufrufe, auch wenn ich eigentlich nur alle 4 Stunden die Werte brauche...

Gruß
Dick

traderdoc 25.08.16 21:35

Na wenn Du auf demselben TF bleibst, zeigt er doch permanent die richtigen Werte an oder nicht?
Und wenn das TF gewechselt wird, dann muß eben halt eine Schleife zweimal durchlaufen werden, um die richtigen Werte zu erhalten. So oft wird doch so ein Wechsel nicht stattfinden!?

traderdoc

Dick_Turpin 25.08.16 21:55

Hallo traderdoc,

in der ursprünglichen Version ist der EA 24 h durchgelaufen und hat nur zwischen morgens 7:00 Uhr und abends 19:00 Uhr bei Eröffnung eines neuen H4-Bar die H4-Werte ausgelesen. Und hier sind mir irgendwann die verschobenen Werte aufgefallen. D.h. der EA ist zwischen dem Auslesen während der 4 Stunden irgendwie "eingeschlafen" und hat dann die Werte irgendwie durcheinander gebracht. Aber nicht immer und auch mal nur um 1 Bar oder dann mal um 4 Bar verschoben...

In der PrintIndi()-Funktion habe ich ja auch noch mal ein frisches Auslesen der Werte, neben der Ausgabe der Array-Inhalte, mit eingebaut, und da waren die Werte genau so verschoben wie die im Array, obwohl das ja schon das zweite Auslesen war?!?

Gruß
Dick

traderdoc 25.08.16 22:11

Ok, ich habe jetzt leider nicht die Zeit, um nach einer sofortigen Lösung zu suchen, behalte aber die Problematik im Kopf und komme zu gegebener Zeit darauf zurück.

traderdoc

Dick_Turpin 26.08.16 07:28

Danke traderdoc!

Sollte ich etwas neues zu diesem Problem finden, melde ich mich...

Gruß
Dick

Dick_Turpin 09.09.16 21:11

Also eine Möglichkeit für diesen rätselhaften Fehler könnte vielleicht auch ein Bug im MT4 sein... Zu dieser Zeit kam auch mindestens ein Update für den MT4.

Ich habe das Problem jetzt so gelöst, dass ich vor dem ersten Schleifendurchlauf für des Auslesen der Indi-Werte einen zusätzlichen Schleifendurchlauf ausführe, wie auch schon der traderdoc weiter oben schon mal vorgeschlagen hatte.

Gruß
Dick


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:30 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum