Calcul des différences, exemples. - page 5

 
Aleksey Panfilov:

Sur le sujet de Fourier, c'est un sujet riche. S'il y a un intérêt, nous y reviendrons périodiquement.

Il est fort probable que les principales questions se posent au niveau de l'énoncé du problème (en raison d'une méthode différente). Maintenant, d'après ce que je comprends, l'indicateur sélectionne les fréquences ayant le plus d'amplitude dans le spectre de Fourier.

J'ai eu l'idée de visser l'indicateur deFourier à une ligne polynomiale déjà moyennée. Je soupçonne que ses relevés extrapolés changeraient plus lentement.


Vous pensez généralement dans la bonne direction.

Les extrapolations par les méthodes polynomiales et de Fourier sont de nature complètement différente. L'extrapolation de Fourier ne peut être appliquée qu'à un marché plat en raison de sa nature périodique (cette ligne est une somme de sinusoïdes de fréquence, de phase et d'amplitude différentes), et elle a toujours tendance à revenir en arrière.

Alors que l'extrapolation polynomiale, au contraire, est bonne pour les tendances, car elle essaie sans cesse de "voler" vers le bas ou vers le haut en raison de sa nature progressive.
Il est donc très judicieux de combiner les deux méthodes. Bien sûr, vous ne vous en sortirez pas avec une simple sommation. Mais j'ai une idée précise de la meilleure façon de les combiner, et cela doit être fait en utilisant la reconnaissance des formes. Et j'ai déjà un sérieux travail à faire sur ce sujet. J'ai même publié mon premier algorithme de reconnaissance il y a assez longtemps en open source. Cet algorithme trouve des canaux linéaires (polynômes de degré 1) dans toutes les TFs. Bien qu'il soit le plus primitif et le plus lent de mes algorithmes, je n'en ai pas trouvé de meilleur même sur le Marché (je me vante à ).

L'extrapolation de Fourier est beaucoup plus lente que l'extrapolation polynomiale. Il serait donc intéressant d'essayer de l'accélérer, mais vous pouvez toujours vous débrouiller avec la vitesse actuelle.

 
Evgeny Belyaev:

C'est ce que tout le monde a fait... écrit...


Pour commencer une série de comparaisons, revenons à ce qui est bien connu.

 
      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 première lignea1_Buffer est tracée comme une EMA classique avec une période de 145 (72*2+1), basée sur les points d'ouverture et décalée de 72 pas vers la gauche. La large ligne grise sur la photo.

La deuxième lignea5_Buffer montre une extrapolation utilisant une ligne droite sur les deux derniers points de la première ligne. La ligne grise est plus fine sur l'image.

La troisième lignea2_Buffer est tracée directement à partir de l'équation de différence du premier degré. Laligne bleue de la figure.

1*Y_(-1)-2*Y_0+1*Y_(+1)=0 Équation de différence du premier degré pour des points équidistants.

2*Y_(-1)-3*Y_0+1*Y_(+2)=0 Équation de différence du premier degré pour l'épaule en 2 intervalles.

72*Y_(-1)-73*Y_0+1*Y_(+72)=0 Equation de différence du premier ordre pour l'épaule en 72 intervalles.

Il s'agit essentiellement d'une équation de levier d'Archimède du premier degré.

La quatrième lignea6_Buffer montre l'extrapolation en utilisant une ligne droite à partir des deux derniers points de la troisième ligne. La ligne rouge dans l'image qui est basée sur le point d'ouverture.

Nous pouvons constater l'identité complète des deux constructions. Je n'ai pas donné d'exemple pour montrer la transformation du code et la transformation de la formule EMA classique en forme de différence.

Je tiens à noter que cela signifie que, dans la terminologie établie, nous pouvons appeler la construction utilisant des polynômes, EMA d'un certain degré. Puisque la question de la dénomination des lignes construites reste ouverte. )

Si cela ne vous dérange pas, bien sûr :))

 
Nikolai Semko:

J'ai même publié mon premier algorithme de reconnaissance il y a assez longtemps en open source. Cet algorithme trouve des canaux linéaires (polynômes de degré 1) dans toutes les TFs. Malgré le fait que ce soit le plus primitif et le plus lent de mes algorithmes, je n'ai pas trouvé mieux même sur le Marché(je me vante à).

A mon avis, tout à fait justifié. :))
 

Je précise que le point peut être extrapolé soit en calculant au préalable les coefficients(a2_Buffer ligne bleue), soit en prenant la valeur nécessaire sur la ligne en cours de redécoupage(a6_Buffer ligne jaune). Même si, bien sûr, la deuxième variante est consommatrice de ressources.

      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];  


 

Calculer maintenant la moyenne par un polynôme du second degré (EMA du second degré) et extrapoler à différents effets de levier en utilisant une ligne droite.

      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 première figure représente le schéma de traçage, dans la deuxième figure, toutes les lignes qui ne sont pas redessinées sont tracées jusqu'à la dernière valeur.

Les indicateurs du sous-sol ne diffèrent que par le décalage de la ligne de consigne.



 

Calcul de la moyenne par un polynôme du second degré (EMA du second degré) et extrapolation à différents effets de levier à l'aide d'une parabole carrée (polynôme du second degré).

      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 première figure est un schéma de tracé, dans la deuxième figure, toutes les lignesqui ne sont pas redessinées sont tracées jusqu'à la dernière valeur.

Les indicateurs du sous-sol ne diffèrent que par le décalage de la ligne de consigne.


 

J'ai parcouru le fil de discussion plusieurs fois et je ne comprends pas ce dont nous parlons.

Une citation est un processus aléatoire qui peut être approché par toutes sortes de courbes analytiques, en particulier celles qui figurent ici sur le fil.

Mais il y a un point très fondamental.

Les coefficients de ces courbes analytiques sont des constantes, ce qui est une idée très audacieuse.

Puisque nous approchons un processus aléatoire, les coefficients sont également des quantités RARES et ils devraient être EVALUÉS plutôt que calculés, avec tout ce que cela implique. Par exemple, on peut facilement obtenir la valeur d'un coefficient, voir sa valeur et, en examinant son évaluation, constater que l'erreur dans la détermination de la valeur du coefficient est un multiple de cette valeur elle-même.

Et les ennuis ne s'arrêtent pas là. Une erreur est une erreur si elle est distribuée normalement, et si elle n'est PAS stationnaire alors il n'y a pas de coefficient du tout, même si nous pouvons le voir.

C'est pourquoi tous les indicateurs s'avèrent non fonctionnels. Ils peuvent cependant être d'une beauté indescriptible.


PS.

Il y a eu un message plus haut disant que le futur ne découle pas du passé. C'est donc une divulgation de cette triste réalité qui est présentée ci-dessus.

 
SanSanych Fomenko:

J'ai parcouru le fil de discussion plusieurs fois et je ne comprends pas ce dont nous parlons.

Une citation est un processus aléatoire qui peut être approché par toutes sortes de courbes analytiques, en particulier celles qui figurent ici sur le fil.

Mais il y a un point très fondamental.

Les coefficients de ces courbes analytiques sont des constantes, ce qui est une idée très audacieuse.

Puisque nous approchons un processus aléatoire, les coefficients sont également des quantités RARES et ils devraient être EVALUÉS plutôt que calculés, avec tout ce que cela implique. Par exemple, on peut facilement obtenir la valeur d'un coefficient, voir sa valeur et, en examinant son évaluation, constater que l'erreur dans la détermination de la valeur du coefficient est un multiple de cette valeur elle-même.

Et les ennuis ne s'arrêtent pas là. Une erreur est une erreur si elle est distribuée normalement, et si elle n'est PAS stationnaire, il n'y a pas de coefficient du tout, bien que nous puissions le voir.

C'est pourquoi tous les indicateurs s'avèrent non fonctionnels. Ils peuvent cependant être d'une beauté indescriptible.


PS.

Il y a eu un message plus haut disant que le futur ne découle pas du passé. C'est donc une divulgation de cette triste réalité qui est présentée ci-dessus.

Merci pour votre message.

On s'en souvient aussi :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Savez-vous comment préparer les chaînes ?

SanSanych Fomenko, 2017.12.31 11:00

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Savez-vous comment préparer les chaînes ?

Aleksey Ivanov, 2017.12.31 10:48

Oui, j'ai oublié de préciser que j'ai construit ces distributions de probabilités mobiles non retardées(les moyennes mobiles construites par 2n+1 points sont retardées de n points, il en va de même, bien sûr, pour les distributions), pour lesquelles il suffit d'utiliser le modèle

GARCH a prévu un certain nombre de points et a créé un modèle de distribution non dégénéré à la fin de l'histoire (ce qui est important), en tenant compte des statistiques supplémentaires fournies par eux. Ma question à SanSanych(SanSanych Fomenko) : "Cette approche sera plus correcte pour les sauts ou causera-t-elle aussi des problèmes ?


Je ne peux pas évaluer votre méthode et donner une réponse.

Vous essayez de réfléchir à une idée, dont il existe un nombre incalculable sur le marché, mais comme un nombre écrasant d'auteurs d'idées, vous ne vous posez pas la question suivante : sur quelle base tout ce que vous voyez dans les données historiques se répétera-t-il à l'avenir ? Ou plus précisément : votre idée a-t-elle même une capacité prédictive ?

Les auteurs du GARCH ne sont pas arrivés à ce modèle immédiatement, et accessoirement, dans une lutte acharnée avec les idéologues du marché efficient, qu'ils comprenaient comme stationnaire.

Les statistiques nous apprennent que les processus stationnaires peuvent être prédits, mais que les processus non stationnaires sont très mal prédits. C'est précisément le problème. La non-stationnarité a rendu des montagnes de mathématiques inutiles extrêmement efficaces dans d'autres domaines.

Idéologie GARCH :

  • La prémisse sous-jacente n'est PAS la stationnarité
  • nous formulons précisément le sens du mot non-stationnarité
  • commencer à passer du NON à la stationnarité à la stationnarité petit à petit.
  • Plus la stationnarité est proche, plus la capacité de prédire l'avenir de l'algorithme est grande.


Votre idée va-t-elle dans ce sens ?


Je pense qu'il sera certainement utile.
 

Moyennage par polynôme du quatrième degré avec un levier de 72 (EMA du quatrième degré) et extrapolation à différents leviers à l'aide d'une ligne droite.

      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 première figure représente le schéma de traçage, dans la deuxième figure, toutes les lignesqui ne sont pas redessinées sont tracées jusqu'à la dernière valeur.

Les indicateurs du sous-sol ne diffèrent que par le décalage de la ligne de consigne.


 

Moyennage par un polynôme du quatrième degré avec un levier de 72 (EMA du quatrième degré) etextrapolation à différents leviers à l'aide d'une parabole carrée (polynôme du deuxième degré).

      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 première figure est un schéma de tracé, dans la deuxième figure, toutes les lignesqui ne sont pas redessinées sont tracées jusqu'à la dernière valeur.

Les indicateurs du sous-sol ne diffèrent que par le décalage de la ligne de consigne.