Dialogo con l'autore. Alexander Smirnov. - pagina 37

 
Questa formula RMS^2 = M[X^2] - (M[X])^2, è in realtà per la varianza, cioè per una caratteristica perfetta. Molto probabilmente, nella sua derivazione le somme "crossover" sono state esplicitamente o implicitamente azzerate. Per i grandi campioni questo è abbastanza corretto. Ma per piccoli campioni l'RMS reale può essere diverso. Ma non ho ancora avuto modo di controllare.
 
Mathemat:

Yura, voglio contare l'RMS più velocemente della funzione standard. E se funzionasse? Per una singola chiamata dovrebbe essere più veloce di qualsiasi codice scritto nel linguaggio, ma per la massa (calcolo dell'intero grafico) è possibile risparmiare sui costi.


Se parliamo di sco per la regressione lineare, si calcola analiticamente in un passo con la formula

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

dove D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, e A è il coefficiente di regressione lineare Y=A*X+B

Quindi la ricorrenza non è necessaria in questo caso.

PS E le somme incrociate sono azzerate in modo esplicito e puramente analitico. La dimensione del campione non c'entra niente.

 
Prival:

Ancora un errore 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: argomento negativo per la funzione MathSqrt

A giudicare dal contenuto dell'errore, il MathSqrt(lambda*lambda*lambda+16.0*lambda*lambda) deve essere da qualche parte qui intorno. Ma lambda=MathAbs(Valore1[i]/Valore2[i]) ;non può essere negativo.
Ecco perché l'unica cosa che mi viene in mente, per sicurezza, è di eseguire lambda=0,0;
e/o MathSqrt(MathAbs(lambda*lambda*lambda*lambda)) per liberarsi di questo errore per sempre.
//---- ciclo principale
doppio alfa, lambda=0.0 ;
//********************************************************************************************
per (i = limite; i >= 0; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
per (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];
}
per (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. In generale non ha senso. Questo errore deve spuntare nel vostro tester.
P.P.S. Molto probabilmente, la variabile double lambda; è stata inizializzata di default con una spazzatura negativa molto piccola. Allora la doppia espressione lambda=0.0; dovrebbe aiutare.
Slava ci insegna - mai lavorare per difetto, e non impariamo!
 
VBAG:
Privato:

Ancora un errore 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: argomento negativo per la funzione MathSqrt


P.S. È pazzesco. È probabile che questo errore appaia nel vostro tester?
P.P.S. Molto probabilmente, la variabile double lambda; è stata inizializzata di default con una spazzatura negativa molto piccola. Allora la doppia espressione lambda=0.0; dovrebbe aiutare.
Slava ci insegna - mai lavorare per difetto, e non impariamo!

I botniks locali cercano sempre di inventare qualche bicicletta.

Non preoccupatevi per niente. Tra gli indici personalizzati c'è Bands.mq4 - c'è un algoritmo di calcolo RMS
 
<br / translate="no">

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

dove D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, e A è il coefficiente di regressione lineare Y=A*X+B

Quindi la ricorrenza non è necessaria in questo caso.

C'è un sacco di roba inutile in queste formule.
E cosa vuol dire che la ricorrenza non è necessaria, come si calcolano le somme? O avete un'idea di come fare senza sostituire l'aspettativa con la media?

P.S. A proposito, le somme incrociate non partono da sole. Almeno io non l'ho fatto. Cerca di lavorare non con la varianza ma con l'espressione "reale".
 
RMS per qualsiasi funzione

sq = 0.0;
for (int n=0; n<period; n++)
{
   dc = Close[n] - fx[n];
   sq += dc * dc;
}
sq = MathSqrt(sq/period);
Quindi per la regressione lineare è

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:
Di conseguenza, per una regressione lineare sarebbe

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

Questo è per definizione. Se LR non è troppo corto, si può calcolare RMS più accuratamente, senza alcun ciclo extra. C'è del codice per il calcolo dell'RMS nel sorgente MovingLR.mq4, ma è commentato e l'RMS è chiamato rmsY.
 
lna01:

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

dove D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, e A è il coefficiente di regressione lineare Y=A*X+B

Quindi la ricorrenza non è necessaria in questo caso.

C'è molta ridondanza in queste formule.
E cosa vuol dire che la ricorrenza non è necessaria, come si calcolano le somme? O hai un'idea di come evitare la sostituzione dei payoff attesi con una media?

P.S. A proposito, le somme incrociate non partono da sole. Almeno io non l'ho fatto. Cercate di lavorare non con la varianza ma con l'espressione "reale".


Molto desideroso di sapere cosa potrebbe essere extra in queste formule? :-)

MO, ovviamente, è sostituito dalla media e le somme devono essere calcolate. Tuttavia, la recidiva o anche un ciclo non sono necessari. La seguente formula è sufficiente

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

Beh, forse intende questa espressione quando parla di ricorrenza? Allora, naturalmente, hai ragione.

Per quanto riguarda "l'espressione reale", da dove pensi che vengano tutte queste formule? Bene, se si sostituisce in questa "espressione reale" le formule finite derivate dal MNC per A e B, si ottiene solo l'espressione di cui sopra per RMS. Posso darvi i calcoli analitici corrispondenti.

 
Yurixx:
lna01:


Posso darvi i relativi calcoli analitici.


Se non è troppo difficile elaborare da qui. Con i nuovi dati i coefficienti A e B possono cambiare, penso, anche se potrei sbagliarmi :-). Per LR sembra essere risolto, ma per la regressione parabolica come?
 
lna01:
Questo è per definizione. Se LR non è troppo corto, si può calcolare RMS più accuratamente, senza alcun ciclo extra. C'è un codice per il calcolo dell'RMS nel sorgente MovingLR.mq4, ma è commentato e l'RMS è chiamato rmsY.
Sì, puoi farlo una volta e sottrarre l'ultimo elemento e aggiungere il nuovo primo. Allora funziona senza ciclo. Ho fatto queste cose con mql2, in MT3. Anche ora lo faccio dove necessario e non solo per la regressione lineare.