Backtesting d'une moyenne mobile Crossover en Python avec des pandas Dans l'article précédent sur Research Backtesting Environments En 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 la description de la façon d'optimiser les périodes de retour de la moyenne individuelle des signaux de déplacement. Donc Im écriture d'une classe qui va calculer une moyenne mobile simple sur une liste de prix. Il calcule la moyenne de chaque N nombre de prix sans calculer les premiers N-1 jours. C'est ce que j'ai: Je l'ai testé en faisant un objet de classe sur la coque x Simplemovingaverage (3, 1,2,3,4,5,6,7,8,9,10), puis en faisant la méthode de calcul par x. calculer la sortie que j'ai obtenu était donc de ma liste de nombres son seul calcul jusqu'à 7,8,9 le dernier nombre devrait être 9 parce thats la moyenne de 8,9,10 et aussi il ne devrait y avoir que 3 zéros puisque N Est 3. C'est la sortie Im en quête: demandé fév 18 14 à 5: 32Je joue en Python un peu à nouveau, et j'ai trouvé un bon livre avec des exemples. Un des exemples est de tracer quelques données. J'ai un fichier. txt avec deux colonnes et j'ai les données. J'ai tracé les données très bien, mais dans l'exercice il dit: Modifier votre programme plus loin pour calculer et tracer la moyenne courante des données, définie par: où r5 dans ce cas (et le yk est la deuxième colonne dans le fichier de données) . Demandez au programme de tracer à la fois les données d'origine et la moyenne courante sur le même graphique. Jusqu'à présent, j'ai ceci: Comment puis-je calculer la somme Dans Mathematica sa simple depuis sa manipulation symbolique (Sumi, par exemple), mais comment calculer la somme en python qui prend tous les dix points dans les données et les moyennes, et le fait Jusqu'à la fin des points, j'ai regardé le livre, mais n'a trouvé rien qui pourrait expliquer cela: heltonbikers code a fait l'affaire: D Merci beaucoup :) Il ya un problème avec la réponse acceptée. Je pense que nous devons utiliser valide au lieu de même ici - retournez numpy. convolve (interval, window, same). A titre d'exemple, testez l'AM de cet ensemble de données 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - le résultat Devrait être de 4,2,5,4,6,0,5,0,5,0,5,2,5,4,4,4,5,4,5,6,5,6,4,6,7,0,6,8. Mais en ayant la même nous donne une sortie incorrecte de 2.6.3.0,4.2,5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6, 4.6,7.0,6.8,6.2,4.8 Code rouillé pour essayer ceci -: Essayez ceci avec l'ampli valide même et voyez si la mathématique a un sens. J'ai essayé ceci dehors, mais je regarde dedans, il a été un temps depuis que j'ai codé en Python. Ndash dingod Oct 29 14 at 7:07 dingod Pourquoi ne pas essayer rapidement avec le code rouillé (et l'échantillon de données-set (comme une simple liste), j'ai posté. Pour certaines personnes paresseux (comme j'avais été au début) - il masque le fait que la moyenne mobile est incorrecte. Probablement, vous devriez envisager d'éditer votre réponse originale. J'ai essayé juste hier et la double vérification m'a sauvé le visage de regarder mal à signaler au niveau Cxo. Tout ce que vous devez faire, c'est d'essayer Votre même moyenne mobile une fois avec quotvalidquot et autre fois avec quotsamequot - et une fois que vous êtes convaincu me donner un peu d'amour (aka-up-vote) ndash ekta Oct 29 14 at 7:16
No comments:
Post a Comment