Sunday 26 February 2017

Python Pandas Exponentielle Mobile Moyenne

Python Data Analysis Library 8220 pandas nous permet de nous concentrer davantage sur la recherche et moins sur la programmation. Nous avons trouvé des pandas faciles à apprendre, faciles à utiliser et faciles à entretenir. Le résultat final est qu'il a augmenté notre productivité. 8221 Directeur de l'optimisation et de l'analyse Analytics 8220 pandas est l'outil idéal pour combler le fossé entre les itérations rapides de l'analyse ad hoc et le code de qualité de production. Si vous voulez qu'un outil soit utilisé dans une organisation multidisciplinaire d'ingénieurs, de mathématiciens et d'analystes, ne cherchez pas plus loin8221 8220Nous utilisons des pandas pour traiter des données de séries chronologiques sur nos serveurs de production. La simplicité et l'élégance de son API et son haut niveau de performance pour les ensembles de données volumineux en font un choix parfait pour nous.8221 Bibliothèque Faits saillants Un objet DataFrame rapide et efficace pour la manipulation de données avec indexation intégrée Outils pour lire et écrire des données entre Des structures de données en mémoire et des formats différents: fichiers CSV et texte, Microsoft Excel, bases de données SQL et le format HDF5 rapide. Alignement intelligent des données et gestion intégrée des données manquantes. Gain d'alignement automatique basée sur les étiquettes dans les calculs et de manipuler facilement les données désordonnées dans une forme ordonnée Flexible de remodelage et de pivotement des ensembles de données Intelligent basé sur étiquette tranchage. Indexation de fantaisie. Et sous-ensemble de grands ensembles de données Les colonnes peuvent être insérées et supprimées des structures de données pour la taille mutabilité Agrégation ou transformation des données avec un puissant groupe par moteur permettant split-apply-combine les opérations sur les ensembles de données Haute performance fusion et jointure des ensembles de données Une façon intuitive de travailler avec des données de grande dimension dans une structure de données de dimension inférieure Séries temporelles - fonctionnalité: génération de la période et conversion de fréquence, statistiques des fenêtres mobiles, régressions linéaires des fenêtres mobiles, changement de date et décalage. Même créer des décalages de temps spécifiques au domaine et rejoindre des séries chronologiques sans perdre de données Très optimisé pour les performances. Avec des chemins de code critiques écrits en Cython ou C. Python avec pandas est utilisé dans une grande variété de domaines académiques et commerciaux, y compris les finances, les neurosciences, l'économie, les statistiques, la publicité, Web Analytics, et more. Smoothing avec exponentiellement pondéré Moyennes mobiles A La moyenne mobile prend une série chronologique bruyante et remplace chaque valeur par la valeur moyenne d'un voisinage autour de la valeur donnée. Ce quartier peut être constitué de données purement historiques, ou il peut être centré sur la valeur donnée. En outre, les valeurs dans le voisinage peuvent être pondérées en utilisant différents ensembles de poids. Voici un exemple d'une moyenne mobile à trois points également pondérée, utilisant des données historiques, Ici, représente le signal lissé, et représente la série chronologique bruyante. Contrairement aux moyennes mobiles simples, une moyenne mobile exponentiellement pondérée (EWMA) ajuste une valeur selon une somme exponentiellement pondérée de toutes les valeurs précédentes. C'est l'idée de base, c'est bien parce que vous n'avez pas à vous soucier d'avoir une fenêtre à trois points, par rapport à une fenêtre à cinq points, ou de s'inquiéter de la pertinence de votre système de pondération. Avec l'EWMA, les perturbations précédentes 8220 rappelées, 8221 et 8220 sont lentement oubliées, 8221 par le terme dans la dernière équation, tandis qu'avec une fenêtre ou un quartier avec des limites discrètes, une perturbation est oubliée dès qu'elle sort de la fenêtre. Moyenne de l'EWMA pour accommoder les tendances Après avoir lu sur EWMAs dans un livre d'analyse de données, j'avais suivi avec bonheur l'utilisation de cet outil sur chaque application de lissage unique que je suis tombé sur. Ce n'est que plus tard que j'ai appris que la fonction EWMA ne convient vraiment que pour des données stationnaires, c'est-à-dire des données sans tendances ni saisonnalité. En particulier, la fonction EWMA résiste à des tendances loin de la moyenne actuelle que 8217s déjà 8220seen8221. Donc, si vous avez une fonction chapeau bruyant qui va de 0, à 1, puis revenir à 0, alors la fonction EWMA va retourner des valeurs basses sur le côté montant et des valeurs élevées sur le côté en descente. Une façon de contourner cela est de lisser le signal dans les deux directions, marchant en avant, puis marchant en arrière, puis la moyenne des deux. Ici, nous utiliserons la fonction EWMA fournie par le module pandas. Holt-Winters Deuxième ordre EWMA Et voici un code Python implémentant la méthode de second ordre Holt-Winters sur une autre fonction chapeau bruyante, comme précédemment. Dans l'article précédent sur Research Backtesting Environments Dans Python Avec Pandas, nous avons créé un environnement de backtesting basé sur la recherche orienté objet et l'avons testé sur une stratégie de prévision aléatoire. Dans cet article, nous allons utiliser les mécanismes que nous avons mis en place pour mener des recherches sur une stratégie réelle, à savoir le Crossover moyen mobile sur AAPL. Stratégie de croisement moyenne mobile La technique de crossover de moyenne mobile est une stratégie de momentum simpliste extrêmement connue. Il est souvent considéré comme l'exemple Hello World pour le commerce quantitatif. La stratégie décrite ici est longue seulement. Deux filtres de moyenne mobile simple distincts sont créés, avec des périodes d'analyse différentes, d'une série temporelle particulière. Les signaux d'achat de l'actif se produisent lorsque la moyenne mobile de retour en arrière est plus longue que la moyenne mobile à long terme. Si la moyenne plus longue dépasse par la suite la moyenne plus courte, l'actif est vendu de nouveau. La stratégie fonctionne bien quand une série chronologique entre dans une période de tendance forte, puis inverse lentement la tendance. Pour cet exemple, j'ai choisi Apple, Inc. (AAPL) comme la série chronologique, avec un court retour de 100 jours et un lookback long de 400 jours. C'est l'exemple fourni par la bibliothèque de trading algorithmique zipline. Ainsi, si nous voulons mettre en œuvre notre propre backtester, nous devons nous assurer qu'il correspond aux résultats en zipline, comme un moyen de base de validation. Implémentation Assurez-vous de suivre le tutoriel précédent ici. Qui décrit comment la hiérarchie d'objet initiale pour le backtester est construite, sinon le code ci-dessous ne fonctionnera pas. Pour cette implémentation particulière, j'ai utilisé les bibliothèques suivantes: La mise en œuvre de macross. py nécessite le backtest. py du tutoriel précédent. La première étape consiste à importer les modules et les objets nécessaires: Comme dans le didacticiel précédent, nous allons sous-classer la classe de base abstraite de stratégie pour produire MovingAverageCrossStrategy. Qui contient tous les détails sur la façon de générer les signaux lorsque les moyennes mobiles de AAPL se croisent. L'objet nécessite une fenêtre courte et une fenêtre longue sur laquelle fonctionner. Les valeurs ont été définies à des valeurs par défaut de 100 jours et 400 jours respectivement, qui sont les mêmes paramètres utilisés dans l'exemple principal de la tyrolienne. Les moyennes mobiles sont créées en utilisant la fonction rollingmaing pandas sur les barsFermer le cours de clôture du stock AAPL. Une fois que les moyennes mobiles individuelles ont été construites, la série de signaux est générée en plaçant la colonne égale à 1,0 lorsque la moyenne mobile courte est supérieure à la moyenne mobile longue ou 0,0 autrement. De là, les ordres de position peuvent être générés pour représenter des signaux de négociation. Le MarketOnClosePortfolio est sous-classé de Portfolio. Qui se trouve dans backtest. py. Il est presque identique à la mise en œuvre décrite dans le didacticiel précédent, à l'exception que les métiers sont maintenant effectués sur une base Close-to-Close, plutôt que Open-to-Open. Pour plus de détails sur la définition de l'objet Portfolio, reportez-vous au didacticiel précédent. Ive a laissé le code dedans pour l'intégralité et pour garder ce tutoriel autonome: Maintenant que les classes MovingAverageCrossStrategy et MarketOnClosePortfolio ont été définies, une fonction principale sera appelée pour attacher toutes les fonctionnalités ensemble. En outre, la performance de la stratégie sera examinée au moyen d'un graphique de la courbe de capitaux propres. L'objet DataReader de pandas télécharge les prix OHLCV des stocks d'AAPL pour la période du 1er janvier 1990 au 1er janvier 2002, date à laquelle les signaux DataFrame sont créés pour générer les signaux long seulement. Par la suite, le portefeuille est généré avec une base de capital initiale de 100 000 USD et les rendements sont calculés sur la courbe de capitaux propres. La dernière étape est d'utiliser matplotlib pour tracer un graphique à deux chiffres des deux prix AAPL, recouvert avec les moyennes mobiles et les signaux buysell, ainsi que la courbe d'équité avec les mêmes signaux buysell. Le code de traçage est pris (et modifié) à partir de l'exemple d'implantation de typo. La sortie graphique du code est la suivante. J'ai fait usage de la commande IPython coller pour mettre cela directement dans la console IPython alors que dans Ubuntu, de sorte que la sortie graphique reste en vue. Les upticks roses représentent l'achat du stock, alors que les downticks noirs représentent la vente de retour: Comme on peut le voir la stratégie perd de l'argent au cours de la période, avec cinq métiers de tour-aller. Cela n'est pas surprenant compte tenu du comportement de l'AAPL au cours de la période, qui a connu une légère tendance à la baisse, suivie d'une recrudescence significative à partir de 1998. La période de retour des signaux de la moyenne mobile est assez importante et a eu un impact sur le profit du commerce final , Qui autrement aurait pu rendre la stratégie rentable. Dans les articles suivants, nous allons créer un moyen plus sophistiqué d'analyser la performance, ainsi que de décrire comment optimiser les périodes de retour des signaux de moyenne mobile individuelle.


No comments:

Post a Comment