Dialogue de l'auteur. Alexander Smirnov. - page 37

 
Cette formule RMS^2 = M[X^2] - (M[X])^2, est en fait pour la variance, c'est-à-dire pour une caractéristique parfaite. Il est fort probable que, lors de sa dérivation, les sommes de "croisement" ont été explicitement ou implicitement réduites à zéro. Pour les grands échantillons, cela est suffisamment correct. Mais pour les petits échantillons, la valeur RMS réelle peut être différente. Mais je n'ai pas encore eu le temps de le vérifier.
 
Mathemat:

Yura, je veux compter les RMS plus rapidement que la fonction standard. Et si ça marche ? Pour un appel unique, il devrait être plus rapide que n'importe quel code écrit dans le langage, mais pour la masse (calcul du graphique entier), il est possible d'économiser sur les coûts.


Si nous parlons du sco pour la régression linéaire, il est calculé analytiquement en une étape par la formule suivante

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

D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, et A est le coefficient de régression linéaire Y=A*X+B

La récurrence n'est donc pas nécessaire ici.

PS Et les sommes croisées sont mises à zéro de manière explicite et purement analytique. La taille de l'échantillon n'a rien à voir avec cela.

 
Prival:

Toujours une erreur 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1 : argument négatif pour la fonction MathSqrt

À en juger par le contenu de l'erreur, le MathSqrt(lambda*lambda*lambda+16.0*lambda*lambda) doit se trouver quelque part par là. Mais lambda=MathAbs(Valeur1[i]/Valeur2[i]) ;ne peut pas être négatif.
C'est pourquoi la seule chose à laquelle je pense, juste au cas où, est d'exécuter lambda=0.0 ;
et/ou MathSqrt(MathAbs(lambda*lambda*lambda*lambda)) pour se débarrasser définitivement de cette erreur.
//---- boucle principale
double alpha, lambda=0.0 ;
//********************************************************************************************
pour (i = limite ; i >= 0 ; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
pour (i = limite ; 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];
}
pour (i = limite ; i >= 0 ; i--)
{
if(Value2[i]< Point)Value2[i]= Point;else lambda=MathAbs(Value1[i]/Value2[i]) ;

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

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

P.S. Généralement absurde. Cette erreur doit apparaître dans votre testeur.
P.P.S. Il est fort probable que la variable double lambda ; ait été initialisée par défaut avec de très petits déchets négatifs. Alors l'expression double lambda=0.0 ; devrait aider.
Slava nous apprend - ne jamais travailler par défaut, et on n'apprend pas !
 
VBAG:
Privé:

Toujours une erreur 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1 : argument négatif pour la fonction MathSqrt


P.S. C'est fou. Cette erreur apparaît-elle probablement dans votre testeur ?
P.P.S. Il est fort probable que la variable double lambda ; ait été initialisée par défaut avec de très petits déchets négatifs. Alors l'expression double lambda=0.0 ; devrait aider.
Slava nous apprend - ne jamais travailler par défaut, et on n'apprend pas !

Les botniks locaux essaient toujours d'inventer un vélo.

Ne vous inquiétez pas pour rien. Parmi les indices personnalisés, il y a Bands.mq4 - il y a un algorithme de calcul de la valeur efficace.
 
<br / translate="no">

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

D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, et A est le coefficient de régression linéaire Y=A*X+B

La récurrence n'est donc pas nécessaire ici.

Il y a beaucoup de choses inutiles dans ces formules.
Et que voulez-vous dire par la récurrence est inutile, comment les sommes sont-elles censées être calculées ? Ou avez-vous une idée de comment faire sans remplacer l'attente par la moyenne ?

P.S. Au fait, les sommes croisées ne partent pas toutes seules. Du moins, pas moi. Essayez de travailler non pas avec la variance mais avec l'expression "réelle".
 
RMS pour toute fonction

sq = 0.0;
for (int n=0; n<period; n++)
{
   dc = Close[n] - fx[n];
   sq += dc * dc;
}
sq = MathSqrt(sq/period);
Par conséquent, pour une régression linéaire, c'est

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:
Par conséquent, pour une régression linéaire, ce serait

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

C'est par définition. Si LR n'est pas trop court, vous pouvez calculer RMS plus précisément, sans aucun cycle supplémentaire. Il y a un code pour le calcul de RMS dans la source MovingLR.mq4, mais il est commenté et RMS est appelé rmsY.
 
lna01:

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

D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, et A est le coefficient de régression linéaire Y=A*X+B

La récurrence n'est donc pas nécessaire ici.

Il y a beaucoup de redondance dans ces formules.
Et comment voulez-vous dire que la récurrence n'est pas nécessaire, comment les sommes sont-elles censées être calculées ? Ou avez-vous une idée de la manière d'éviter de remplacer les gains attendus par une moyenne ?

P.S. Au fait, les sommes croisées ne partent pas toutes seules. Du moins, pas moi. Essayez de travailler non pas avec la variance mais avec l'expression "réelle".


Très désireux de savoir ce qui pourrait être superflu dans ces formules ? :-)

La MO est, bien sûr, remplacée par la moyenne et les sommes doivent être calculées. Cependant, une récidive ou même un cycle n'est pas nécessaire. La formule suivante est suffisante

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

Peut-être que vous voulez dire cette expression quand vous parlez de récurrence ? Alors, bien sûr, vous avez raison.

Quant à l'"expression réelle", d'où pensez-vous que viennent toutes ces formules ? Eh bien, si vous substituez à cette "expression réelle" les formules finies dérivées du MNC pour A et B, vous obtenez l'expression ci-dessus pour RMS. Je peux vous donner les calculs analytiques correspondants.

 
Yurixx:
lna01:


Je peux vous donner les calculs analytiques pertinents.


Avec de nouvelles données, les coefficients A et B peuvent changer, je pense, mais je peux me tromper :-). Pour la LR, cela semble être résolu, mais pour la régression parabolique, comment ?
 
lna01:
C'est par définition. Si LR n'est pas trop court, vous pouvez calculer RMS plus précisément, sans aucun cycle supplémentaire. Il y a un code pour le calcul de RMS dans la source MovingLR.mq4, mais il est commenté et RMS est appelé rmsY.
Oui, vous pouvez le faire une fois et soustraire le dernier élément et ajouter le nouveau premier. Ensuite, il fonctionne sans cycle. J'ai fait de telles choses avec mql2, dans MT3. Aujourd'hui encore, je le fais lorsque cela est nécessaire et pas seulement pour la régression linéaire.