Dialog des Autors. Alexander Smirnow. - Seite 37

 
Diese Formel RMS^2 = M[X^2] - (M[X])^2, gilt eigentlich für die Varianz, d. h. für eine perfekte Kennlinie. Höchstwahrscheinlich wurden bei der Ableitung die "Crossover"-Summen explizit oder implizit mit Null angesetzt. Für große Stichproben ist dies ausreichend. Bei kleinen Stichproben kann der tatsächliche RMS jedoch anders sein. Aber ich bin noch nicht dazu gekommen, es zu überprüfen.
 
Mathemat:

Jura, ich möchte den RMS schneller als die Standardfunktion zählen. Und wenn es funktioniert? Für einen einzelnen Aufruf sollte es schneller sein als jeder in der Sprache geschriebene Code, aber für die Masse (ganze Diagrammberechnung) ist es möglich, Kosten zu sparen.


Wenn es sich um sco für die lineare Regression handelt, wird es in einem Schritt analytisch nach der Formel berechnet

SKO^2=D[Y] - D[X]*A^2,

wobei D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, und A der lineare Regressionskoeffizient Y=A*X+B ist

Eine Wiederholung ist hier also nicht erforderlich.

PS Und die Quersummen werden explizit und rein analytisch auf Null gesetzt. Die Stichprobengröße hat damit nichts zu tun.

 
Prival:

Immer noch ein Fehler 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: negatives Argument für MathSqrt-Funktion

Nach dem Inhalt des Fehlers zu urteilen, muss der MathSqrt(lambda*lambda*lambda+16.0*lambda*lambda) irgendwo hier liegen. Aber lambda=MathAbs(Value1[i]/Value2[i]) ;kann nicht negativ sein.
Deshalb ist das Einzige, was mir für den Fall der Fälle einfällt, die Ausführung von lambda=0.0;
und/oder MathSqrt(MathAbs(lambda*lambda*lambda*lambda)), um diesen Fehler für immer loszuwerden.
//---- Hauptschleife
double alpha, lambda=0.0 ;
//********************************************************************************************
for (i = limit; i >= 0; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
for (i = limit; i >= 0; i--)
{
Value1[i]=SC*(Price[i]-Price[i+1])+4*SC*Value1[i+1];
Value2[i]=SC*(High[i]-Low[i])+4*SC*Value2[i+1];
}
for (i = limit; i >= 0; i--)
{
if(Wert2[i]< Punkt)Wert2[i]= Punkt;sonst lambda=MathAbs(Wert1[i]/Wert2[i]);

alpha=(-lambda*lambda+ MathSqrt(lambda*lambda*lambda) )/8.0;

Value3[i]=alpha*Price[i]+(1.0-alpha)*Value3[i+1];
}
//********************************************************************************************

P.S. Im Allgemeinen ist das Unsinn. Dieser Fehler muss in Ihrem Tester auftauchen.
P.P.S. Höchstwahrscheinlich wurde die Variable double lambda; standardmäßig mit sehr kleinem negativen Müll initialisiert. Dann sollte der Ausdruck double lambda=0.0; helfen.
Slawa lehrt uns - nie standardmäßig arbeiten, und wir lernen nicht!
 
VBAG:
Privatperson:

Immer noch ein Fehler 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: negatives Argument für MathSqrt-Funktion


P.S. Das ist verrückt. Tritt dieser Fehler möglicherweise in Ihrem Testgerät auf?
P.P.S. Höchstwahrscheinlich wurde die Variable double lambda; standardmäßig mit sehr kleinem negativen Müll initialisiert. Dann sollte der Ausdruck double lambda=0.0; helfen.
Slawa lehrt uns - nie standardmäßig arbeiten, und wir lernen nicht!

Lokale Botniks versuchen immer, ein Fahrrad zu erfinden.

Machen Sie sich nicht umsonst Sorgen. Unter den benutzerdefinierten Indizes gibt es Bands.mq4 - es gibt einen Algorithmus zur RMS-Berechnung
 
<br / translate="no">

SKO^2=D[Y] - D[X]*A^2,

wobei D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2 und A der lineare Regressionskoeffizient Y=A*X+B ist

Eine Wiederholung ist hier also nicht erforderlich.

In diesen Formeln sind viele unnötige Dinge enthalten.
Und was meinen Sie mit "Wiederholung ist unnötig", wie sollen die Summen berechnet werden? Oder haben Sie eine Idee, wie man auf die Ersetzung der Erwartung durch den Durchschnitt verzichten kann?

P.S. Übrigens, die Quersummen gehen nicht von selbst weg. Zumindest habe ich das nicht. Versuchen Sie, nicht mit der Varianz, sondern mit dem "echten" Ausdruck zu arbeiten
 
RMS für jede Funktion

sq = 0.0;
for (int n=0; n<period; n++)
{
   dc = Close[n] - fx[n];
   sq += dc * dc;
}
sq = MathSqrt(sq/period);
Für die lineare Regression lautet sie daher

sq = 0.0;
for (n=0; n<p; n++)
{
   lr = b + a * n;  
   dc = Close[n] - lr;
   sq += dc * dc;
}
sq = MathSqrt( sq / p );
 
ANG3110:
Für eine lineare Regression würde dies also bedeuten

sq = 0.0;
for (n=0; n<p; n++)
{
   lr = b + a * n;  
   dc = Close[n] - lr;
   sq += dc * dc;
}
sq = MathSqrt( sq / p );

Das liegt in der Natur der Sache. Wenn LR nicht zu kurz ist, können Sie den Effektivwert genauer berechnen, ohne einen zusätzlichen Zyklus. Im Quelltext MovingLR.mq4 ist Code für die RMS-Berechnung vorhanden, der jedoch auskommentiert ist und RMS rmsY heißt.
 
lna01:

SKO^2=D[Y] - D[X]*A^2,

wobei D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2 und A der lineare Regressionskoeffizient Y=A*X+B ist

Eine Wiederholung ist hier also nicht erforderlich.

Diese Formeln enthalten eine Menge Redundanz.
Und was meinen Sie damit, dass eine Wiederholung nicht erforderlich ist, wie sollen die Summen berechnet werden? Oder haben Sie eine Idee, wie man die Ersetzung der erwarteten Auszahlungen durch einen Mittelwert vermeiden kann?

P.S. Übrigens, die Quersummen gehen nicht von alleine weg. Zumindest habe ich das nicht getan. Versuchen Sie, nicht mit der Varianz, sondern mit dem "echten" Ausdruck zu arbeiten


Ich bin sehr daran interessiert zu erfahren, was in diesen Formeln überflüssig sein könnte. :-)

MO wird natürlich durch den Mittelwert ersetzt und es müssen Summen gebildet werden. Eine Wiederholung oder gar ein Zyklus ist jedoch nicht erforderlich. Die folgende Formel reicht aus

S(X)[i+1]=S(X)[i] - X[i-N+1] + X[i+1] wobei S(X)[i]=Summe(X[k]; k=i-N+1, i-N+2, ...,i-1,i )

Nun, vielleicht meinen Sie diesen Ausdruck, wenn Sie von Wiederholung sprechen? Dann haben Sie natürlich Recht.

Was den "realen Ausdruck" betrifft, woher stammen Ihrer Meinung nach all diese Formeln? Nun, wenn man in diesen "realen Ausdruck" die aus dem MNC abgeleiteten endlichen Formeln für A und B einsetzt, erhält man nur den obigen Ausdruck für RMS. Ich kann Ihnen die entsprechenden analytischen Berechnungen zur Verfügung stellen.

 
Yurixx:
lna01:


Ich kann Ihnen die entsprechenden analytischen Berechnungen zur Verfügung stellen.


Wenn es nicht zu viel Mühe macht, geben Sie bitte mehr Details von hier aus an. Mit neuen Daten können sich die Koeffizienten A und B ändern, denke ich, obwohl ich vielleicht falsch liege :-). Für LR scheint es gelöst zu sein, aber für die parabolische Regression wie?
 
lna01:
Das liegt in der Natur der Sache. Wenn LR nicht zu kurz ist, können Sie den Effektivwert genauer berechnen, ohne einen zusätzlichen Zyklus. Es gibt einen Code für die RMS-Berechnung im Quelltext MovingLR.mq4, aber er ist auskommentiert und RMS wird rmsY genannt.
Ja, Sie können es einmal machen und das letzte Element abziehen und das neue erste Element hinzufügen. Dann funktioniert es ohne Zyklus. Ich habe solche Dinge mit mql2, in MT3 getan. Auch jetzt mache ich das, wenn es nötig ist, und nicht nur bei der linearen Regression.