Wie programmiert man? - Seite 301

 

Hallo Mladen,

Danke für die Erklärung, aber was meinst du mit dem Wert des ersten geschlossenen Balkens? Ist es der erste geschlossene Balkenwert oder der aktuelle Balken oder danach? Und was bedeutet dann aktuell+0 oder aktuell+1?

Viele Grüße

Terrance

mladen:
Terrance

MODE_MAIN bedeutet, dass Sie den Wert der stochastischen Linie einlesen. MODE_SIGNAL bedeutet, dass Sie den Wert der stochastischen Signallinie einlesen.

SHIFT ist für alle Indikatoren gleich (auch für die benutzerdefinierten). Ein Beispiel: SHIFT=0 bedeutet den Wert des aktuellen Balkens, SHIFT=1 bedeutet den Wert des ersten geschlossenen Balkens und so weiter ...
 

...

Terrance

Der aktuelle Balken ist per Definition noch kein geschlossener Balken

Der erste Balken vor dem aktuellen Balken ist der erste geschlossene Balken

tkuan77:
Hallo Mladen,

Danke für die Erklärung, aber was meinen Sie mit dem Wert des ersten geschlossenen Balkens? Ist es der Wert des ersten geschlossenen Balkens oder der aktuelle Balken oder danach? Was bedeutet dann aktuell+0 oder aktuell+1?

Gruß

Terrance
 

Hallo Mladen,

Liege ich also richtig, wenn ich sage, dass:

current+0 ist gleich dem Wert 0,

current+1 ist der gleiche wie der Wert 1,

current+2 ist der gleiche wie der Wert 2,

und so weiter..... für SHIFT?

Z.B.:

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); ist das gleiche wie iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);

Liege ich mit dieser Aussage richtig?

Mit freundlichen Grüßen

Terrance

mladen:
Terrance

Der aktuelle Balken ist per Definition noch kein geschlossener Balken.

Der erste Balken vor dem aktuellen Balken ist der erste geschlossene Balken
 

...

Terrance

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); ist die aktuelle

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); ist die erste geschlossene (vorherige)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); ist der älteste im Chart

PS: in diesem Beitrag haben Sie mehr Informationen über Bars: https: //www.mql5.com/en/forum/173124

tkuan77:
Hallo Mladen,

Liege ich also richtig, wenn ich sage, dass:

current+0 ist gleich dem Wert 0,

current+1 ist der gleiche wie der Wert 1,

current+2 ist der gleiche Wert wie 2,

und so weiter..... für SHIFT?

Z.B.:

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); ist das gleiche wie iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);

Liege ich mit dieser Aussage richtig?

Mit freundlichen Grüßen

Terrance
 

Hallo Mladen,

Danke für die tolle Hilfe, wie immer!

Viele Grüße

Terrance

mladen:
Terrance

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); ist die aktuelle

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); ist die erste geschlossene (vorherige)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); ist der älteste im Chart

PS: In diesem Beitrag finden Sie weitere Informationen über Bars: https: //www.mql5.com/en/forum/173124
 

Ein paar Probleme

Hallo zusammen,

Ich habe meinen Code getestet und er ist fast fertig. Ich habe ein paar Fragen, bei denen ich hoffe, dass ihr mir helfen könnt.

Ich habe folgendes in int init() eingegeben:

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART");

return(0);

}

Die SlowMAPeriod ist 200. Wenn ich einen Backtest ab dem 01.01.2009 durchführe, wird diese Fehlermeldung ausgegeben, obwohl ich auf meinem Chart deutlich sehen kann, dass es genügend Balken gibt, um den 200SMA von 2008 zu berechnen. Übersehe ich hier etwas?

2. Ich platziere Trades auf dem H4-Chart, aber nur in Richtung des Tagestrends. Ich zeichne die Werte mit dem folgenden Code:

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Wenn ich dann nach einer Long-Position suche, beziehe ich mich auf sie, indem ich

if (FastMACurrent > SlowMACurrent && ... etc ... )

Ist dies korrekt, da es nicht so aussieht, als würde es meine Trades richtig filtern?

3. Ich verwende auch einen Trendfilter auf dem H4-Chart, indem ich nur dann Long-Positionen eingehe, wenn der Preis das vorherige Hoch der letzten 120 Perioden überschritten hat (und dann über dem Tief der 120 Perioden bleibt). Ich verwende diesen Code:

Donchian_Low = Low;

Donchian_High = Hoch;

static bool Aufwärtstrend = FALSE;

statisches bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Dann verwende ich den folgenden Code (z.B. für Long-Positionen):

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... )

Aber es scheint nicht zu funktionieren, denn wenn ich mein Backtesting-Chart mit einem Donchian Channel von 120 Perioden vergleiche, klappt es nicht. Irgendwelche Ideen?

Vielen Dank im Voraus.

 

...

1. Setzen Sie ihn an den Anfang der Funktion start(). Init ist unzuverlässig, wenn es sich um Daten wie Bars handelt.

2. Diese Bedingung ist wahr, wenn FastMACurrent > SlowMACurrent ist. Ist es das, was Sie wollten, oder suchen Sie vielleicht nach Kreuzen?

3. Das steht wahrscheinlich im Zusammenhang mit Punkt 2. Sie müssen die Bedingungen, unter denen Aufträge eingegeben werden können, einschränken, da auf diese Weise zu viele Möglichkeiten abgedeckt werden.

crsnape@btinternet.com:
Hallo zusammen,

Ich habe meinen Code getestet und er ist fast fertig. Ich habe ein paar Fragen, ich hoffe, Sie können mir helfen mit.

Ich habe dies in int init() eingegeben:

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART");

return(0);

}

Die SlowMAPeriod ist 200. Wenn ich einen Backtest ab dem 01.01.2009 durchführe, wird diese Fehlermeldung angezeigt, obwohl ich auf meinem Chart deutlich sehen kann, dass es genügend Balken gibt, um den 200SMA von 2008 zu berechnen. Übersehe ich hier etwas?

2. Ich platziere Trades auf dem H4-Chart, aber nur in Richtung des Tagestrends. Ich zeichne die Werte mit dem folgenden Code:

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Wenn ich dann nach einer Long-Position suche, beziehe ich mich auf sie, indem ich

if (FastMACurrent > SlowMACurrent && ... etc ... )

Ist dies korrekt, da es nicht so aussieht, als würde es meine Trades richtig filtern?

3. Ich verwende auch einen Trendfilter auf dem H4-Chart, indem ich nur dann Long-Positionen eingehe, wenn der Preis das vorherige Hoch der letzten 120 Perioden überschritten hat (und dann über dem Tief der 120 Perioden bleibt). Ich verwende diesen Code:

Donchian_Low = Low;

Donchian_High = Hoch;

static bool Aufwärtstrend = FALSE;

statisches bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Dann verwende ich den folgenden Code (z. B. für Long-Positionen):

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... )

Aber es scheint nicht zu funktionieren, denn wenn ich mein Backtesting-Chart mit einem Donchian Channel von 120 Perioden vergleiche, klappt es nicht. Irgendwelche Ideen?

Vielen Dank im Voraus.
 

Hallo mladen,

1. OK, wird gemacht.

2. Ja, das ist richtig, ich will nicht von der Kreuzung eingeben, nur mit ihm für eine lange / kurze Filter auf kürzere Laufzeit Charts, zum Beispiel, wenn die schnelle MA ist über der langsamen MA auf dem Tageschart ich will es nur in Betracht ziehen, lange Positionen auf dem H4 Chart. Ich denke also, ich habe das richtig kodiert?

3. Ich bin nicht sicher, ob ich weiß, was Sie meinen, aber ich habe dies unter init start() eingefügt

static bool Aufwärtstrend = FALSE;

static bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Sollte ich die statischen bool-Variablen ganz an den Anfang stellen, um sie global zu machen? Könnte dies die Ursache sein?

 

...

3. Was passiert, wenn Sie Donchian_Low fragen (was die meiste Zeit der Fall ist). Ihre statischen Variablen zeigen immer noch die "alten" Zustände an, obwohl sie nicht mehr gültig sind (sie "erben" den Zustand und signalisieren so, dass sie oben oder unten sind, auch wenn sie es nicht mehr sind). Prüfen Sie, ob das die Ursache für Ihre Probleme ist

crsnape@btinternet.com:
Hallo mladen,

1. OK ist ausreichend.

2. Ja, das ist richtig, ich will nicht aus dem Kreuz eingeben, nur mit ihm für eine lange / kurze Filter auf kürzere Laufzeit Charts, zum Beispiel, wenn der schnelle MA ist über dem langsamen MA auf dem Tageschart ich will es nur zu berücksichtigen, lange Positionen auf dem H4 Chart. Ich denke also, ich habe das richtig kodiert?

3. Ich bin nicht sicher, ob ich weiß, was Sie meinen, aber ich habe dies unter init start() eingefügt

static bool Aufwärtstrend = FALSE;

static bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Sollte ich die statischen bool-Variablen ganz am Anfang einfügen, um sie global zu machen? Könnte dies die Ursache sein?
 

Gutes Argument. Ich werde mir das mal ansehen.

Eine Frage zu Funktionen, ist es möglich, eine Funktion innerhalb einer Funktion aufzurufen? Ich habe z.B. diese Funktion:

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (... etc

Später rufe ich sie dann auf:

double GetLotsLong (int NiedrigRisiko, int HochRisiko, double SLDistanceLong, string GetWinLossPreviousShort)