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)
-   -   Non Repainting SuperTrend richtig auslesen (http://www.expert-advisor.com/forum/showthread.php?t=3784)

Dick_Turpin 05.08.14 16:39

Non Repainting SuperTrend richtig auslesen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo an alle,

ich möchte gern den aktuellen Trend (buy oder sell) aus o.g. NRST-Indikator auslesen.

Nun habe ich versucht, den NRST-Indikator über die ICustom-Funktion auszulesen aber es funktioniert nicht so richtig. Sehr oft bekomme ich nur den Default EMPTY-VALUE 2147483647 angezeigt.
Ich vermute, dass das Problem bei der Angabe des Shift-Parameters liegt. Wie ich schon festgestellt habe, wird bei Shift 0 immer nur der EMPTY-VALUE ausgegeben, erst ab Shift 1 aufwärts werden Werte angezeigt.

Ich kann im NRST folgende 4 Werte auslesen:
SetIndexBuffer(0,TrendUp)
SetIndexBuffer(1,TrendDown)
SetIndexBuffer(2,UpBuffer)
SetIndexBuffer(3,DnBuffer)

Wenn der Trend wechselt, wird dies immer durch einen roten oder blauen Pfeil angezeigt. Ich denke, dass die beiden Werte "UpBuffer" und "DnBuffer" für diese beiden Pfeile stehen, und die Werte "TrendUp" und "TrendDn" stehen für die beiden Linien, bin mir aber nicht sicher...
Manchmal werden im Abwärtstrend auch Kurse im "TrendUp" oder "UpBuffer" angezeigt?

Kann mir jemand sagen, wie ich die o.g. 4 Werte richtig auslesen kann?

Anbei der MQL4-Code des NRST-Indikators und meines TEST01-EA's.

Gruß
Dick

Dick_Turpin 05.08.14 20:50

Habe eben den ersten Fehler gefunden:

Bei der Definition der Parameter für den NRST haben die Werte für die einzelnen Parameter gefehlt...

Gruß
Dick

fxdaytrader 05.08.14 23:08

iCustom - MQL4 Documentation das ist der Befehl, am besten mal EAs suchen die auch den supertrend-indikator nutzen und schauen wie das dort geregelt wurde ...

Dick_Turpin 06.08.14 09:09

@fxdaytrader: Danke für Deine Antwort.

Mittlerweile meine ich, nach einigem Testen, folgendes zu den 4 auslesbaren Werten des Supertrend herausgefunden:

SetIndexBuffer(0,TrendUp): hier ist ab der letzten abgeschlossenen Periode (Shift 1) ein Wert enthalten, wenn ein Aufwärtstrend aktiv ist

SetIndexBuffer(1,TrendDown): hier ist ab der letzten abgeschlossenen Periode (Shift 1) ein Wert enthalten, wenn ein Abwärtstrend aktiv ist

SetIndexBuffer(2,UpBuffer): Hier ist nur in dem Moment ein Wert zu finden, wenn der Trend vom Abwärtstrend zum Aufwärtstrend wechselt. Man kann diesen Wert auch erst ab der letzten abgeschlossenen Periode (Shift 1) abfragen. Man kann aber auch, wenn man mit dem Shift-Parameter entsprechend weit zurück geht, z.B. Shift 14 o.ä., diesen Wert noch im nachhinein abfragen.

SetIndexBuffer(3,DnBuffer): Hier ist nur in dem Moment ein Wert zu finden, wenn der Trend vom Aufwärtstrend zum Abwärtstrend wechselt. Man kann diesen Wert auch erst ab der letzten abgeschlossenen Periode (Shift 1) abfragen. Hier kann man auch, wenn man mit dem Shift-Parameter entsprechend weit zurück geht, z.B. Shift 14 o.ä., diesen Wert noch im nachhinein abfragen.

Gruß
Dick

Dick_Turpin 12.08.14 17:13

Also so richtig zufrieden bin ich mit dem Supertrend nicht...

Habe seit einigen Tagen einen EA am laufen, wo nur morgens zwischen 07:30 und 08:00 Uhr im EURUSD gekauft werden soll (Long oder Short, je nachdem, ob Aufwärts- oder Abwärts-Trend aktiv ist). Gegengeprüft wird das ganze dann noch mit ADX und RSI. Soweit funktioniert der EA auch und macht was er soll. Nur der Supertrend hat mich bzw. meinen EA heute angeschmiert :mad:

Und zwar läuft und tradet der EA im M15 Chart. Im M15 Chart stand der Supertrend heute schon seit ca. 90 Perioden auf Abwärtstrend. Aber mein EA hat eine Long-Order ausgeführt??? Bis jetzt steht der Supertrend im M15 Chart immer noch unverändert auf Abwärtstrend.
Im M5 Chart stand der Supertrend zum Zeitpunkt des Kaufs mal kurz auf Aufwärtstrend bevor er wieder auf Abwärtstrend gewechselt ist.
Kann es sein, dass der Supertrend zum Zeitpunkt des Kaufs zwischen Aufwärts- und Abwärts-Trend hin und her gerissen war :confused:

Ich habe auch schon beobachtet, dass wenn ich den Supertrend im Chartfenster aktiviert habe, es manchmal so aussieht, als ob der Trend wechselt, weil schon die andere Trendrichtung angezeigt wird. Aber wenn ich kurz aus dem Fenster raus und wieder rein gehe, dann ist der ursprüngliche Trend durchgehend intakt und kein Trendwechsel da.

Kann mir vielleicht jemand etwas dazu sagen?

Gruß
Dick

fxdaytrader 12.08.14 18:38

Liste der Anhänge anzeigen (Anzahl: 1)
Der holy grail ist das sicher nicht.

ich kopiere mal ein bisserl code, das lässt sich in einem Ea nutzen:

variablen:
Code:

//
extern bool TradeOnSuperTrendUpDnSignals  = true;
extern bool TradeIfSuperTrendDirectionIsOk = true;
//
extern int    SuperTrendAtrPeriod      = 13;
extern double SuperTrendAtrMultiplier  = 3.5;
string iCustomSuperTrendName = "NonRepaintingSuperTrend";

functions:
Code:

int GetIndicatorValues() {
 int type=99;

 if (TradeIfSuperTrendDirectionIsOk) {
  if (SuperTrendNRPOk(OP_BUY)) return(OP_BUY);
  if (SuperTrendNRPOk(OP_SELL)) return(OP_SELL);
 }
 
 if (TradeOnSuperTrendUpDnSignals) {
  if (SuperTrendNRPSignalOk(OP_BUY)) return(OP_BUY);
  if (SuperTrendNRPSignalOk(OP_SELL)) return(OP_SELL);
 }
 
 return(type);
}

bool SuperTrendNRPOk(int type) {
 double tup = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTrendAtrPeriod,SuperTrendAtrMultiplier,0,SignalCandle);
 double tdn = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTrendAtrPeriod,SuperTrendAtrMultiplier,1,SignalCandle);
 if (type==OP_BUY && tup!=EMPTY_VALUE && tdn==EMPTY_VALUE) return(true);
 if (type==OP_SELL && tup==EMPTY_VALUE && tdn!=EMPTY_VALUE) return(true);
 return(false);
}

bool SuperTrendNRPSignalOk(int type) {
 double tup = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTrendAtrPeriod,SuperTrendAtrMultiplier,2,SignalCandle);
 double tdn = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTrendAtrPeriod,SuperTrendAtrMultiplier,3,SignalCandle);
 if (type==OP_BUY && tup!=EMPTY_VALUE && tdn==EMPTY_VALUE) return(true);
 if (type==OP_SELL && tup==EMPTY_VALUE && tdn!=EMPTY_VALUE) return(true);
 return(false);
}


Dick_Turpin 12.08.14 22:01

Danke für den Code!

Leider bekomme ich von folgenden Aufrufen immer nur 0 zurück und keine Kurse:

double tup = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTren dAtrPeriod,SuperTrendAtrMultiplier,0,1);
double tdn = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTren dAtrPeriod,SuperTrendAtrMultiplier,1,1);
double tup = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTren dAtrPeriod,SuperTrendAtrMultiplier,2,1);
double tdn = iCustom(Symbol(),0,iCustomSuperTrendName,SuperTren dAtrPeriod,SuperTrendAtrMultiplier,3,1);

Mich wundert, dass in der iCustom-Definition nicht alle Input-Parameter angegeben sind, sondern nur die Periode und der Multiplier. Wenn ich die Doku richtig gelesen habe, dann müssen ALLE Input-Parameter des Indikators angegeben sein.

Noch eine Frage: Was bedeutet SignalCandle als Shift-Parameter in der iCustom-Definition? Wenn ich das so kompiliere bekomme ich die Fehlermeldung "'SignalCandle' - undeclared identifier", deshalb habe ich hier jeweils eine 1 eingesetzt.

Ich habe bei mir den iCustom so definiert, incl. aller Input-Parameter:

double TrendUp_current = iCustom(NULL,0,"Non_Repainting_SuperTrend",Nbr_Per iods,Multiplier,sidFontSize,sidFontName,NoteRedGre enBlue,sidRed,sidGreen,sidBlue,sidXPos,sidYPos,tag DisplayText,tagText,tagFontSize,tagFontName,tagRed ,tagGreen,tagBlue,tagXPos,tagYPos,0,1);
double TrendDn_current = iCustom(NULL,0,"Non_Repainting_SuperTrend",Nbr_Per iods,Multiplier,sidFontSize,sidFontName,NoteRedGre enBlue,sidRed,sidGreen,sidBlue,sidXPos,sidYPos,tag DisplayText,tagText,tagFontSize,tagFontName,tagRed ,tagGreen,tagBlue,tagXPos,tagYPos,1,1);

double Up_current = iCustom(NULL,0,"Non_Repainting_SuperTrend",Nbr_Per iods,Multiplier,sidFontSize,sidFontName,NoteRedGre enBlue,sidRed,sidGreen,sidBlue,sidXPos,sidYPos,tag DisplayText,tagText,tagFontSize,tagFontName,tagRed ,tagGreen,tagBlue,tagXPos,tagYPos,2,1);
double Dn_current = iCustom(NULL,0,"Non_Repainting_SuperTrend",Nbr_Per iods,Multiplier,sidFontSize,sidFontName,NoteRedGre enBlue,sidRed,sidGreen,sidBlue,sidXPos,sidYPos,tag DisplayText,tagText,tagFontSize,tagFontName,tagRed ,tagGreen,tagBlue,tagXPos,tagYPos,3,1);

Comment ("TrendUp_cur: " + TrendUp_current, " TrendDn_cur: " + TrendDn_current, " Up_current: " + Up_current, " Dn_current: " + Dn_current);

fxdaytrader 12.08.14 22:25

Liste der Anhänge anzeigen (Anzahl: 1)
SignalCandle ist gleich candleshift, also 0 heisst aktuelle Kerze, 1 die vorhergehende, etc.
im header bspw. int SignalCandle=1; einfügen.

Du mußt den von mir angehängten indikator verwenden, der kommt nämlich mit 2 input-parametern aus (ich habe alle nicht benötigten Parameter entfernt).
Daß das funktioniert sieht man an dem gerade von mir angefertigten screenshot

fxdaytrader 12.08.14 22:34

Liste der Anhänge anzeigen (Anzahl: 1)
Als Anhang ein EA, er verwendet zur Signalgenerierung die Logik wie von mir oben publiziert.
Weiter benötigt der EA den indikator aus post http://www.expert-advisor.com/forum/...html#post27152 ...

Dick_Turpin 13.08.14 11:03

Hi fx,

ich hatte gestern abend zwar Deinen Supertrend-Indikator installiert aber meinen alten Supertrend-Indikator nicht deinstalliert. Vielleicht lags daran. Das kann ich aber erst heute abend noch mal testen...

Bei Tests heute morgen habe ich festgestellt, dass der Supertrend durchaus auch mal in beide Richtungen gleichzeitig einen Trend anzeigt :eek: Besonders, wenn in den kleineren Zeiteinheiten eine andere Trendrichtung aktiv ist oder ein Trendwechsel stattfindet. Deswegen auch mein Fehltrade gestern, wo im M15 Chart der Abwärtstrend schon seit ca. 90 Kerzen aktiv war aber im M5 Chart der Trend kurzzeitig von Abwärts auf Aufwärts schwankte und mein EA trotz aktivem Abwärtstrend im M15 Chart einen Buy ausgeführt hat.

Für mich heißt das, dass die vorletzte Kerze (candleshift 1), welche ich immer für die aktuell aktive Trendrichtung abfrage, nicht stabil ist und noch die Trendrichtung wechseln kann. Wäre es nun besser, anstatt die vorletzte Kerze (candleshift 1) die vor-vorletzte Kerze (candleshift 2) für die Abfrage der Tendrichtung zu verwenden, in der Hoffnung, dass sich hier die Trendrichtung nicht mehr ändert?

Und noch ne kleine Frage: Wo finde ich die Experten-Logfiles? Die Journal-Logfiles habe ich gefunden aber leider nicht die Experten-Logfiles. Und da hier die ganzen Print-Ausgaben der EA's reinlaufen, hätte ich auch gern diese Logiles.

Gruß
Dick


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:52 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