Sunday 15 January 2017

Cointegrated Forex Paires Histoire

Indice 1: la volatilité a tendance à être déjà moyen revenir. Astuce 2: une partie que vous pouvez échanger pure Vega produit (swap de volatilité de la variance), vous devez vous rappeler que vous devrez couvrir tous les risques de base pour avoir une pure Volatilité Relative jeu. Ce qui n'est pas facile et peut-être irréalisable pour l'offre et la demande de propagation indice 3: quotgenerally plus liquidquot options à court terme ont faible Vega (vous aurez besoin de faire beaucoup de travail pour couvrir le risque de base pour avoir une exposition limitée au vol et vous devez le faire Pour les deux sous-jacents) indice 4: il ya beaucoup de recherches quotacademicquot disponibles autour. Mais je conseille d'essayer de comprendre vol lui-même d'abord 1.2k Vues middot Voir Upvotes middot Pas pour la reproduction Plus de réponses ci-dessous. Questions relatives à la volatilité de la valeur relative Comment négocier la volatilité de la valeur relative Comment faites-vous pour négocier la volatilité en utilisant l'arbitrage de la volatilité Comment fonctionne la volatilité du pompage comme stratégie de négociation La signification de la volatilité des opérations Comment la volatilité est-elle négociée et comment un tel contrat est-il évalué Comment faites-vous pour négocier la volatilité Comment savez-vous si le marché est volatile ou non pour le commerce binaire Quels devraient être choisis entre négociation directionnelle et volatilité trading Quelle concurrence HFT et autres Considérations. En tant que commerçant de forex, dois-je me concentrer uniquement sur une paire, une douzaine de paires ou de négocier chaque paire quand je trouve un bon signal d'entrée OK, les paires de négociation. En termes simples, c'est le commerce de deux actions dans la même industrie, étant long et court l'autre. Mais permet de prendre cette étape plus loin et le placer dans un régime d'échange de volatilité. Disons que mon analyse montre une option de stock (ATM chevauchement) à négocier à une volatilité implicite très faible tandis qu'un autre stock dans les mêmes secteurs optoins (ATM Straddle) se négocient à une très forte volatilité implicite. Pairs Trading serait d'acheter l'ATM cheval sur le stock avec les options bon marché et la vente de l'ATM cheval sur le stock avec les options riches. Résumé: Le commerce de Paris est un commerce VOLATILITY, où le commerçant achète des options bon marché et vend des options rish sur les actions dans le même secteur ou l'industrie. 677 vues middot Voir Upvotes middot Pas pour la reproduction Pratik Jain. Rédacteur en chef: Tradingtrings Pair Trading est une stratégie neutre sur le marché où deux instruments hautement liés sont achetés et vendus ensemble quand il ya un certain degré d'écart dans leur co-relation. Habituellement, le stock ou les produits sélectionnés pour le Trading Pair sont du même secteur et se déplacent ensemble pendant la plupart des événements du marché. Télécharger une fiche Excel pour identifier les opportunités de négociation de paire à partir du lien ci-dessous: 336 vues middot Voir Upvotes middot Not for ReproductionForex Trading Diary 5 - Trading paires de devises multiples Hier, j'ai publié quelques changements importants au logiciel QSForex. Ces changements ont augmenté l'utilité du système de manière significative au point où il est presque prêt pour le backtesting de données de ticks de plusieurs jours sur une gamme de paires de devises. Les modifications suivantes ont été apportées à Github: Modification supplémentaire des objets Position et Portefeuille afin de permettre la négociation de plusieurs paires de devises ainsi que des devises qui ne sont pas libellées dans la devise du compte. Par conséquent, un compte libéré de GBP peut maintenant négocier EURUSD, par exemple. Révision complète de la façon dont la position et le portefeuille de calculs ouvre, ferme, ajouts et retraits des unités. L'objet Position effectue maintenant le levage lourd en laissant un objet Portfolio relativement maigre. Ajout de la première stratégie non triviale, à savoir la stratégie bien connue de Crossover moyenne mobile avec une paire de moyennes mobiles simples (SMA). Modification de backtest. py pour le rendre unidirectionnel et déterministe. Malgré mon optimisme qu'une approche multi-thread ne serait pas trop préjudiciable à la précision de simulation, j'ai eu du mal à obtenir des résultats de backtesting satisfaisants avec une approche multi-thread. Introduit un script de sortie basique basé sur Matplotlib pour visualiser la courbe d'équité du portefeuille. La génération de courbes de capitaux propres est à un stade précoce et nécessite encore beaucoup de travail. Comme je l'ai mentionné dans l'entrée précédente. Pour ceux d'entre vous qui ne sont pas familiarisés avec QSForex et viennent à cette série de forex diary pour la première fois, je suggère fortement d'avoir une lecture des entrées du journal suivant pour se mettre à la vitesse avec le logiciel: ainsi que la page Github pour QSForex : Support de devise multiple Une fonction que j'ai discuté continuellement dans ces entrées de journal est la capacité de soutenir des paires de devises multiples. A ce stade Ive a maintenant modifié le logiciel pour permettre des dénominations différentes de compte, puisque précédemment GBP était la devise hardcoded. Il est maintenant possible de négocier avec d'autres paires de devises, à l'exception de celles qui consistent en une base ou une cotation en yen japonais (JPY). Ce dernier est dû à la façon dont les tailles de tiques sont caclulées dans les monnaies JPY. Pour ce faire, j'ai modifié la manière dont le profit est calculé lorsque des unités sont supprimées ou que la position est fermée. Voici l'extrait courant pour calculer les pips, dans le fichier position. py: Si nous fermons la position afin de réaliser un gain ou une perte, nous devons utiliser l'extrait suivant pour closeposition. Également dans le fichier position. py: Tout d'abord, nous obtenons les prix d'enchère et de demande pour la paire de devises négociée ainsi que la paire devishome. Par exemple, pour un compte libellé en GBP, où nous négocions EURUSD, nous devons obtenir des prix pour USDGBP, puisque EUR est la devise de base et USD est la cotation. A ce stade, nous vérifions si la position elle-même est une position longue ou courte et ensuite calculer le prix de suppression appropriée et quotehome supprimer prix, qui sont donnés par removeprice et qhclose respectivement. Nous avons ensuite mis à jour les prix courants et moyens dans la position et finalement calculer la PampL en multipliant les pépins, le prix de citation de déménagement et puis le nombre d'unités étaient fermeture. Nous avons complètement éliminé la nécessité de discuter de l'exposition, qui était une variable redondante. Cette formule fournit alors correctement la PampL contre tout commerce de paires de devises (non libellées en JPY). Révision de la gestion des positions et des portefeuilles Outre la possibilité de négocier en plusieurs paires de devises, Ive a également précisé comment la position et le portefeuille partagent la responsabilité d'ouvrir et de fermer des positions, ainsi que d'additionner et de soustraire des parts. En particulier, Ive a déplacé beaucoup du code de gestion de position qui était dans portfolio. py en position. py. Cela est plus naturel puisque la position doit prendre soin de soi et ne pas déléguer au portefeuille En particulier, les addunits. Les unités de suppression et les méthodes de fermeture ont été créées ou améliorées: dans les deux derniers, vous pouvez voir comment la nouvelle formule de calcul du profit est mise en œuvre. Une grande partie de la fonctionnalité de la classe Portefeuille a donc été réduite de façon correspondante. En particulier les méthodes addnewposition. Addpositionunits. Les unités de position de suppression ont été modifiées pour tenir compte du fait que les travaux de calcul sont effectués dans l'objet Position: Essentiellement, tous (sauf addnewposition) vérifient simplement si la position existe pour cette paire de devises et appellent alors la méthode Position correspondante , En tenant compte des bénéfices si nécessaire. Stratégie de croisement moyenne mobile Nous avons discuté de la stratégie de Crossover moyenne mobile avant sur QuantStart. Dans le contexte du négoce d'actions. C'est une stratégie d'indicateur de banc d'essai très utile car il est facile de reproduire les calculs à la main (au moins aux basses fréquences), afin de vérifier que le backtester se comporte comme il se doit. L'idée de base de la stratégie est la suivante: Deux filtres de moyenne mobile simple distincts sont créés, avec des périodes d'analyse différentes, d'une série chronologique 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. La mise en œuvre est simple. Tout d'abord, nous proposons une méthode calcrollingsma qui nous permet d'utiliser plus efficacement le calcul SMA de la période précédente afin de générer le nouveau, sans avoir à recalculer complètement le SMA à chaque étape. Deuxièmement, nous générons des signaux dans deux cas. Dans le premier cas nous générons un signal si le SMA court dépasse le SMA long et ne sont pas long la paire de devises. Dans le second cas, nous générons un signal si le SMA long dépasse le SMA court et nous sommes déjà long. J'ai mis la fenêtre par défaut à 500 ticks pour la courte SMA et 2000 ticks pour la SMA longue. Évidemment, dans un environnement de production, ces paramètres seraient optimisés, mais ils fonctionnent bien pour nos tests. Single-Threaded Backtester Un autre changement majeur a été de modifier le composant de backtesting à un seul thread, plutôt que multi-threaded. J'ai effectué ce changement parce que j'avais de la difficulté à synchroniser les threads à exécuter d'une manière qui se produirait dans un environnement en direct. Il a fondamentalement signifié que les prix d'entrée et de sortie étaient très irréalistes, ayant souvent lieu (virtuel) heures après que la tique réelle ait été reçue. J'ai donc incorporé le streaming des objets TickEvent dans la boucle de backtesting, comme vous pouvez le voir dans l'extrait suivant de backtest. py: Notez la ligne ticker. streamnexttick (). Ceci est appelé avant un sondage de la file d'attente des événements et, en tant que tel, garantira toujours qu'un nouvel événement de tiquetage sera arrivé avant que la file d'attente ne soit interrogée à nouveau. En particulier, cela signifie qu'un signal est exécuté à mesure que de nouvelles données de marché arrivent, même s'il ya un certain décalage dans le processus de commande dû au glissement. Ive a également défini une valeur maxiters qui contrôle la durée de la boucle de backtesting se poursuit. Dans la pratique, cela devra être assez important lorsque vous traitez plusieurs devises pendant plusieurs jours, mais je l'ai mis à une valeur par défaut qui permet de données de jours unique d'une paire de devises. La méthode streamnexttick de la classe handler de prix est semblable à streamtoqueue sauf qu'elle appelle manuellement la méthode next () de l'itérateur plutôt que d'exécuter le tick streaming dans une boucle for: Notez qu'elle s'arrête à la réception d'une exception StopIteration. Cela permet au code de reprendre au lieu de s'écraser à l'exception. Matplotlib Output Ive a également créé un script de sortie Matplotlib très simple pour afficher la courbe d'équité. Output. py vit actuellement dans le répertoire backtest de QSForex et est donné ci-dessous: Notez qu'il existe une nouvelle variable settings. py maintenant appelée OUTPUTRESULTSDIR. Qui doit être réglé dans vos paramètres. Je l'ai pointé vers un répertoire temporaire ailleurs sur mon système de fichiers que je ne veux pas accidentellement ajouter des résultats de backtest d'équité à la base de code La courbe d'équité fonctionne en ayant une valeur d'équilibre ajouté à une liste de dictionnaires, avec un dictionnaire correspondant à un Horodatage Une fois que le back-test est terminé, la liste des dictionnaires est convertie en un Pandas DataFrame et la méthode tocsv est utilisée pour sortir equity. csv. Ce script de sortie lit alors simplement dans le fichier et trace la colonne de la balance du DataFrame suivant. Vous pouvez voir l'extrait de code pour les méthodes appendequityrow et outputresults de la classe Portfolio ci-dessous: Chaque fois que executesignal est appelé, l'ancienne méthode est appelée et ajoute la valeur timestampbalance au membre equity. À la fin du backtest, on appelle outputresults qui convertit simplement la liste de dictionnaires en un DataFrame puis sort au répertoire OUTPUTRESULTSDIR spécifié. Malheureusement, ce n'est pas un moyen particulièrement approprié de créer une courbe d'équité car il ne se produit que lorsqu'un signal est généré. Cela signifie qu'il ne prend pas en compte PampL non réalisé. Alors que c'est la façon dont le commerce réel se produit (vous n'avez pas réellement fait de l'argent jusqu'à ce que vous fermez une position), cela signifie que la courbe d'équité restera complètement plat entre les mises à jour de solde. Pire encore, Matplotlib par défaut d'interpolation linéaire entre ces points, fournissant ainsi la fausse impression de la PampL non réalisée. La solution à ce problème est de créer un tracker PampL non réalisé pour la classe Position qui se met à jour correctement sur chaque tick. C'est un peu plus coûteux en termes de calcul, mais permet une courbe d'équité plus utile. Cette fonctionnalité est planifiée pour une date ultérieure. Prochaines étapes La prochaine tâche importante pour QSForex est de permettre le backtesting de plusieurs jours. Actuellement, l'objet HistoricCSVPriceHandler ne charge qu'une seule journée de données de tick DukasCopy pour les paires de devises spécifiées. Afin de permettre plusieurs jours de test, il sera nécessaire de charger et de flux chaque jour de façon séquentielle pour éviter de remplir la RAM avec l'historique entier des données tick. Cela nécessitera une modification du fonctionnement de la méthode streamnexttick. Une fois que c'est terminé, il permettra un backtesting à long terme sur plusieurs paires. Une autre tâche consiste à améliorer la sortie de la courbe de capitaux propres. Afin de calculer l'une des mesures de performance habituelles (comme le ratio Sharpe), nous devrons calculer les rendements en pourcentage sur une période donnée. Cependant, cela nécessite que nous bin les données de la tique en barres afin de calculer un retour pour une période de temps particulière. Un tel scénario doit se produire sur une fréquence d'échantillonnage qui est similaire à la fréquence de négociation ou le ratio de Sharpe ne sera pas le reflet de la récompense de risque réel de la stratégie. Ce binning n'est pas un exercice trivial car il ya beaucoup d'hypothèses qui vont dans la génération d'un prix pour chaque bac. Une fois que ces deux tâches sont terminées et que des données suffisantes ont été acquises, nous serons en mesure de retracer une vaste gamme de stratégies de forex basées sur des données de type ticks et produire des courbes d'équité nettes de la majorité des coûts de transaction. En outre, il sera extrêmement simple de tester ces stratégies sur le compte de trading de papier pratique fourni par OANDA. Cela devrait vous permettre de prendre des décisions beaucoup mieux sur la façon d'exécuter une stratégie par rapport à un système de backtesting plus orienté vers la recherche.


No comments:

Post a Comment