Hilfe bei der Codierung - Seite 239

 

Hallo,

ich habe den Standardindikator stepMA 9 in diesen Indikator in einem separaten Fenster als Histogramm geändert, aber ich weiß nicht, warum die Kaufsignale nicht mit dem Standardindikator synchronisiert sind (die Verkaufssignale sind es). Mit dem neuen Indikator treten sie einen Takt später auf als mit dem ursprünglichen Indikator. Warum? Ich habe nur den Teil des Codes geändert, der den grafischen Aspekt des Indikators bestimmt.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

Dateien:
 
thefxpros:
Hallo!

Ich habe den Standardindikator stepMA 9 in diesen Indikator in einem separaten Fenster als Histogramm umgewandelt, aber ich weiß nicht, warum die Kaufsignale nicht mit dem Standardindikator synchronisiert sind (die Verkaufssignale sind es). Mit dem neuen Indikator treten sie einen Takt später auf als mit dem ursprünglichen Indikator. Warum? Ich habe nur den Teil des Codes geändert, der den grafischen Aspekt des Indikators bestimmt.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

thefxpros

Das liegt daran, wie Linien gezeichnet werden.

Wenn Sie eine Linie zeichnen, müssen Sie damit beginnen, die Linie 1 Balken zurück zu zeichnen, damit sie sichtbar wird (sonst wäre sie ein Punkt und auf dem Chart überhaupt nicht sichtbar). Probieren Sie diese beiden und vergleichen Sie sie jetzt

Dateien:
 

Hallo,

Ich habe nach einem EA gesucht, der einen Handel in ähnlicher Weise eröffnet, wie ein Trailing-Stop funktionieren würde.

Nehmen wir an, ich warte auf ein Retracement bei einem Instrument. Ich würde meinen Handel so hoch (oder niedrig) auf dem Preis wie möglich eröffnen wollen. Mit einem EA wie diesem könnte ich also meine Handelsparameter festlegen, und dieser EA folgt dem Preis auf ähnliche Weise wie ein Trailing-Stop. Wenn es eine Umkehrung gibt, wird der Handel getroffen und eröffnet.

Haben Sie jemals einen solchen EA gesehen?

Vielen Dank

 

Hallo zusammen

ich habe versucht, Code gemacht, aber warum kann nicht öffnen Handel

int varCurrentTime = TimeCurrent();

for (int iTS = 0; iTS < 2000; iTS++) {

int varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varZonEnd = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "10:00");

int JamStart=TimeHour(varZonStart);

int JamEnd=TimeHour(varZonEnd);

if (JamStart>JamEnd) {

varCurrentTime = decDateTradeDay(varCurrentTime);

//if (TimeDayOfWeek(varCurTime) < 1) varCurTime = decDateTradeDay(varCurTime);

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime);

}

varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varShiftStart = iBarShift(NULL, 0, varZonStart - 60 * Period());

int varShiftEnd = iBarShift(NULL, 0, varZonEnd);

varHighest = High;

varLowest = Low;

varCurrentTime = decDateTradeDay(varCurrentTime); //set 1 hari kebelakang

if (TimeDayOfWeek(varCurrentTime) < 1) varCurrentTime = decDateTradeDay(varCurrentTime); //jika minggu mundur lagi

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime); //jika sabtu mundur lagi

}

for (int iTSh = 0; iTSh < 2000; iTSh++) {

for (int iTSl = 0; iTSl < 2000; iTSl++) {

if(((varHighest-varLowest)/Pip)<=5) varHL=(varHighest+varLowest)/2;

}

}

double isg10a = iOpen(Symbol(),PERIOD_M15,1);

double isg10b = iClose(Symbol(),PERIOD_M15,1);

int static isg10c = -1;

for (iTS = 0; iTS < 2000; iTS++) {

if(isg10avarHL)isg10c =0;

if(isg10a>varHL&&isg10b<varHL)isg10c =1;

}

if (isg10c==0) To code Buy

else if (isg10c==1) To code Sel

else no trade

 
mladen:
Jim Anstatt das ganze neu zu schreiben, habe ich ein Limit für die Berechnung der Balken hinzugefügt und dann werden alle diese Balken neu berechnet. Das sollte das Aktualisierungsproblem lösen (einfach den BarsTocalculate auf einem vernünftigen - nicht zu großen und nicht zu kleinen - Wert halten. Ich habe 1000 als Standardwert verwendet, und das scheint in Ordnung zu sein). Probieren Sie es aus

Liebe mladen,

vielen herzlichen Dank für Ihre Mühe und Ihre sehr schnelle Hilfe.

Ich werde es ausprobieren.

Viele Grüße aus München

 

Bitte helfen Sie mir, dieses Volumen-Indikator zu aktualisieren, um auf meinem mt4 anhängen

Hallo Gurus bitte helfen Sie mir bitte beheben Sie die Fehler in diesem Volumen-Indikator. Ich habe gerade bemerkt, dass es nicht in der Lage, auf meine mt4 Chart vor kurzem angehängt. Ich habe alles Mögliche getan, um die Fehler in der Datei zu beheben, aber ohne Erfolg. Ich vermute, es ist wegen der großen mt4 Upgrade. Alle anderen Indikatoren in meinem mt4-Ordner, sowohl die älteren als auch die neueren Versionen, funktionieren alle einwandfrei. Es war vor einem Jahr arbeiten ich es zuletzt verwendet. ich bin kein Programmierer noch.

Bitte finden Sie die angehängte Datei

 

Hallo MLaden und Mrtools,

ich hoffe es geht euch gut

Ich brauche eine Bestätigung von euch bezüglich des RSX

Ich sehe, dass Sie eine einfachere Formel zur Berechnung des RSX verwenden:

__________________________

double Kg = (3.0)/(2.0+Länge);

double Hg = 1.0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);

for(i=Limit, r=Balken-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Preis,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }

//

//

//

//

//

double mom = wrkPuffer[r][12]-wrkPuffer[r-1][12];

double moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkPuffer[r][kk+0] = Kg*mom + Hg*wrkPuffer[r-1][kk+0];

wrkPuffer[r][kk+1] = Kg*wrkPuffer[r][kk+0] + Hg*wrkPuffer[r-1][kk+1]; mom = 1,5*wrkPuffer[r][kk+0] - 0,5 * wrkPuffer[r][kk+1];

wrkPuffer[r][kk+6] = Kg*moa + Hg*wrkPuffer[r-1][kk+6];

wrkPuffer[r][kk+7] = Kg*wrkPuffer[r][kk+6] + Hg*wrkPuffer[r-1][kk+7]; moa = 1,5*wrkPuffer[r][kk+6] - 0,5 * wrkPuffer[r][kk+7];

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

sonst rsx = 50;

____________________________________

Nur um sicher zu gehen, dass Sie verstehen, wie RSX mit dieser Formel berechnet wird

Zuerst mit der Zeile:

mom = wrkPuffer[r][12]-wrkPuffer[r-1][12];

In der Tat ist wrkBuffer[r][12] der einfache gleitende Durchschnitt des Kurses, beachten Sie den Preis wie bei einem normalen RSI ?

Richtig? Aber ich verstehe nicht, was die Periode dieses SMA ist (wahrscheinlich nicht die Länge)?

Und danach, wenn ich gut mit den Linien verstanden habe:

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkPuffer[r][kk+0] = Kg*mom + Hg*wrkPuffer[r-1][kk+0];

wrkPuffer[r][kk+1] = Kg*wrkPuffer[r][kk+0] + Hg*wrkPuffer[r-1][kk+1];

mom = 1,5*wrkPuffer[r][kk+0] - 0,5 * wrkPuffer[r][kk+1];

In der Tat berechnet es dreimal die Mom (eine nach der anderen), mit der ersten Mom oben (mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];)

Ist das richtig?

Und danach ist "klassisch" mit RSX=((mom/moa)+1)*50

Vielen Dank für Ihre nächste Antwort, als Programmierer (auf einer anderen Plattform), Sie wissen, ich mag zu verstehen, wie die Codes funktionieren

Einen schönen Tag noch

Zilliq

 
zilliq:
Hallo MLaden und Mrtools,

Ich hoffe, es geht Ihnen gut

Ich brauche eine Bestätigung von Ihnen über den RSX

Ich sehe, dass Sie eine einfachere Formel zur Berechnung des RSX verwenden:

__________________________

double Kg = (3.0)/(2.0+Länge);

double Hg = 1.0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);

for(i=Limit, r=Balken-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Preis,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }

//

//

//

//

//

double mom = wrkPuffer[r][12]-wrkPuffer[r-1][12];

double moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkPuffer[r][kk+0] = Kg*mom + Hg*wrkPuffer[r-1][kk+0];

wrkPuffer[r][kk+1] = Kg*wrkPuffer[r][kk+0] + Hg*wrkPuffer[r-1][kk+1]; mom = 1,5*wrkPuffer[r][kk+0] - 0,5 * wrkPuffer[r][kk+1];

wrkPuffer[r][kk+6] = Kg*moa + Hg*wrkPuffer[r-1][kk+6];

wrkPuffer[r][kk+7] = Kg*wrkPuffer[r][kk+6] + Hg*wrkPuffer[r-1][kk+7]; moa = 1,5*wrkPuffer[r][kk+6] - 0,5 * wrkPuffer[r][kk+7];

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

sonst rsx = 50;

____________________________________

Nur um sicher zu gehen, dass Sie verstehen, wie RSX mit dieser Formel berechnet wird

Zuerst mit der Zeile:

mom = wrkPuffer[r][12]-wrkPuffer[r-1][12];

In der Tat ist wrkBuffer[r][12] der einfache gleitende Durchschnitt des Kurses, beachten Sie den Preis wie bei einem normalen RSI ?

Richtig? Aber ich verstehe nicht, was die Periode dieses SMA ist (wahrscheinlich nicht die Länge)?

Und danach, wenn ich gut mit den Linien verstanden habe:

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkPuffer[r][kk+0] = Kg*mom + Hg*wrkPuffer[r-1][kk+0];

wrkPuffer[r][kk+1] = Kg*wrkPuffer[r][kk+0] + Hg*wrkPuffer[r-1][kk+1];

mom = 1,5*wrkPuffer[r][kk+0] - 0,5 * wrkPuffer[r][kk+1];

In der Tat berechnet es dreimal die Mom (eine nach der anderen), mit der ersten Mom oben (mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];)

Ist das richtig?

Und danach ist "klassisch" mit RSX=((mom/moa)+1)*50

Vielen Dank für Ihre nächste Antwort, als Programmierer (auf einer anderen Plattform), Sie wissen, ich mag zu verstehen, wie die Codes funktionieren

Einen schönen Tag noch

Zilliq

"In der Tat ist wrkBuffer[r][12] der einfache gleitende Durchschnitt des Preises, beachten Sie den Preis wie bei einem gewöhnlichen RSI ?"

Nein. Die Berechnungsperiode für diesen Durchschnitt ist 1, was bedeutet, dass er gleich dem Preis des verwendeten "Durchschnitts" ist. In Metatader ist das der schnellste Weg, um den gewünschten Preis zu erhalten (wenn Sie versuchen, die "Case"-Struktur zu schreiben, die dasselbe tut, werden Sie sehen, dass es viel langsamer ist als der Weg, der im rsx-Code verwendet wird)

"In der Tat berechnet es dreimal die Mutter (eine nach der anderen), wobei die erste Mutter oben steht.

Nein. Sehen Sie sich an, welche Werte in jeder neuen Iteration verwendet werden. mom und moa werden während der Schleife ständig geändert und wiederverwendet (in dieser geänderten Form)

 

Vielen Dank, Mladen,

Es ist sehr seltsam, wenn ich richtig verstanden habe, dass wrkBuffer[r][12] gleich dem Preis ist, aber Sie verwenden einen gleitenden Durchschnitt mit einer Periode von 1, um die Berechnung zu beschleunigen. Das ist sehr merkwürdig...

Für die zweite Sache, ich denke/vermutlich ist es das, was ich zu sagen versuche

er berechnet den Mom als Momentum des Preises

Und es berechnet eine andere Mutter mit Kg und Hg. Es gibt eine neue Mutter, die verwendet wird, um eine neue Mutter erstellt, und so weiter, 3 mal

Etwas "einfacheres" (um das Verständnis zu erleichtern) wie dieses

mutter

mom1=kg*mom

mama2=kg*mama1

mama3=kg*mama2

Und am Ende verwendet es mom3 und moa3

Liege ich richtig?

 
zilliq:
Vielen Dank, Mladen,

Es ist sehr seltsam, wenn ich richtig verstanden habe, dass wrkBuffer[r][12] gleich dem Preis ist, aber Sie verwenden einen gleitenden Durchschnitt mit einer Periode von 1, um die Berechnung zu beschleunigen. Das ist sehr merkwürdig...

Für die zweite Sache, ich denke/vermutlich ist es das, was ich zu sagen versuche

er berechnet den Mom als Momentum des Preises

Und es berechnet eine andere Mutter mit Kg und Hg. Es gibt eine neue Mutter, die verwendet wird, um eine neue Mutter erstellt, und so weiter, 3 mal

Etwas "einfacheres" (um das Verständnis zu erleichtern) wie dieses

mutter

mom1=kg*mom

mama2=kg*mama1

mama3=kg*mama2

Und am Ende verwendet es mom3 und moa3

Habe ich Recht?

Zilliq,

ja, so wird es gemacht