Diálogo do autor. Alexander Smirnov. - página 37

 
Esta fórmula RMS^2 = M[X^2] - (M[X])^2 é na verdade para variância, ou seja, para uma característica perfeita. Muito provavelmente, em sua derivação, as somas "crossover" foram explícita ou implicitamente zeradas. Para amostras grandes, isto é correto o suficiente. Mas para amostras pequenas, o RMS real pode ser diferente. Mas ainda não cheguei a verificá-lo.
 
Mathemat:

Yura, você quer contar o RMS mais rápido do que a função padrão. E se funcionar? Para uma única chamada, deve ser mais rápido do que qualquer código escrito no idioma, mas para a massa (cálculo de gráficos inteiros) é possível economizar nos custos.


Se estamos falando de sco para regressão linear, ele é calculado analiticamente em uma etapa pela fórmula

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

onde D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, e A é o coeficiente de regressão linear Y=A*X+B

Portanto, a recorrência não é necessária aqui.

PS E as somas cruzadas são zeradas de forma explícita e puramente analítica. O tamanho da amostra não tem nada a ver com isso.

 
Prival:

Ainda um erro 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: argumento negativo para a função MathSqrt

A julgar pelo conteúdo do erro, o MathSqrt(lambda*lambda*lambda*lambda+16.0*lambda*lambda) deve estar em algum lugar por aqui. Mas lambda=MathAbs(Value1[i]/Value2[i]) ;não pode ser negativo.
É por isso que a única coisa em que consigo pensar, por precaução, é em executar lambda=0,0;
e/ou MathSqrt(MathAbs(lambda*lambda*lambda*lambda*lambda)) para se livrar deste erro para sempre.
//---- laço principal
duplo alfa, lambda=0,0 ;
//********************************************************************************************
para (i = limite; i >= 0; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
para (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];
}
para (i = limite; i >= 0; i--)
{
if(Value2[i]< Ponto)Value2[i]= Ponto;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. Geralmente não faz sentido. Este erro deve estar aparecendo em seu testador.
P.P.S. Muito provavelmente, a variável lambda dupla; foi inicializada por padrão com muito pouco lixo negativo. Então a dupla lambda=0,0; a expressão deve ajudar.
Slava nos ensina - nunca trabalhe por padrão, e nós não aprendemos!
 
VBAG:
Prival:

Ainda um erro 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: argumento negativo para a função MathSqrt


P.S. Isso é uma loucura. Este erro provavelmente está aparecendo em seu testador?
P.P.S. Muito provavelmente, a variável lambda dupla; foi inicializada com um lixo negativo muito pequeno por padrão. Então a dupla lambda=0,0; a expressão deve ajudar.
Slava nos ensina - nunca trabalhe por padrão, e nós não aprendemos!

Os botniks locais estão sempre tentando inventar alguma bicicleta.

Não se preocupe por nada. Entre os índices personalizados há Bands.mq4 - há um algoritmo de cálculo de RMS
 
<br / translate="no">

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

onde D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, e A é o coeficiente de regressão linear Y=A*X+B

Portanto, a recorrência não é necessária aqui.

Há muitas coisas desnecessárias nestas fórmulas.
E o que você quer dizer com recorrência é desnecessário, como as somas devem ser calculadas? Ou você tem uma idéia de como fazer sem substituir a expectativa pela média?

P.S. A propósito, as somas cruzadas não saem sozinhas. Pelo menos eu não o fiz. Tente trabalhar não com variação, mas com expressão "real".
 
RMS para qualquer função

sq = 0.0;
for (int n=0; n<period; n++)
{
   dc = Close[n] - fx[n];
   sq += dc * dc;
}
sq = MathSqrt(sq/period);
Assim, para a regressão linear é

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:
Consequentemente, para uma regressão linear, seria

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

Isto é por definição. Se LR não for muito curto, você pode calcular RMS com mais precisão, sem nenhum ciclo extra. Há código para cálculo de RMS na fonte MovingLR.mq4, mas ele é comentado e RMS é chamado de rmsY.
 
lna01:

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

onde D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, e A é o coeficiente de regressão linear Y=A*X+B

Portanto, a recorrência não é necessária aqui.

Há muita redundância nestas fórmulas.
E o que você quer dizer com recorrência não é necessária, como as somas devem ser calculadas? Ou você tem uma idéia de como evitar a substituição dos pagamentos esperados por um meio?

P.S. A propósito, as somas cruzadas não saem sozinhas. Pelo menos eu não o fiz. Tente trabalhar não com variação, mas com expressão "real".


Muito ansioso para saber o que poderia ser supérfluo nestas fórmulas ? :-)

MO é, naturalmente, substituído pela média e as somas têm que ser calculadas. Entretanto, a recorrência ou mesmo um ciclo não é necessária. A seguinte fórmula será suficiente

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

Bem, talvez você se refira a esta expressão quando fala em recorrência? Então, é claro, você está certo.

Quanto à "expressão real", de onde você acha que vêm todas essas fórmulas? Bem, se você substituir nesta "expressão real" as fórmulas finitas derivadas do MNC por A e B, então você obtém exatamente a expressão acima para RMS. Posso dar-lhe os cálculos analíticos correspondentes.

 
Yurixx:
lna01:


Posso dar-lhe os cálculos analíticos relevantes.


Com novos coeficientes de dados A e B podem mudar, acho que, embora eu possa estar errado :-). Para a LR parece estar resolvido, mas para a regressão parabólica como ?
 
lna01:
Isto é por definição. Se LR não for muito curto, você pode calcular RMS com mais precisão, sem nenhum ciclo extra. Há um código para cálculo de RMS na fonte MovingLR.mq4, mas ele é comentado e RMS é chamado de rmsY.
Sim, você pode fazer isso uma vez e subtrair o último elemento e adicionar o novo primeiro. Em seguida, funciona sem ciclo. Eu fiz tais coisas com mql2, em MT3. Mesmo agora o faço onde é necessário e não apenas para a regressão linear.