Mathématiques financières et modélisation II (FINC 621) est une classe de troisième cycle qui est actuellement offerte à l'Université Loyola à Chicago pendant le trimestre d'hiver. FINC 621 explore des sujets en finance quantitative, en mathématiques et en programmation. La classe est de nature pratique et comprend à la fois une conférence et une composante de laboratoire. Les laboratoires utilisent le langage de programmation R et les étudiants sont tenus de soumettre leurs tâches individuelles à la fin de chaque classe. L'objectif final de FINC 621 est de fournir aux étudiants des outils pratiques qu'ils peuvent utiliser pour créer, modéliser et analyser des stratégies commerciales simples. Quelques liens utiles de R A propos de l'instructeur Harry G. est un commerçant quantitatif principal pour une entreprise commerciale de HFT à Chicago. Il détient un master8217s en génie électrique et un master8217s en mathématiques financières de l'Université de Chicago. Dans son temps libre, Harry enseigne un cours de troisième cycle en finance quantitative à l'Université Loyola à Chicago. Il est également l'auteur de Quantitative Trading avec R. Slideshare utilise des cookies pour améliorer la fonctionnalité et les performances, et pour vous fournir de la publicité pertinente. Si vous continuez à naviguer sur le site, vous acceptez l'utilisation de cookies sur ce site. Consultez notre Accord utilisateur et notre Politique de confidentialité. Slideshare utilise des cookies pour améliorer la fonctionnalité et les performances, et pour vous fournir de la publicité pertinente. Si vous continuez à naviguer sur le site, vous acceptez l'utilisation de cookies sur ce site. Consultez notre politique de confidentialité et notre contrat d'utilisation pour plus de détails. Explorez tous vos sujets préférés dans l'application SlideShare Téléchargez l'application SlideShare pour Enregistrer pour plus tard même en mode hors connexion Continuez vers le site mobile Upload Connexion Inscrivez-vous Appuyez deux fois pour faire un zoom arrière Comment concevoir des stratégies de trading quantitatives en utilisant R Partagez SlideShare LinkedIn Corporation copy 2017November 30, 2016 , 12:34 pm Il ya quelques mois un lecteur me signaler cette nouvelle façon de relier R et Excel. Je ne sais pour combien de temps cela a été autour, mais je n'ai jamais rencontré et je n'ai jamais vu aucun billet de blog ou un article à ce sujet. Alors j'ai décidé d'écrire un post car l'outil en vaut vraiment la peine et avant que quiconque demande, I8217m pas lié à la société en aucune façon. BERT signifie Basic Excel R Toolkit. It8217s gratuitement (sous licence GPL v2) et il a été développé par Structured Data LLC. Au moment de la rédaction, la version actuelle du BERT est 1.07. Plus d'informations peuvent être trouvées ici. D'un point de vue plus technique, BERT est conçu pour prendre en charge l'exécution des fonctions R à partir des cellules de tableur Excel. En termes Excel, it8217s pour l'écriture de fonctions définies par l'utilisateur (UDF) dans R. Dans ce post I8217m ne va pas vous montrer comment R et Excel interagissent via BERT. Il ya de très bons didacticiels ici. Ici et ici. Au lieu de cela, je veux vous montrer comment j'ai utilisé BERT pour construire une 8220control tower8221 pour mon trading. Mes signaux commerciaux sont générés en utilisant une longue liste de fichiers R, mais j'ai besoin de la souplesse d'Excel pour afficher les résultats rapidement et efficacement. Comme indiqué ci-dessus BERT peut le faire pour moi, mais je veux aussi adapter l'application à mes besoins. En combinant la puissance de XML, de VBA, de R et de BERT je peux créer une application bonne pourtant puissante sous la forme d'un dossier d'Excel avec le code minimum de VBA. En fin de compte, j'ai un seul fichier Excel rassemblant toutes les tâches nécessaires pour gérer mon portefeuille: mise à jour de la base de données, génération de signaux, envoi de commandes etc.8230 Mon approche pourrait être décomposée en 3 étapes ci-dessous: Utiliser XML pour construire des menus et boutons définis par l'utilisateur dans Excel fichier. Les menus et boutons ci-dessus sont essentiellement des appels aux fonctions VBA. Ces fonctions VBA sont wrapup autour de R fonctions définies en utilisant BERT. Avec cette approche je peux garder une distinction claire entre le noyau de mon code conservé en R, SQL et Python et tout ce qui est utilisé pour afficher et formater les résultats conservés dans Excel, VBA amp XML. Dans les sections suivantes, je présente la condition préalable à l'élaboration d'une telle approche et d'un guide étape par étape qui explique comment BERT pourrait être utilisé pour simplement passer des données de R à Excel avec un code VBA minimal. 1 8211 Téléchargez et installez BERT à partir de ce lien. Une fois l'installation terminée, vous devriez avoir un nouveau menu Add-Ins dans Excel avec les boutons comme indiqué ci-dessous. C'est ainsi que le BERT s'est matérialisé dans Excel. 2 8211 Téléchargez et installez l'éditeur d'interface utilisateur personnalisé. L'Editeur d'interface utilisateur personnalisé permet de créer des menus et des boutons définis par l'utilisateur dans le ruban Excel. Une procédure étape par étape est disponible ici. Guide étape par étape 1 8211 R Code: La fonction R ci-dessous est un code très simple à titre indicatif. Il calcule et retourne les résidus à partir d'une régression linéaire. C'est ce que nous voulons récupérer dans Excel. Enregistrez ceci dans un fichier nommé myRCode. R (tout autre nom est très bien) dans un répertoire de votre choix. 2 8211 fonctions. R dans BERT. Dans Excel, sélectionnez Add-Ins - gt Home Directory et ouvrez le fichier appelé functions. R. Dans ce fichier collez le code suivant. Assurez-vous d'insérer le chemin correct. Il s'agit simplement de trouver dans BERT le fichier R que vous avez créé ci-dessus. Ensuite, enregistrez et fermez le fichier functions. R. Si vous souhaitez apporter une modification au fichier R créé à l'étape 1, vous devrez le recharger à l'aide du bouton BERT 8220Relaborer le fichier de démarrage8221 dans le menu Compléments dans Excel 3 8211 Dans Excel: Créez et enregistrez un fichier appelé monfichier. xslm (Tout autre nom est très bien). Il s'agit d'un fichier macro-activé que vous enregistrez dans le répertoire de votre choix. Une fois le fichier sauvegardé, fermez-le. 4 8211 Ouvrez le fichier créé ci-dessus dans l'éditeur d'interface personnalisée: Une fois le fichier ouvert, collez le code ci-dessous. Vous devriez avoir quelque chose comme ceci dans l'éditeur XML: Essentiellement ce morceau de code XML crée un menu supplémentaire (RTrader), un nouveau groupe (Mon groupe) et un bouton défini par l'utilisateur (Nouveau bouton) dans le ruban Excel. Une fois que vous avez terminé, ouvrez myFile. xslm dans Excel et fermez l'Editeur d'interface utilisateur personnalisé. Vous devriez voir quelque chose comme ça. 5 8211 Ouvrez l'éditeur VBA. Dans myFile. xlsm, insérez un nouveau module. Collez le code ci-dessous dans le module nouvellement créé. Cela efface les résultats précédents dans la feuille de calcul avant de faire face à de nouveaux. 6 8211 Cliquez sur Nouveau bouton. Maintenant revenir à la feuille de calcul et dans le menu RTrader cliquez sur le bouton 8220New Button8221. Vous devriez voir quelque chose comme ci-dessous apparaître. Le guide ci-dessus est une version très simple de ce qui peut être réalisé en utilisant BERT, mais il vous montre comment combiner la puissance de plusieurs outils spécifiques pour construire votre propre application personnalisée. De mon point de vue, l'intérêt d'une telle approche est la capacité de coller ensemble R et Excel évidemment, mais aussi d'inclure via XML (et lot) morceaux de code de Python, SQL et plus encore. C'est exactement ce dont j'avais besoin. Enfin, je serais curieux de savoir si quelqu'un a une expérience avec BERT 19 août 2016, 9h26. Lors de l'essai des stratégies de négociation une approche commune consiste à diviser l'ensemble de données initiales dans les données d'échantillon: la partie des données conçues pour calibrer Le modèle et hors des données d'échantillon: la partie des données utilisée pour valider l'étalonnage et s'assurer que la performance créée dans l'échantillon sera reflétée dans le monde réel. En règle générale, environ 70 des données initiales peuvent être utilisées pour l'étalonnage (c'est-à-dire dans l'échantillon) et 30 pour la validation (c'est-à-dire hors échantillon). Ensuite, une comparaison des données d'entrée et de sortie des données d'échantillon aide à décider si le modèle est suffisamment robuste. Ce post vise à aller un peu plus loin et fournit une méthode statistique pour décider si les données hors échantillon sont en ligne avec ce qui a été créé dans l'échantillon. Dans le tableau ci-dessous, la zone bleue représente la performance hors échantillon pour une de mes stratégies. Une inspection visuelle simple révèle un bon ajustement entre l'entrée et la sortie de la performance de l'échantillon, mais quel degré de confiance ai-je dans ce domaine À ce stade pas grand-chose et c'est le problème. Ce qui est vraiment nécessaire est une mesure de la similarité entre l'entrée et la sortie des ensembles de données d'échantillon. En termes statistiques, cela pourrait se traduire par la probabilité que les chiffres d'entrée et de sortie des échantillons proviennent de la même distribution. Il existe un test statistique non paramétrique qui fait exactement cela: le test de Kruskall-Wallis. Une bonne définition de ce test pourrait être trouvée sur R-Tutor 8220A collection des échantillons de données sont indépendants s'ils proviennent de populations non apparentées et les échantillons ne se touchent pas mutuellement. Utilisation du test de Kruskal-Wallis. Nous pouvons décider si les distributions de population sont identiques sans supposer qu'elles suivent la distribution normale.8221 L'avantage supplémentaire de ce test n'est pas de supposer une distribution normale. Il existe d'autres tests de même nature qui pourraient entrer dans ce cadre. Le test de Mann-Whitney-Wilcoxon ou les tests de Kolmogorov-Smirnov serait parfaitement adapté au cadre décrit ici, mais cela dépasse le cadre de cet article pour discuter des avantages et des inconvénients de chacun de ces tests. Une bonne description avec R exemples peuvent être trouvés ici. Voici le code utilisé pour générer le graphique ci-dessus et l'analyse: Dans l'exemple ci-dessus, la période d'échantillonnage est plus longue que la période hors période d'échantillonnage donc j'ai créé aléatoirement 1000 sous-ensembles de données d'échantillonnage chacune ayant la même longueur que la sortie Des données d'échantillon. Ensuite, j'ai testé chacun dans le sous-ensemble d'échantillons contre les données hors échantillon et j'ai enregistré les valeurs p. Ce processus ne crée pas une seule valeur p pour le test de Kruskall-Wallis mais une distribution rendant l'analyse plus robuste. Dans cet exemple, la moyenne des valeurs p est bien au-dessus de zéro (0,478) indiquant que l'hypothèse nulle doit être acceptée: il existe des preuves solides que les données d'entrée et de sortie proviennent de la même distribution. Comme d'habitude ce qui est présenté dans ce post est un exemple de jouet qui ne fait qu'effleurer la surface du problème et doit être adapté aux besoins individuels. Cependant, je pense qu'il propose un cadre statistique intéressant et rationnel pour évaluer les résultats de l'échantillon. Ce post est inspiré des deux articles suivants: Vigier Alexandre, Chmil Swann (2007), Effets de diverses fonctions d'optimisation sur la performance hors échantillon des stratégies de négociation évoluées génétiquement, Conférence de prévisions des marchés financiers Vigier Alexandre, Chmil Swann (2010), An Processus d'optimisation pour améliorer la cohérence de l'échantillon, un cas de marché boursier, JP Morgan Cazenove équité quantitative Conférence, Londres Octobre 2010 13 décembre 2015, 2:03 pm Faire des recherches quantitatives implique beaucoup de données crunching et on a besoin de données propres et fiables atteindre cet. Ce qui est vraiment nécessaire, c'est des données propres, facilement accessibles (même sans connexion Internet). Le moyen le plus efficace pour ce faire pour moi a été de maintenir un ensemble de fichiers csv. Évidemment, ce processus peut être géré de plusieurs façons, mais j'ai trouvé très efficace et simple heures supplémentaires pour maintenir un répertoire où je stocker et mettre à jour les fichiers csv. J'ai un fichier csv par instrument et chaque fichier est nommé d'après l'instrument qu'il contient. La raison pour laquelle je le fais est double: Tout d'abord, je don8217t voulez télécharger (le prix) des données de Yahoo, Google etc8230 chaque fois que je veux tester une nouvelle idée, mais surtout une fois que j'ai identifié et corrigé un problème, je don8217t voulez avoir Faites-le à nouveau la prochaine fois que j'ai besoin du même instrument. Simple mais très efficace jusqu'à présent. Le processus est résumé dans le tableau ci-dessous. Dans tout ce qui suit, je suppose que les données proviennent de Yahoo. Le code devra être modifié pour les données de Google, Quandl etc8230 En outre, je présente le processus de mise à jour quotidienne des données de prix. L'installation sera différente pour les données de fréquence plus élevée et pour d'autres types de données (c'est-à-dire différentes des prix). 1 8211 Téléchargement initial de données (listOfInstruments. R amp historicalData. R) Le fichier listOfInstruments. R est un fichier contenant uniquement la liste de tous les instruments. Si un instrument ne fait pas partie de ma liste (c'est-à-dire pas de fichier csv dans mon dossier de données) ou si vous le faites pour la toute première fois, vous devez télécharger l'ensemble de données historiques initiales. L'exemple ci-dessous télécharge un ensemble de prix quotidiens de l'ETF de Yahoo Finance à janvier 2000 et stocke les données dans un fichier csv. 2 8211 Mettre à jour les données existantes (updateData. R) Le code ci-dessous commence à partir des fichiers existants dans le dossier dédié et les met à jour tous les uns après les autres. J'exécute habituellement ce processus tous les jours sauf quand I8217m en vacances. Pour ajouter un nouvel instrument, exécutez simplement l'étape 1 ci-dessus pour cet instrument seul. 3 8211 Créer un fichier batch (updateDailyPrices. bat) Une autre partie importante du travail est la création d'un fichier batch qui automatise le processus de mise à jour ci-dessus (I8217m un utilisateur Windows). Cela évite d'ouvrir RRStudio et exécuter le code à partir de là. Le code ci-dessous est placé sur un fichier. bat (le chemin d'accès doit être modifié avec la configuration du lecteur 8217s). Notez que j'ai ajouté un fichier de sortie (updateLog. txt) pour suivre l'exécution. Le processus ci-dessus est extrêmement simple car il ne décrit que la façon de mettre à jour les données de prix quotidiennes. Je l'ai utilisé depuis un certain temps et il a travaillé très bien pour moi jusqu'à présent. Pour des données plus avancées et / ou des fréquences plus élevées, les choses peuvent devenir plus compliquées. Comme d'habitude tous les commentaires bienvenus 23 mars 2015, 8:55 pm Quand il s'agit de gérer un portefeuille de stocks par rapport à un benchmark le problème est très différent de la définition d'une stratégie de retour absolu. Dans le premier il faut tenir plus de stocks que dans le plus tard où aucun stock du tout peut être tenu si il n'y a pas assez bonne occasion. La raison en est l'erreur de suivi. Il s'agit de l'écart-type du rendement du portefeuille moins le rendement de référence. Les stocks moins est tenu vs un point de référence plus l'erreur de suivi (par exemple, un risque plus élevé). L'analyse qui suit est largement inspirée du livre 8220Active Portfolio Management8221 de Grinold amp Kahn. Il s'agit de la bible pour toute personne intéressée à gérer un portefeuille par rapport à un indice de référence. J'encourage fortement quiconque s'intéresse au sujet à lire le livre du début à la fin. Il est très bien écrit et pose les bases d'une gestion systématique de portefeuille actif (je n'ai aucune affiliation à l'éditeur ou aux auteurs). 1 8211 Analyse factorielle Ici, nous essayons de classer aussi précisément que possible les stocks de l'univers d'investissement sur une base de rendement à terme. Beaucoup de gens sont venus avec de nombreux outils et d'innombrables variante de ces outils ont été développés pour atteindre cet objectif. Dans ce post, je me concentre sur deux mesures simples et largement utilisées: Coefficient d'information (IC) et Quantiles Return (QR). 1.1 8211 Coefficient d'information L'horizon du rendement à terme doit être défini par l'analyste et il est fonction du chiffre d'affaires de la stratégie et de la décroissance alpha (ce qui a fait l'objet de recherches approfondies). De toute évidence, les CI doivent être aussi hauts que possible en termes absolus. Pour le lecteur aiguisé, dans le livre de Grinold amp Kahn une formule reliant Ratio d'information (IR) et IC est donnée: avec largeur étant le nombre de paris indépendants (métiers). Cette formule est connue comme la loi fondamentale de la gestion active. Le problème est que, souvent, définir la largeur avec précision n'est pas aussi facile qu'il y paraît. Pour obtenir une estimation plus précise du pouvoir prédictif des facteurs, il faut aller plus loin et regrouper les stocks par quantiles de facteurs puis analyser le rendement moyen (ou toute autre mesure de tendance centrale) de chacun de ces facteurs Quantiles. L'utilité de cet outil est simple. Un facteur peut avoir un bon IC, mais son pouvoir prédictif pourrait être limité à un petit nombre de stocks. Ce n'est pas bon, car un gestionnaire de portefeuille devra choisir des actions dans l'univers entier afin de répondre à sa contrainte d'erreur de suivi. Les bons quantiles de retour sont caractérisés par une relation monotone entre les quantiles individuels et les rendements anticipés. Tous les stocks de l'index SampP500 (au moment de l'écriture). Il existe évidemment un biais de survie: la liste des stocks de l'indice a sensiblement changé entre le début et la fin de la période d'échantillonnage, mais elle est assez bonne à des fins d'illustration seulement. Le code ci-dessous permet de télécharger les prix des actions individuelles dans le SampP500 entre janvier 2005 et aujourd'hui (cela prend un certain temps) et retourne les prix bruts en retour au cours des 12 derniers mois et du dernier mois. Le premier est notre facteur, ce dernier sera utilisé comme mesure de retour vers l'avant. Ci-dessous est le code pour calculer le coefficient d'information et Quantiles Return. Notez que j'ai utilisé des quintiles dans cet exemple, mais toute autre méthode de regroupement (terciles, déciles, etc.8230) peut être utilisée. Il dépend vraiment de la taille de l'échantillon, ce que vous voulez capturer et si vous voulez avoir un large aperçu ou se concentrer sur les queues de distribution. Pour estimer les rendements au sein de chaque quintile, la médiane a été utilisée comme estimateur de tendance centrale. Cette mesure est beaucoup moins sensible aux valeurs aberrantes que la moyenne arithmétique. Et enfin le code pour produire le graphique Quantiles Return. 3 8211 Comment exploiter les informations ci-dessus Dans le graphique ci-dessus, Q1 est le plus bas depuis 12 mois et Q5 le plus élevé. Il ya une augmentation quasi monotone du retour des quantiles entre Q1 et Q5, ce qui indique clairement que les stocks tombant en Q5 surpassent ceux tombant en Q1 d'environ 1 par mois. C'est très important et puissant pour un tel facteur simple (pas vraiment une surprise though8230). Par conséquent, il ya plus de chances de battre l'indice en surpondérant les stocks tombant en Q5 et en sous-pondérant ceux tombant dans Q1 par rapport à l'indice de référence. Un IC de 0,0206 pourrait ne pas signifier beaucoup en soi, mais il est significativement différent de 0 et indique un bon pouvoir prédictif du retour des 12 derniers mois dans l'ensemble. Les tests de signification formelle peuvent être évalués, mais cela dépasse le cadre de cet article. 4 8211 Limites pratiques Le cadre ci-dessus est excellent pour évaluer la qualité des facteurs d'investissement, mais il existe un certain nombre de limitations pratiques qui doivent être abordées pour la mise en œuvre de la vie réelle: le rééquilibrage. Dans la description ci-dessus, il suppose que, à la fin de chaque mois, le portefeuille est entièrement rééquilibré. Cela signifie que tous les stocks qui tombent au premier trimestre sont sous-pondérés et que tous les stocks tombant en Q5 sont en surpoids par rapport à l'indice de référence. Cela n'est pas toujours possible pour des raisons pratiques: certains stocks peuvent être exclus de l'univers d'investissement, il ya des contraintes sur le poids de l'industrie ou du secteur, il ya des contraintes sur le chiffre d'affaires etc8230 Coûts de transaction. Cela n'a pas été pris en compte dans l'analyse ci-dessus et cela constitue un sérieux frein à la mise en œuvre de la vie réelle. Considérations de roulement sont généralement mis en œuvre dans la vie réelle sous une forme de pénalité sur la qualité des facteurs. Coefficient de transfert. Il s'agit d'une extension de la loi fondamentale de la gestion active et il détend l'hypothèse de Grinold8217s modèle que les gestionnaires ne font face à aucune contrainte qui les empêchent de traduire leurs investissements directement dans les aperçus de portefeuille. Et finalement, I8217m étonné par ce qui peut être réalisé en moins de 80 lignes de code avec R8230 Comme d'habitude tous les commentaires bienvenus 14 mars 2014, 1:07 pm La question on devrait toujours lui demander quand l'utilisation des indicateurs techniques est ce qui serait un objectif Critères pour sélectionner les paramètres des indicateurs (par exemple, pourquoi utiliser un RSI de 14 jours plutôt que 15 ou 20 jours). Les algorithmes génétiques (GA) sont des outils bien adaptés pour répondre à cette question. Dans ce post I8217ll vous montrer comment configurer le problème dans R. Avant de procéder le rappel habituel: Ce que je présente dans ce post est juste un exemple de jouet et pas une invitation à investir. Ce n'est pas non plus une stratégie terminée, mais une idée de recherche qui doit être étudiée, développée et adaptée aux besoins individuels. Quels sont les algorithmes génétiques La meilleure description de GA que j'ai rencontré vient de Cybernatic Trading un livre de Murray A. Ruggiero. 8220 Algorithmes génétiques ont été inventés par John Holland au milieu des années 1970 pour résoudre des problèmes d'optimisation. Cette méthode utilise la sélection naturelle, la survie des plus aptes8221. Le processus général suit les étapes ci-dessous: Encoder le problème dans les chromosomes En utilisant l'encodage, développer une fonction de forme physique pour l'utilisation dans l'évaluation de chaque chromosome8217s valeur dans la résolution d'un problème donné Initialiser une population de chromosomes Évaluer chaque chromosome dans la population Créer de nouveaux chromosomes par accouplement deux Chromosomes. Évaluer le nouveau chromosome Supprimer un membre de la population qui est moins apte que le nouveau chromosome et insérer le nouveau chromosome dans la population . Si le critère d'arrêt est atteint (nombre maximal de générations, les critères de condition physique sont assez bons8230), puis retourner le meilleur chromosome ou passez à l'étape 4 D'un point de vue commercial GA sont très utiles car ils sont bons pour traiter des problèmes hautement non linéaires. Cependant, ils présentent quelques traits méchants qui méritent d'être mentionnés: Plus de montage: C'est le problème principal et it8217s à l'analyste de mettre en place le problème d'une manière qui minimise ce risque. Temps de calcul. Si le problème n'est pas correctement défini, il peut être extrêmement long pour atteindre une solution décente et la complexité augmente exponentiellement avec le nombre de variables. D'où la nécessité de sélectionner soigneusement les paramètres. Il ya plusieurs paquets R traitant de GA, j'ai choisi d'utiliser le plus commun: rgenoud Les cours de clôture quotidiens pour la plupart des ETF liquides de Yahoo finance remontant à janvier 2000. La période d'échantillonnage va de janvier 2000 à décembre 2010. The Out of La période d'échantillonnage commence en janvier 2011. La logique est la suivante: la fonction de conditionnement physique est optimisée sur la période d'échantillonnage pour obtenir un ensemble de paramètres optimaux pour les indicateurs techniques sélectionnés. Le rendement de ces indicateurs est ensuite évalué dans la période hors période d'échantillonnage. Mais avant cela, les indicateurs techniques doivent être sélectionnés. Le marché boursier présente deux caractéristiques principales qui sont familiers à quiconque avec une certaine expérience de négociation. Moment à long terme et inversion à court terme. Ces caractéristiques peuvent être traduites en termes d'indicateurs techniques par: le moyen de croisement des moyennes mobiles et RSI. Cela représente un ensemble de 4 paramètres: périodes de retour en arrière pour les moyennes mobiles à long et court terme, période de rétrospection pour le seuil RSI et RSI. Les ensembles de paramètres sont les chromosomes. L'autre élément clé est la fonction fitness. Nous pourrions vouloir utiliser quelque chose comme: rendement maximal ou ratio de Sharpe ou Drawdown moyen minimum. Dans ce qui suit, j'ai choisi de maximiser le ratio de Sharpe. L'implémentation R est un ensemble de 3 fonctions: fitnessFunction. Définit la fonction de conditionnement physique (par exemple, le rapport de Sharpe maximum) à utiliser dans le tradingStatistics de moteurs GA. Résumé des statistiques de négociation pour l 'entrée et la sortie des périodes d' échantillonnage aux fins de comparaison. Le moteur GA du paquetage rgenoud La fonction genoud est assez complexe mais je ne vais pas expliquer ce que signifie chaque paramètre car je veux garder ce post court (et la documentation est vraiment bonne). Dans le tableau ci-dessous, je présente pour chaque instrument les paramètres optimaux (RSI, RSI, Moyenne mobile à court terme et Moyenne mobile à long terme) ainsi que les statistiques de négociation d'échantillons. Avant de commenter les résultats ci-dessus, je voudrais expliquer quelques points importants. Pour correspondre à la logique définie ci-dessus, j'ai borné les paramètres pour s'assurer que la période de look-back pour la moyenne mobile à long terme est toujours plus longue que la moyenne mobile plus courte. J'ai également contraint l'optimiseur à choisir seulement les solutions avec plus de 50 métiers dans la période de l'échantillon (par exemple, la signification statistique). Globalement, les résultats de l'échantillon sont loin d'être impressionnants. Les rendements sont faibles, même si le nombre de métiers est faible pour rendre le résultat vraiment important. Cependant, il ya une perte importante d'efficacité entre la période d'entrée et de sortie de la période d'échantillonnage pour le Japon (EWJ), ce qui signifie très probablement un dépassement. Ce message est destiné à donner au lecteur les outils pour utiliser correctement GA dans un cadre commercial quantitatif. Encore une fois, It8217s juste un exemple qui doit être affiné plus loin. Quelques améliorations potentielles à explorer seraient: la fonction de conditionnement physique. Maximiser le ratio de Sharpe est très simpliste. Une fonction 8220smarter8221 serait certainement améliorer le hors modèle de statistiques de négociation d'échantillon. Nous essayons de saisir un modèle très simple. Une recherche plus approfondie est certainement nécessaire. Optimisation. Il existe de nombreuses façons d'améliorer la façon dont l'optimisation est effectuée. Cela améliorerait à la fois la vitesse de calcul et la rationalité des résultats. Le code utilisé dans ce post est disponible sur un dépôt Gist. Comme d'habitude tous les commentaires bienvenus Février 28, 2014, 3:52 pm Il ya un énorme corps de la littérature à la fois académique et empirique sur la prévision du marché. La plupart du temps, il mélange deux caractéristiques du marché: Magnitude et Direction. Dans cet article, je veux me concentrer sur l'identification de l'orientation du marché seulement. L'objectif que je me suis fixé, est d'identifier les conditions du marché lorsque les cotes sont fortement biaisées vers un marché en hausse ou en baisse. Ce message donne un exemple de la façon dont CART (classification et arbres de régression) peut être utilisé dans ce contexte. Avant de poursuivre le rappel habituel: Ce que je présente dans ce post est juste un exemple de jouet et pas une invitation à investir. Ce n'est pas non plus une stratégie terminée, mais une idée de recherche qui doit être étudiée, développée et adaptée aux besoins individuels. 1 8211 Qu'est-ce que CART et pourquoi l'utiliser À partir des statistiques, CART est un ensemble de techniques de classification et de prévision. La technique vise à produire des règles qui prédisent la valeur d'une variable de résultat (cible) à partir de valeurs connues de variables prédictives (explicatives). Les algorithmes pour construire des arbres de décision fonctionnent habituellement de haut en bas, en choisissant une variable à chaque étape qui divise le mieux l'ensemble des éléments. Différents algorithmes utilisent différentes mesures pour mesurer 8220best8221. Ceux-ci mesurent généralement l'homogénéité de la variable cible dans les sous-ensembles. Ces métriques sont appliquées à chaque sous-ensemble candidat et les valeurs résultantes sont combinées (par exemple moyennées) pour fournir une mesure de la qualité de la scission. La méthodologie CART présente certaines caractéristiques qui sont très bien adaptées à l'analyse du marché: Non paramétrique. CART peut gérer n'importe quel type de distribution statistique Non linéaire. CART peut traiter un large spectre de dépendance entre les variables (par exemple, ne se limite pas aux relations linéaires) Robuste à outliers Il existe différents paquets R traitant de partitionnement récursif, je utiliser ici rpart pour l'estimation des arbres et rpart. plot pour les arbres de dessin. 2 8211 Data amp Experiment Design Les prix quotidiens de la plupart des ETF liquides de janvier 2000 à décembre 2013 sont extraits de Google Finance. La période d'échantillonnage va de janvier 2000 à décembre 2010, le reste de l'ensemble de données étant la période hors période d'échantillonnage. Avant d'exécuter tout type d'analyse, le jeu de données doit être préparé pour la tâche. La variable cible est le retour direct hebdomadaire de l'ETF défini comme deux états du résultat mondial (UP ou DOWN). Si le retour vers l'avant hebdomadaire gt 0 alors le marché dans l'état UP, DOWN état autrement Les variables explicatives sont un ensemble d'indicateurs techniques dérivés de la base de données OHLC quotidienne initiale. Chaque indicateur représente un comportement bien documenté sur le marché. Afin de réduire le bruit dans les données et d'essayer d'identifier des relations robustes, chaque variable indépendante est considérée comme ayant un résultat binaire. Volatilité (VAR1). La volatilité élevée est généralement associée à un marché en baisse et une faible volatilité avec un marché en hausse. La volatilité est définie comme la fourchette de 20 jours ATR (Average True Range) brute à sa moyenne mobile (MA). Si ATR brut gt MA puis VAR1 1, sinon VAR1 -1. Moment à court terme (VAR2). Le marché boursier présente un comportement momentum à court terme capturé ici par une moyenne mobile de 5 jours (SMA). Si Prix gt SMA puis VAR2 1 autre VAR2 -1 Moment long terme (VAR3). Le marché boursier présente un comportement dynamique à long terme capturé ici par une moyenne mobile simple de 50 jours (LMA). Si le prix gt LMA puis VAR3 1 autre VAR3 -1 Inversion à court terme (VAR4). Ceci est capturé par le CRTDR qui signifie Close Relative To Daily Range et calculé comme suit:. Si CRTDR gt 0,5, alors VAR4 1 autrement VAR4 -1 Régime d'autocorrélation (VAR5). Le marché des actions tend à traverser des périodes de régimes négatifs et positifs d'autocorrélation. Si retourne l'autocorrélation au cours des 5 derniers jours gt 0 alors VAR5 1 autrement VAR5 -1 Je mets ci-dessous un exemple d'arbre avec quelques explications Dans l'arbre ci-dessus, le chemin d'accès au nœud 4 est: VAR3 gt0 (Long Term Momentum gt 0) et VAR4 Gt 0 (CRTDR gt 0). Le rectangle rouge indique qu'il s'agit d'une feuille DOWN (par exemple noeud terminal) avec une probabilité de 58 (1 8211 0,42). En termes de marché, cela signifie que si Momentum à long terme est en hausse et CRTDR est gt 0,5 alors la probabilité d'un retour positif la semaine prochaine est 42 sur la base des données de l'échantillon échantillon. 18 indique la proportion de l'ensemble de données qui tombe dans ce noeud terminal (par exemple feuille). Il ya plusieurs façons d'utiliser l'approche ci-dessus, j'ai choisi d'estimer et de combiner tous les arbres possibles. À partir des données de l'échantillon, je rassemble toutes les feuilles de tous les arbres possibles et je les rassemble dans une matrice. C'est la matrice de règles 8222 qui donne la probabilité que la semaine prochaine augmente ou diminue. J'applique les règles de la matrice ci-dessus à la hors des données d'échantillon (Jan 2011 8211 Dec 2013) et je compare les résultats au résultat réel. Le problème avec cette approche est qu'un seul point (semaine) peut tomber dans plusieurs règles et même appartenir à UP et DOWN règles simultanément. J'applique donc un système de vote. Pour une semaine donnée, je résume toutes les règles qui s'appliquent à cette semaine en donnant un 1 pour une règle UP et -1 pour une règle DOWN. Si la somme est supérieure à 0, la semaine est classée comme UP, si la somme est négative, 8217s une semaine DOWN et si la somme est égale à 0, il n'y aura pas de position prise cette semaine (retour 0) La méthodologie ci-dessus est appliquée à un Ensemble des ETF très liquides. Je trace en dessous de la sortie des courbes d'équité d'échantillon avec la stratégie d'achat et de tenir sur la même période. Les résultats initiaux semblent encourageants, même si la qualité du résultat varie considérablement selon l'instrument. Cependant, il ya une immense salle à améliorer. Je mets ci-dessous quelques directions pour une analyse plus approfondie. L'algorithme utilisé ici pour définir les arbres est optimal à chaque fractionnement, mais il ne garantit pas l'optimalité du chemin. Ajout d'une métrique pour mesurer l'optimalité du chemin serait certainement améliorer les résultats ci-dessus. Autres variables. J'ai choisi les variables explicatives uniquement sur la base de l'expérience. Il est très probable que ce choix n'est ni bon ni optimal. Méthodologie de Backtest. J'ai utilisé une méthode simple d'entrée et de sortie de l'échantillon. Dans un backtest plus formel je préférerais utiliser une fenêtre roulante ou en expansion de sous-périodes d'échantillons d'entrée et de sortie (par exemple, analyse de marche avant) Comme d'habitude, tous les commentaires bienvenus
No comments:
Post a Comment