Hilfe bei der Codierung - Seite 170

 

Jupp... ich weiß nicht, wie geistesabwesend ich bin. Dank Ihrer rechtzeitigen Beratung werden die Zahlen von TB_TotalCount und VACount korrekt und absolut vernünftig. Aber meine Ziele der Suche nach VA High/Low immer noch in Schwierigkeiten, mein PC wieder mit diesem Teil der Codierung abgestürzt. Ich versuche jetzt wieder zu verstehen, warum.

Vielen Dank Mladen! Dein Rat gibt mir ein teilweises Lächeln nach einer ganzen weißen Nacht

 

Hallo Mladen,

ich wollte nur mitteilen, dass ich endlich den Rest meines Problems gelöst habe. Ich versuche, es weiter zu verbessern.

Obwohl du mir in diesem Fall so wenig Hilfe gegeben hast, wie du nur konntest, habe ich herausgefunden, dass das manchmal die beste Methode ist, jemandem etwas beizubringen, der auf seinem eigenen Fuß steht.

Vielen Dank von ganzem Herzen, Mladen!

Ich wünsche dir noch viele schöne Tage,

fareastol

 
zilliq:
Hallo Mladen,

Ich habe Erfolg mit dem relativen und absoluten Momentum

Vielen Dank für Ihre Hilfe, jetzt muss ich das Momentum für den rsx glätten

Zilliq

Ps: Wenn es jemandem helfen kann:

//Relatives Momentum bei Schlusskurs

ind1= close-close[1]

// Absolutes Momentum

ind2=abs(ind1)

ind3=wilderDurchschnitt[rs](ind1)

ind4=wilderDurchschnitt[rs](ind2)

ind3=(50*(ind3+ind4))/ind4

return ind3 as "RSI",0, 30, 70, 100

Zilliq

Werfen Sie einen Blick auf diesen Beitrag: https: //www.mql5.com/en/forum/178733/page36

Dort gibt es ein Beispiel, wie die Glättung durchgeführt werden kann

 

Danke Mladen, das werde ich sehen.

Einen schönen Tag und tausend Dank für all Ihre Hilfe und Arbeit

Zilliq

 

Nun, wenn ich in Ihrem Indikator rsi smoother 2 gut verstanden habe, ändern Sie einfach den wilderen Durchschnitt durch die Funktion ismooth

Und Sie "glätten" das relative und absolute Momentum

Ich mache dasselbe mit dem Hull-Durchschnitt, aber das Ergebnis ist nicht dasselbe, wie Sie auf meinem Bild sehen

Haben Sie eine Idee warum, oder mache ich einen Fehler?

Danke Mladen

Und der Code RSI14 und RSIsmoother 45

//Relatives Momentum auf Schlusskurs

ind1= close-close[1]

// Absolutes Momentum

ind2=abs(ind1)

// Relatives Momentum mit Hull-Durchschnitt glätten

v =(2*GewichteterDurchschnitt[Rund(rs/2)](ind1))-GewichteterDurchschnitt[rs](ind1)

ind3 = gewichteterDurchschnitt[Round(Sqrt(rs))](v)

// Glätten des absoluten Impulses mit Hull-Durchschnitt

v2 =(2*GewichteterDurchschnitt[Rund(rs/2)](ind2))-GewichteterDurchschnitt[rs](ind2)

ind4 = gewichteterDurchschnitt[Round(Sqrt(rs))](v2)

ind5=(50*(ind3+ind4))/ind4

ind5 als "RSI glatt" zurückgeben

Ich ersetze den wilderen Durchschnitt durch einen T3 Tillson für beide (relatives und absolutes Momentum), mit dem gleichen Problem

Dateien:
 

Dies ist einfach ein Ergebnis der Verwendung unterschiedlicher Glättungsmethoden. Unterschiedliche Glättungen führen zu unterschiedlichen Ergebnissen

Wenn Sie Ergebnisse erzielen wollen, die mit dem rsi im rsi-Thread vergleichbar sind, müssen Sie die Glättungsmethode verwenden, die in diesem Indikator verwendet wird.

 

Danke Mladen für deine Antwort

Es ist seltsam, dass eine Glättung des relativen und absoluten Momentums ein solches Ergebnis mit einigen Übertreibungen mit dem Hull-Durchschnitt und dem T3 ergibt

Können Sie mit einer mathematischen Formel (wenn möglich) erklären, wie die Glättung der ismooth-Funktion von MT4 funktioniert, um einen glatten RSI zu erhalten, der mit dem RSI vergleichbar ist, bitte, und ich werde es danach codieren

Vielen Dank und einen schönen Tag

Zilliq

Ihr MT4-Code und meine Interpretation:

//relatives Momentum

double mom = iMA(NULL,0,1,0,MODE_SMA,Price,i)-iMA(NULL,0,1,0,MODE_SMA,Price,i+1);

//absolutes Momentum

double moa = MathAbs(mom);

//Glätten des relativen Impulses mit der "ismooth-Funktion"

double tmom = iSmooth(mom,Länge,SmoothSpeed,i,0);

//Glätten des absoluten Impulses mit der "ismooth function"

double tmoa = iSmooth(moa,Length,SmoothSpeed,i,1);

if (tmoa != 0)

//And das Verhältnis 50*(RM+AM)(AM)

rsi = MathMax(MathMin((tmom/tmoa+1.0)*50.0,100.00),0.00);

sonst rsi = 50;

 

Zilliq

Sie haben den Quellcode in diesem Indikator. Konvertieren Sie ihn einfach in Prorealtime

 

Autsch, es ist nicht wirklich einfach für mich, die ismooth-Funktion zu interpretieren (MT4 ist so kompliziert im Vergleich zu PRT)

Ich versuche, den MT4-Code in mathematischen Code zu übersetzen, um ihn anschließend in PRT zu codieren.

Bitte können Sie meine Interpretation der verschiedenen Zeilen unter jeder Zeile bestätigen, bevor ich sie in PRT codiere.

Vielen Dank Mladen

Zilliq

double iSmooth(double price,int length, double speed, int r, int instanceNo=0)

{

if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars); instanceNo *= 5; r = Bars-r-1;

if(r<=2) { workSmooth[r] = Preis; workSmooth[r] = Preis; workSmooth[r] = Preis; return(Preis); }

//

//

//

//

//

_______________________________________________________________________

double beta = 0,45*(Länge-1,0)/(0,45*(Länge-1,0)+2,0);

beta = 0,45*(Länge-1,0)/(0,45*(Länge-1,0)+2,0)

_______________________________________________________________________

double alpha = MathPow(beta,Geschwindigkeit);

alpha = beta^Geschwindigkeit

_______________________________________________________________________

workSmooth[r] = price+alpha*(workSmooth[r-1]-price);

Filt0 = Preis+alpha*(Filt0[1]-Preis);

_______________________________________________________________________

workSmooth[r] = (Preis - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];

Filt1 = (Preis - Filt0 )*(1-alpha)+alpha*Filt1[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r];

Filt2 = Filt0 + Filt1

_______________________________________________________________________

workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1];

Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1];

Filt4=Filt3+Filt4[1]

_______________________________________________________________________

return(workSmooth[r]);

return Filt4

 
zilliq:
Autsch, es ist nicht wirklich einfach für mich, die ismooth-Funktion zu interpretieren (MT4 ist so kompliziert im Vergleich zu PRT)

Ich versuche, den MT4-Code in mathematischen Code zu übersetzen, um ihn anschließend auf PRT zu codieren.

Bitte können Sie meine Interpretation der verschiedenen Zeilen unter jeder Zeile bestätigen, bevor ich sie in PRT codiere.

Vielen Dank Mladen

Zilliq

double iSmooth(double price,int length, double speed, int r, int instanceNo=0)

{

if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars); instanceNo *= 5; r = Bars-r-1;

if(r<=2) { workSmooth[r] = Preis; workSmooth[r] = Preis; workSmooth[r] = Preis; return(Preis); }

//

//

//

//

//

_______________________________________________________________________

double beta = 0,45*(Länge-1,0)/(0,45*(Länge-1,0)+2,0);

beta = 0,45*(Länge-1,0)/(0,45*(Länge-1,0)+2,0)

_______________________________________________________________________

double alpha = MathPow(beta,Geschwindigkeit);

alpha = beta^Geschwindigkeit

_______________________________________________________________________

workSmooth[r] = price+alpha*(workSmooth[r-1]-price);

Filt0 = Preis+alpha*(Filt0[1]-Preis);

_______________________________________________________________________

workSmooth[r] = (Preis - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];

Filt1 = (Preis - Filt0 )*(1-alpha)+alpha*Filt1[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r];

Filt2 = Filt0 + Filt1

_______________________________________________________________________

workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1];

Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1];

Filt4=Filt3+Filt4[1]

_______________________________________________________________________

return(workSmooth[r]);

Rückgabe Filt4

Soweit ich das sehe, sollte das alles sein, aber bedenke, dass ich noch nie mit prorealtime gearbeitet habe