Calcolo delle differenze, esempi. - pagina 5

 
Aleksey Panfilov:

A proposito di Fourier, è un argomento ricco. Se c'è interesse, ne parleremo periodicamente.

Molto probabilmente, i problemi principali sorgeranno con la dichiarazione del problema (a causa di un metodo diverso). Ora, per quanto ho capito, l'indicatore seleziona le frequenze di maggiore ampiezza dallo spettro di Fourier.

Ho avuto l'idea di avvitare l'indicatore diFourier su una linea polinomiale già mediata. Ho il sospetto che le sue letture estrapolate cambierebbero più lentamente.


In generale stai pensando nella giusta direzione.

Le estrapolazioni con metodi polinomiali e di Fourier sono di natura completamente diversa. L'estrapolazione di Fourier può essere applicata solo a un mercato piatto a causa della sua natura periodica (questa linea è una somma di sinusoidi di diversa frequenza, fase e ampiezza), e tende sempre a tornare indietro.

Mentre l'estrapolazione polinomiale, al contrario, è buona per il trending perché continua a cercare di "volare" verso il basso o verso l'alto a causa della sua natura graduale.
È quindi molto sensato combinare i due metodi. Naturalmente, non ve la caverete con una semplice sommatoria. Ma ho un'idea chiara di come combinarli al meglio, e deve essere fatto usando il riconoscimento dei modelli. E ho già del lavoro serio da fare su questo argomento. Ho anche pubblicato il mio primo algoritmo di riconoscimento molto tempo fa in open source. Questo algoritmo trova canali lineari (polinomio di grado 1) in tutti i TF. Anche se è il più primitivo e lento dei miei algoritmi, non ne ho trovato uno migliore nemmeno sul mercato (mi vanto di ).

L'estrapolazione di Fourier è molto più lenta di quella polinomiale, quindi sarebbe bello provare a velocizzarla; tuttavia si può ancora fare abbastanza bene con la velocità attuale.

 
Evgeny Belyaev:

Questo è quello che hanno fatto tutti... scritto...


Per iniziare una serie di confronti, torniamo a ciò che è ben noto.

 
      a1_Buffer[i] =iMA(NULL,0,145,0,MODE_EMA,PRICE_OPEN,i);// a1_Buffer[i]=  ((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800   *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  ;  }}



      a2_Buffer[i]= ( (open[i] - Znach)  + 72   *a2_Buffer[i+1 ] )/73;
      
      a6_Buffer[i+92]=a2_Buffer[i];   if(i<=1) { for(z=92-1;z>=0;z--){         a6_Buffer[i+0+z]=  2*a6_Buffer[i+1+z] -  1*a6_Buffer[i+2+z]  ;  }}

La prima lineaa1_Buffer è tracciata come una EMA classica con un periodo di 145 (72*2+1), basata sui punti di apertura e spostata di 72 passi a sinistra. L'ampia linea grigia nell'immagine.

La seconda lineaa5_Buffer mostra l'estrapolazione utilizzando una linea retta sugli ultimi due punti della prima linea. La linea grigia è più sottile nell'immagine.

La terza lineaa2_Buffer è tracciata direttamente dall'equazione della differenza di primo grado. Lalinea blu nella figura.

1*Y_(-1)-2*Y_0+1*Y_(+1)=0 Equazione della differenza di primo grado per punti equidistanti.

2*Y_(-1)-3*Y_0+1*Y_(+2)=0 Equazione della differenza di primo grado per la spalla in 2 intervalli.

72*Y_(-1)-73*Y_0+1*Y_(+72)=0 Equazione della differenza del primo ordine per la spalla in 72 intervalli.

È essenzialmente un'equazione della leva di Archimede di primo grado.

La quarta lineaa6_Buffer mostra l'estrapolazione utilizzando una linea retta dagli ultimi due punti della terza linea. La linea rossa nell'immagine che si basa sul punto di apertura.

Possiamo vedere la completa identità delle due costruzioni. Ho dato un esempio per non mostrare la trasformazione del codice e la trasformazione della formula EMA classica nella forma della differenza.

Voglio notare che significa che, all'interno della terminologia stabilita, possiamo chiamare la costruzione utilizzando polinomi, EMA di un certo grado. Poiché la questione della denominazione delle linee costruite rimane aperta. )

Se non ti dispiace, naturalmente:))

 
Nikolai Semko:

Ho anche pubblicato il mio primo algoritmo di riconoscimento molto tempo fa in open source. Questo algoritmo trova canali lineari (polinomio di grado 1) in tutti i TF. Nonostante sia il più primitivo e lento dei miei algoritmi, non ho trovato di meglio nemmeno sul mercato(mi vanto di).

A mio parere, abbastanza giustificato. :))
 

Vorrei far notare che il punto può essere estrapolato sia calcolando i coefficienti in anticipo(a2_Buffer linea blu) sia prendendo il valore richiesto dalla linea che viene ridisegnata(a6_Buffer linea gialla). Anche se, naturalmente, la seconda variante è consumatrice di risorse.

      a1_Buffer[i] =iMA(NULL,0,145,0,MODE_EMA,PRICE_OPEN,i);// a1_Buffer[i]=  ((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800   *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  ;  }}



      a2_Buffer[i]= 37* a1_Buffer[i] -36 *a1_Buffer[i+1];
      
      a6_Buffer[i+56]=a5_Buffer[i+56];  


 

Ora facendo la media con un polinomio di secondo grado (EMA di secondo grado) ed estrapolando a diverse leve usando una linea retta.

      a1_Buffer[i]=  ((open[i] - Znach)    +5328*a1_Buffer[i+1 ]-   2628 *a1_Buffer[i+2 ])/2701;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  ;  }}



      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];
    

La prima figura è lo schema di tracciatura, nella seconda figura tutte le linee che non sono ridisegnate sono disegnate fino all'ultimo valore.

Gli indicatori nel seminterrato differiscono solo per l'offset della linea impostata.



 

Mediazione tramite polinomio di secondo grado (EMA di secondo grado) ed estrapolazione a diverse leve utilizzando una parabola quadrata (polinomio di secondo grado).

      a1_Buffer[i]=  ((open[i] - Znach)    +5328*a1_Buffer[i+1 ]-   2628 *a1_Buffer[i+2 ])/2701;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  3*a5_Buffer[i+1+z]  -  3*a5_Buffer[i+2+z]  +  1*a5_Buffer[i+3+z]  ;  }}


      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];
  

La prima figura è uno schema di tracciatura, nella seconda figura tutte le lineeche non sono ridisegnate sono disegnate fino all'ultimo valore.

Gli indicatori nel seminterrato differiscono solo per l'offset della linea impostata.


 

Ho guardato il thread un paio di volte e non capisco di cosa stiamo parlando.

Una citazione è un processo casuale che può essere approssimato da ogni sorta di curve analitiche, in particolare quelle qui sul thread.

Ma c'è un punto fondamentale.

I coefficienti in queste curve analitiche sono costanti, il che è un'idea molto audace.

Dato che approssimiamo un processo casuale, i coefficienti sono anche quantità RARE e dovrebbero essere VALUTATI piuttosto che calcolati, con tutto ciò che comporta. Per esempio, si può facilmente ottenere il valore di un coefficiente, vedere il suo valore e, guardando la sua valutazione, vedere che l'errore nel determinare il valore del coefficiente è un multiplo di quel valore stesso.

E i problemi non finiscono qui. Un errore è un errore se è distribuito normalmente, e se NON è stazionario allora non c'è nessun coefficiente, anche se possiamo vederlo.

Questo è il motivo per cui tutti gli indicatori risultano essere non funzionali. Però possono essere indescrivibilmente belli.


PS.

C'era un post sopra che diceva che il futuro non scaturisce dal passato. Quindi sopra c'è una rivelazione di questo triste fatto.

 
SanSanych Fomenko:

Ho guardato il thread diverse volte e non capisco di cosa stiamo parlando.

Una citazione è un processo casuale che può essere approssimato da ogni sorta di curve analitiche, in particolare quelle qui sul thread.

Ma c'è un punto fondamentale.

I coefficienti in queste curve analitiche sono costanti, il che è un'idea molto audace.

Dato che approssimiamo un processo casuale, i coefficienti sono anche quantità RARE e dovrebbero essere VALUTATI piuttosto che calcolati, con tutto ciò che comporta. Per esempio, si può facilmente ottenere il valore di un coefficiente, vedere il suo valore e, guardando la sua valutazione, vedere che l'errore nel determinare il valore del coefficiente è un multiplo di quel valore stesso.

E i problemi non finiscono qui. Un errore è un errore se è distribuito normalmente, e se NON è stazionario allora non c'è nessun coefficiente, anche se possiamo vederlo.

Questo è il motivo per cui tutti gli indicatori si rivelano non funzionali. Però possono essere indescrivibilmente belli.


PS.

C'era un post sopra che diceva che il futuro non scaturisce dal passato. Quindi sopra c'è una rivelazione di questo triste fatto.

Grazie per il tuo post.

Ricordato anche:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Sai come preparare i canali?

SanSanych Fomenko, 2017.12.31 11:00

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Sai come preparare i canali?

Aleksey Ivanov, 2017.12.31 10:48

Sì, ho dimenticato di specificare che ho costruito queste distribuzioni di probabilità mobili non ritardate(le medie mobili costruite da 2n+1 punti sono in ritardo di n punti, lo stesso, naturalmente, è vero per le distribuzioni), per le quali solo dal modello

GARCH ha previsto un certo numero di punti e ha creato un modello di distribuzione non degenerata nella parte finale della storia (che è importante), considerando le statistiche aggiuntive fornite da loro. La mia domanda a SanSanych(SanSanych Fomenko): "Questo approccio sarà più corretto per i salti o causerà anche problemi?


Non posso valutare il suo metodo e dare una risposta.

Lei sta cercando di prendere in considerazione un'idea, di cui ce ne sono innumerevoli sul mercato, ma come la stragrande maggioranza degli autori di idee non si pone la domanda: su quali basi tutto quello che vede nei dati storici si ripeterà in futuro? O più precisamente: la sua idea ha una capacità predittiva?

Gli autori di GARCH non sono arrivati a questo modello immediatamente, e per inciso, in un'aspra lotta con gli ideologi del mercato efficiente, che intendevano come stazionario.

Sappiamo dalla statistica che i processi stazionari possono essere previsti, ma quelli non stazionari sono previsti molto male. È proprio questo il problema. La non stazionarietà ha reso inutili montagne di matematica estremamente efficaci in altri ambiti.

Ideologia GARCH:

  • La premessa di base NON è la stazionarietà
  • formuliamo con precisione il significato della parola non stazionarietà
  • iniziano a passare dal NON alla stazionarietà alla stazionarietà un po' alla volta.
  • Più vicina è la stazionarietà, maggiore è la capacità di prevedere il futuro che ha l'algoritmo


La tua idea va in questa direzione?


Penso che tornerà sicuramente utile.
 

Mediazione tramite polinomio di quarto grado con leva 72 (EMA di quarto grado) ed estrapolazione a diverse leve usando una linea retta.

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  +  0*a5_Buffer[i+3+z]  ;  }}


      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];
 

La prima figura è lo schema di tracciatura, nella seconda figura tutte le lineeche non sono ridisegnate sono disegnate fino all'ultimo valore.

Gli indicatori nel seminterrato differiscono solo per l'offset della linea impostata.


 

Mediazione con un polinomio di quarto grado con leva 72 (EMA di quarto grado) edestrapolazione a diverse leve usandouna parabola quadrata (polinomio di secondo grado).

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  3*a5_Buffer[i+1+z]  -  3*a5_Buffer[i+2+z]  +  1*a5_Buffer[i+3+z]  ;  }}


      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];

La prima figura è uno schema di tracciatura, nella seconda figura tutte le lineeche non sono ridisegnate sono disegnate fino all'ultimo valore.

Gli indicatori nel seminterrato differiscono solo per l'offset della linea impostata.


Motivazione: