Monday, 6 March 2017

Quantstart Oanda Forex

OANDA 1080108910871086108311001079109110771090 10921072108110831099 cookie 10951090108610731099 1089107610771083107210901100 1085107210961080 10891072108110901099 10871088108610891090109910841080 1074 1080108910871086108311001079108610741072108510801080 1080 108510721089109010881086108010901100 10801093 10891086107510831072108910851086 108710861090108810771073108510861089109011031084 10851072109610801093 10871086108910771090108010901077108310771081. 10601072108110831099 biscuits 10851077 10841086107510911090 1073109910901100 108010891087108610831100107910861074107210851099 107610831103 109110891090107210851086107410831077108510801103 10741072109610771081 10831080109510851086108910901080. 1055108610891077109710721103 108510721096 1089107210811090, 10741099 108910861075108310721096107210771090107710891100 1089 10801089108710861083110010791086107410721085108010771084 OANDA8217 109210721081108310861074 biscuit 1074 108910861086109010741077109010891090107410801080 1089 10851072109610771081 105510861083108010901080108210861081 108210861085109210801076107710851094108010721083110010851086108910901080. 1048108510891090108810911082109410801080 10871086 107310831086108210801088108610741072108510801102 1080 10911076107210831077108510801102 109210721081108310861074 cookie 1072 10901072108210781077 1091108710881072107410831077108510801102 108010841080 108710881080107410771076107710851099 10851072 10891072108110901077 aboutcookies. org. 1042 108910831091109510721077 10861075108810721085108010951077108510801103 1080108910871086108311001079108610741072108510801103 109210721081108310861074 biscuit 108610871088107710761077108310771085108510991077 1092109110851082109410801080 108510721096107710751086 10891072108110901072 10731091107610911090 1085107710761086108910901091108710851099. 104710721075108810911079108010901100 108410861073108010831100108510991077 1087108810801083108610781077108510801103 1042109310861076 1042109910731088107210901100 1089109510771090: ampltiframe src4489469.fls. doubleclickactivityisrc4489469typenewsi0catoanda00dclatdcrdidtagforchilddirectedtreatmentord1num1 mcesrc4489469.fls. doubleclickactivityisrc4489469typenewsi0catoanda00dclatdcrdidtagforchilddirectedtreatmentord1num1 width1 Hauteur1 frameborder0 styledisplay: aucun mcestyledisplay: noneampgtampltiframeampgt OANDAs outils de calcul de devises utilisent OANDA Tarifs commerce. Les taux de change de la pierre de touche compilés à partir des principaux contributeurs de données du marché. Nos tarifs sont fiables et utilisés par les grandes sociétés, les autorités fiscales, les cabinets d'audit et les particuliers du monde entier. OANDA,. . , 1990:, 3 ISO. ,, (). ,. (.) FxConverter169 199682112017 OANDA Corporation. 104210891077 10871088107210741072 10791072109710801097107710851099. 10581086107410721088108510991077 10791085107210821080 OANDA, fxTrade 1080 108910771084107710811089109010741086 10901086107410721088108510991093 107910851072108210861074 fx 10871088108010851072107610831077107810721090 OANDA Corporation. 104210891077 108710881086109510801077 10901086107410721088108510991077 10791085107210821080, 10871088107710761089109010721074108310771085108510991077 10851072 1101109010861084 10891072108110901077, 11031074108311031102109010891103 10891086107310891090107410771085108510861089109011001102 108910861086109010741077109010891090107410911102109710801093 1074108310721076107710831100109410771074. 10581086108810751086107410831103 10821086108510901088107210821090107210841080 10851072 10801085108610891090108810721085108510911102 107410721083110210901091 108010831080 10801085109910841080 107410851077107310801088107810771074109910841080 1087108810861076109110821090107210841080 1089 10801089108710861083110010791086107410721085108010771084 10841072108810781080 1080 1082108810771076108010901085108610751086 10871083107710951072 107410831077109510771090 1074109910891086108210801077 10881080108910821080 1080 10871086107610931086107610801090 10851077 1074108910771084 1080108510741077108910901086108810721084. 10561077108210861084107710851076109110771084 107410721084 109010971072109010771083110010851086 1086109410771085108010901100, 10871086107610931086107611031090 10831080 107410721084 10901072108210801077 10901086108810751086107410991077 10861087107710881072109410801080 1089 109110951077109010861084 10741072109610801093 108310801095108510991093 1086107310891090108611031090107710831100108910901074. 1042107210961080 109110731099109010821080 10841086107510911090 108710881077107410991089108010901100 10861073109810771084 10741072109610801093 1080108510741077108910901080109410801081. 1048108510921086108810841072109410801103, 10871088108010741077107610771085108510721103 10851072 107610721085108510861084 10891072108110901077, 10851086108910801090 10861073109710801081 10931072108810721082109010771088. 10561077108210861084107710851076109110771084 107410721084 10761086 108510721095107210831072 10901086108810751086107410831080 1086107310881072109010801090110010891103 10791072 1087108610841086109711001102 1082 10851077107910721074108010891080108410991084 1082108610851089109110831100109010721085109010721084 1080 109110731077107610801090110010891103, 109510901086 10741099 108710861083108510861089109011001102 108710861085108010841072107710901077 107410891077 1089108610871091109010891090107410911102109710801077 10881080108910821080. 10581086108810751086107410831103 10871086108910881077107610891090107410861084 108610851083107210811085 108710831072109010921086108810841099 107410831077109510771090 10761086108710861083108510801090107710831100108510991077 10881080108910821080. 10571084. 108810721079107610771083 17110551088107210741086107410991077 1074108610871088108610891099187 10791076107710891100. 1060108010851072108510891086107410991081 10891087108810771076 1073107710901090108010851075 10761086108910901091108710771085 109010861083110010821086 10821083108010771085109010721084 OANDA Europe Ltd, 1103107410831103110210971080108410891103 10881077107910801076107710851090107210841080 105710861077107610801085107710851085108610751086 10501086108810861083107710741089109010741072 108010831080 1056107710891087109110731083108010821080 10481088108310721085107610801103. 105010861085109010881072108210901099 10851072 1088107210791085108010941091, 1092109110851082109410801080 109310771076107810801088108610741072108510801103 105210584 1080 108210881077107610801090108510861077 10871083107710951086 10891074109910961077 50: 1 1085107710761086108910901091108710851099 107610831103 1088107710791080107610771085109010861074 10571086107710761080108510771085108510991093 106410901072109010861074 1040108410771088108010821080. 1048108510921086108810841072109410801103 10851072 1101109010861084 10891072108110901077 10851077 1087108810771076108510721079108510721095107710851072 107610831103 1078108010901077108310771081 10891090108810721085, 1074 1082108610901086108810991093 10771077 108810721089108710881086108910901088107210851077108510801077 108010831080 1080108910871086108311001079108610741072108510801077 10831102107310991084 10831080109410861084 108710881086109010801074108610881077109510801090 1084107710891090108510991084 1079107210821086108510721084 1080 10871088107210741080108310721084. 10501086108410871072108510801103 1089 108610751088107210851080109510771085108510861081 1086109010741077109010891090107410771085108510861089109011001102 OANDA Europe Limited 1079107210881077107510801089109010881080108810861074107210851072 1074 104010851075108310801080, 108810771075108010891090108810721094108010861085108510991081 10851086108410771088 7.110.087, 11021088108010761080109510771089108210801081 10721076108810771089: Tour 42, 9a étage, 25 Old Broad Street, Londres EC2N 1HQ. 104410771103109010771083110010851086108910901100 10821086108410871072108510801080 1083108010941077108510791080108810861074107210851072 1080 108810771075109110831080108810911077109010891103 10591087108810721074108310771085108010771084 10921080108510721085108910861074108610751086 1085107210761079108610881072. 10831080109410771085107910801103 8470 542574. OANDA Japan Co. Ltd. 8212 108710771088107410991081 10761080108810771082109010861088 10871086 108610871077108810721094108011031084 1089 10921080108510721085108910861074109910841080 1080108510891090108810911084107710851090107210841080 1090108010871072 Kanto Local Bureau financier (Kin sho), 108810771075. 8470 2137 1095108310771085 1040108910891086109410801072109410801080 1092108010851072108510891086107410991093 109211001102109510771088108910861074, 108810771075. 8470 1571.Forex Trading Diary 1 Forex Trading automatisé avec l'API OANDA J'ai mentionné précédemment dans l'article QuantStart: 2014 en revue que je passerais une partie de l'écriture 2015 sur le commerce de forex automatisé. Étant donné que moi même habituellement effectuer des recherches sur les marchés d'actions et à terme, j'ai pensé qu'il serait amusant (et éducatif) d'écrire sur mes expériences d'entrer sur le marché des changes dans le style d'un journal. Chaque entrée de journal tentera de construire sur tous ceux avant, mais devrait également être relativement autonome. Dans cette première entrée du journal Ill être décrivant comment mettre en place un nouveau compte de courtage de pratique avec OANDA ainsi que la façon de créer un moteur de négociation multithread base événementielle qui peut exécuter automatiquement les métiers à la fois dans un cadre pratique et en direct. L'année dernière, nous avons passé beaucoup de temps à regarder le backtestter événementiel. Principalement pour les actions et les FNB. Celui que je présente ci dessous est orienté vers le forex et peut être utilisé pour le commerce de papier ou de commerce en direct. J'ai écrit toutes les instructions suivantes pour Ubuntu 14.04, mais ils devraient facilement traduire à Windows ou Mac OS X, en utilisant une distribution Python comme Anaconda. La seule bibliothèque supplémentaire utilisée pour le moteur de négoce Python est la bibliothèque de requêtes, nécessaire pour la communication HTTP avec l'API OANDA. Puisque c'est le premier poste directement sur le commerce de devises, et le code présenté ci dessous peut être directement adapté à un environnement commercial en direct, je tiens à présenter les avertissements suivants: Avertissement: Trading des devises étrangères sur la marge comporte un niveau élevé de risque, Et peut ne pas convenir à tous les investisseurs. Les performances passées ne représentent pas les résultats futurs. Le haut degré de levier peut travailler contre vous ainsi que pour vous. Avant de décider d'investir en devises, vous devriez considérer attentivement vos objectifs de placement, votre niveau d'expérience et votre appétit pour le risque. La possibilité existe que vous pourriez soutenir une perte de tout ou partie de votre investissement initial et donc vous ne devriez pas investir de l'argent que vous ne pouvez pas vous permettre de perdre. Vous devriez être conscient de tous les risques associés aux opérations de change, et demander conseil à un conseiller financier indépendant si vous avez des doutes. Ce logiciel est fourni tel quel et toute garantie expresse ou implicite, y compris, mais sans s'y limiter, les garanties implicites de qualité marchande et d'adéquation à un usage particulier, est exclue. En aucun cas, les régents ou les contributeurs ne pourront être tenus responsables de dommages directs, indirects, accessoires, spéciaux, exemplaires ou consécutifs (y compris, mais sans s'y limiter, l'achat de biens ou de services de remplacement perte d'utilisation, de données ou de profits ou d'interruption d'activité ), Quelle qu'en soit la cause et quelle que soit la théorie de la responsabilité, qu'elle soit contractuelle, stricte ou délictuelle (y compris la négligence ou autre) découlant de l'utilisation de ce logiciel, même si elle est avisée de la possibilité de tels dommages. Configuration d'un compte avec OANDA La première question qui vient à l'esprit est Pourquoi choisir OANDA. En bref, après un peu de Googling autour pour les courtiers forex qui avaient API, j'ai vu que OANDA avait récemment publié une API REST appropriée qui pourrait facilement être communiquée à partir de presque n'importe quelle langue d'une manière très simple. Après avoir lu la documentation de l'API de développeur. J'ai décidé de leur donner un essai, au moins avec un compte pratique. Pour être clair je n'ai pas de relation préalable ou existante avec OANDA et je suis seulement de fournir cette recommandation basée sur mon expérience limitée en jouant avec leur API de pratique et quelques brèves utilisation (pour le téléchargement de données de marché) alors qu'il était auparavant dans un fonds. Si quelqu'un a rencontré tout autre forex courtiers qui ont également une API similairement similaire alors je serais heureux de leur donner un coup d'oeil ainsi. Avant d'utiliser l'API, il est nécessaire de s'inscrire à un compte pratique. Pour ce faire, dirigez vous vers le lien d'inscription. Vous verrez l'écran suivant: Vous pourrez alors vous connecter avec vos identifiants de connexion. Assurez vous de sélectionner l'onglet fxTradePractice à partir de l'écran de connexion: une fois entré, vous devrez noter votre ID de compte. Il est répertorié sous l'en tête noir de Mes fonds en regard de Primaire. Le mien est un nombre à 7 chiffres. En outre, vous devrez également générer un jeton API personnel. Pour ce faire, cliquez sur Gérer l'accès à l'API sous l'onglet Autres actions en bas à gauche: À ce stade, vous serez en mesure de générer un jeton API. Vous aurez besoin de la clé pour une utilisation ultérieure, alors assurez vous de l'écrire aussi. Vous voudrez maintenant lancer l'application FXTrade Practice, qui nous permettra de voir les ordres exécutés et notre perte de gain (papier). Si vous utilisez un système Ubuntu, vous devez installer une version légèrement différente de Java. En particulier, la version Oracle de Java 8. Si vous ne faites pas cela, le simulateur pratique ne sera pas chargé à partir du navigateur. J'ai exécuté ces commandes sur mon système: Vous serez maintenant en mesure de lancer l'environnement commercial pratique. Revenez au tableau de bord d'OANDA et cliquez sur le lien Mise en évidence sur le lien vert mis en évidence. Une boîte de dialogue Java s'affiche pour vous demander si vous voulez l'exécuter. Cliquez sur Exécuter et l'outil fxTrade Practice sera chargé. Mine a manqué à un graphique de bougie de 15 minutes de EURUSD avec le panneau de devis sur la gauche: À ce stade, nous sommes prêts à commencer à concevoir et à coder notre système automatisé de forex contre l'API d'OANDA. Vue d'ensemble de l'architecture commerciale Si vous avez suivi la série de backtester événementielle pour les actions et les ETF que j'ai créés l'année dernière, vous serez conscient de la façon dont fonctionne un système de négociation événementielle. Pour ceux d'entre vous qui sont nouveaux dans le logiciel événementiel. Je suggère vivement de lire l'article afin de mieux comprendre comment ils fonctionnent. Essentiellement, l'ensemble du programme est exécuté dans une boucle infinte while qui ne se termine que lorsque le système de trading est coupé. Le mécanisme de communication central du programme est donné via une file d'attente qui contient des événements. La file d'attente est constamment interrogée pour vérifier les nouveaux événements. Une fois qu'un événement a été retiré du haut de la file d'attente, il doit être géré par un composant approprié du programme. Par conséquent, un flux de données de marché pourrait créer TickEvent s qui sont placés sur la file d'attente quand un nouveau prix de marché arrive. Un objet stratégie de génération de signal peut créer OrderEvent s qui doivent être envoyés à une maison de courtage. L'utilité d'un tel système est donnée par le fait qu'il n'a pas d'importance quel ordre ou types d'événements sont placés sur la file d'attente, car ils seront toujours correctement gérés par le bon composant dans le programme. En outre, différentes parties du programme peuvent être exécutées dans des threads distincts. Ce qui signifie qu'il n'y a jamais d'attente pour un composant particulier avant de traiter un autre. Ceci est extrêmement utile dans les situations de trading algorithmique où les gestionnaires de flux de données de marché et les générateurs de signaux de stratégie ont des caractéristiques de performances très différentes. La boucle commerciale principale est donnée par le pseudo code Python suivant: Comme nous l'avons indiqué ci dessus, le code s'exécute dans une boucle infinie. Tout d'abord, la file d'attente est interrogée pour récupérer un nouvel événement. Si la file d'attente est vide, la boucle redémarre simplement après une courte période de sommeil connue sous le nom de battement cardiaque. Si un événement est détecté, son type est évalué et le module concerné (la stratégie ou le gestionnaire d'exécution) est appelé à gérer l'événement et éventuellement à générer de nouveaux qui retournent dans la file d'attente. Les éléments de base que nous allons créer pour notre système commercial sont les suivants: Streaming Price Handler Cela permettra de garder une connexion longue durée ouverte aux serveurs OANDAs et d'envoyer des données tick (bidask) à travers la connexion pour tous les instruments qui ont été intéressés. Générateur de signaux de stratégie Cela prendra une séquence de tics et les utilisera pour générer des ordres de trading qui seront exécutés par le gestionnaire d'exécution. Execution Handler Prend un ensemble d'événements d'ordre puis les exécute aveuglément avec OANDA. Evénements Ces objets constituent les messages transmis dans la file d'attente des événements. Nous ne demandons que deux pour cette implémentation, à savoir TickEvent et OrderEvent. Point d'entrée principal Le point d'entrée principal comprend également la boucle commerciale qui interroge en continu la file d'attente de messages et distribue des messages au composant approprié. Cela est souvent appelé la boucle d'événements ou le gestionnaire d'événements. Nous allons maintenant discuter de la mise en œuvre du code en détail. Au bas de l'article est la liste complète de tous les fichiers de code source. Si vous les placez dans le même répertoire et exécutez python trading. py, vous commencerez à générer des ordres, en supposant que vous avez rempli votre identifiant de compte et votre jeton d'authentification de OANDA. Mise en œuvre de Python Il est de mauvaise pratique de stocker des mots de passe ou des clés d'authentification dans un codebase car vous ne pouvez jamais prédire qui sera éventuellement autorisé à accéder à un projet. Dans un système de production, nous stockerons ces informations d'identification en tant que variables d'environnement avec le système, puis nous les interrogerons chaque fois que le code sera redéployé. Cela garantit que les mots de passe et les jetons d'authentification ne sont jamais stockés dans un système de contrôle de version. Cependant, étant donné que nous sommes uniquement intéressés à la construction d'un système de négociation de jouets, et ne sont pas concernés par les détails de production dans cet article, nous allons plutôt séparer ces jetons d'authentification dans un fichier de paramètres. Dans le fichier de configuration settings. py suivant, nous avons un dictionnaire nommé ENVIRONMENTS qui stocke les points d'extrémité API pour l'API OANDA de flux de prix et l'API de négociation. Chaque sous dictionnaire contient trois points d'extrémité séparés: real. Pratique et sandbox. L'API de bac à sable sert uniquement à vérifier le code et à vérifier qu'il n'y a pas d'erreurs ou de bogues. Il n'a pas les garanties de disponibilité des API réelles ou de la pratique. La pratique API, en substance, fournit la capacité de commerce du papier. Autrement dit, il fournit toutes les fonctionnalités de l'API réelle sur un compte de simulation de pratique. L'API réelle est juste que c'est la négociation en direct Si vous utilisez ce point de terminaison dans votre code, il sera le commerce contre votre solde de compte en direct. ÊTRE EXTREMEMENT ATTENTIF IMPORTANT: Lors de la négociation contre la pratique API rappelez vous qu'un coût de transaction important, celui de l'impact sur le marché. N'est pas prise en considération. Étant donné qu'aucun métier n'est effectivement placé dans l'environnement, ce coût doit être comptabilisé d'une autre façon ailleurs dans un modèle d'impact sur le marché si vous souhaitez évaluer de façon réaliste les performances. Dans ce qui suit, nous utilisons le compte de pratique tel qu'indiqué par le paramètre DOMAIN. Nous avons besoin de deux dictionnaires distincts pour les domaines, chacun pour les composants d'API de streaming et de négociation. Enfin nous avons le ACCESSTOKEN et ACCOUNTID. Ive rempli les deux ci dessous avec des ID factices afin que vous devrez utiliser votre propre, qui peut être consulté à partir de la page compte OANDA: L'étape suivante consiste à définir les événements que la file d'attente utilisera pour aider tous les composants individuels de communiquer. Nous avons besoin de deux: TickEvent et OrderEvent. Le premier stocke des informations sur les données du marché des instruments comme le (meilleur) bidask et le temps de négociation. Le second est utilisé pour transmettre des ordres au gestionnaire d'exécution et contient ainsi l'instrument, le nombre d'unités à commercer, le type d'ordre (marché ou limite) et le côté (achat et vente). Pour établir le code des événements à l'épreuve du futur, nous allons créer une classe de base appelée Événement et que tous les événements héritent de celle ci. Le code est fourni ci dessous dans events. py: La prochaine classe que nous allons créer traitera la stratégie commerciale. Dans cette démo, nous allons créer une stratégie plutôt absurde qui reçoit simplement toutes les tiques du marché et à chaque 5ème tick aléatoirement achète ou vend 10 000 unités d'EURUSD. Il est évident que c'est une stratégie ridicule Cependant, il est fantastique pour les tests car il est facile de coder et de comprendre. Dans les futures entrées de journal, nous remplacerons ceci par quelque chose de beaucoup plus excitant qui (espérons le) transformera un profit. Le fichier strategy. py se trouve ci dessous. Permet de travailler à travers elle et de voir ce qui se passe. Tout d'abord, nous importons la bibliothèque aléatoire et l'objet OrderEvent de events. py. Nous avons besoin de la bibliothèque aléatoire afin de sélectionner un ordre aléatoire d'achat ou de vente. Nous avons besoin de OrderEvent car c'est ainsi que l'objet stratégie enverra des ordres à la file d'attente des événements, qui sera ensuite exécutée par le gestionnaire d'exécution. La classe TestRandomStrategy prend simplement l'instrument (dans ce cas, EURUSD), le nombre d'unités et la file d'attente des événements comme un ensemble de paramètres. Il crée alors un compteur de tiques qui est utilisé pour indiquer le nombre d'occurrences TickEvent qu'il a vues. La plupart des travaux se produisent dans la méthode calculatesignals qui prend simplement un événement, détermine s'il s'agit d'un TickEvent (sinon ignore) et incrémente le compteur de tics. Il vérifie ensuite si le compte est divisible par 5 et puis aléatoirement achète ou vend, avec un ordre de marché, le nombre spécifié d'unités. Ce n'est certainement pas la plus grande stratégie de négociation mondiale, mais elle sera plus que convenable pour nos tests d'API de courtage OANDA Le prochain composant est le gestionnaire d'exécution. Cette classe est chargée d'agir sur les instances OrderEvent et de faire des demandes au courtier (dans ce cas OANDA) d'une manière stupide. Autrement dit, il n'y a pas de gestion des risques ni de recouvrement de la construction du portefeuille. Le gestionnaire d'exécution exécutera tout simplement l'ordre qui lui a été donné. Nous devons transmettre toutes les informations d'authentification à la classe Execution, y compris le domaine (practice, real ou sandbox), le jeton d'accès et l'ID de compte. Nous créons alors une connexion sécurisée avec httplib. Un des Pythons construit dans les bibliothèques. La plupart du travail se produit dans executeorder. La méthode nécessite un événement comme paramètre. Il construit ensuite deux dictionnaires les en têtes et les params. Ces dictionnaires seront alors correctement codés (en partie par urllib, une autre bibliothèque Python) pour être envoyés comme une requête HTTP POST à ​​l'API OANDAs. Nous passons les paramètres d'en tête Content Type et Authorization, qui incluent nos informations d'authentification. En outre, nous encodons les paramètres, y compris l'instrument (EURUSD), les unités, le type d'ordre et le côté (buysell). Enfin, nous effectuons la demande et sauvegardons la réponse: La composante la plus complexe du système de négociation est l'objet StreamingForexPrices, qui gère les mises à jour des prix du marché d'OANDA. Il existe deux méthodes: connecttostream et streamtoqueue. La première méthode utilise la bibliothèque de requêtes Python pour se connecter à une socket en continu avec les en têtes et les paramètres appropriés. Les paramètres comprennent l'ID de compte et la liste d'instruments nécessaires qui doivent être écoutés pour les mises à jour (dans ce cas, il s'agit uniquement d'EURUSD). Notez la ligne suivante: Cela indique à la connexion à être diffusée et donc maintenu ouvert de manière longue. La deuxième méthode, streamtoqueue. Tente de se connecter au flux. Si la réponse n'est pas réussie (c'est à dire que le code de réponse n'est pas HTTP 200), alors nous retournons simplement et quittons. Si elle réussit, nous essayons de charger le paquet JSON renvoyé dans un dictionnaire Python. Enfin, nous convertissons le dictionnaire Python avec l'instrument, bidask et timestamp dans un TickEvent qui est envoyé à la file d'attente des événements: Nous avons maintenant tous les principaux composants en place. La dernière étape est de conclure tout ce que nous avons écrit jusqu'à présent dans un programme principal. L'objectif de ce fichier, connu sous le nom de trading. py. Est de créer deux threads distincts. Dont l'un exécute le gestionnaire de tarification et l'autre qui exécute le gestionnaire de négociation. Pourquoi avons nous besoin de deux fils distincts? Simplement, nous exécutons deux morceaux de code séparés, tous deux en cours d'exécution. Si nous devions créer un programme non threadé, alors la prise en streaming utilisée pour les mises à jour de prix ne reviendrait jamais jamais au chemin du code principal et donc nous n'effectuerions jamais réellement aucun trading. De la même façon, si nous exploitions la boucle commerciale (voir ci dessous), nous ne retournerons jamais le chemin d'écoulement vers le socket de streaming de prix. Nous avons donc besoin de plusieurs threads, un pour chaque composant, afin qu'ils puissent être exécutés indépendamment. Ils se communiquent tous les deux via la file d'attente des événements. Examinons cela un peu plus. Nous créons deux threads séparés avec les lignes suivantes: Nous transmettons le nom de la fonction ou de la méthode à l'argument de mot clé cible, puis passons un iterable (comme une liste ou un tuple) à l'argument de mot clé args, qui transmet alors ces arguments à la méthode effective . Finalement, nous commençons les deux threads avec les lignes suivantes: Ainsi, nous sommes en mesure d'exécuter deux segments de code, en boucle effectivement infinie, indépendamment, qui communiquent tous les deux via la file d'attente des événements. Notez que la bibliothèque de threading Python ne produit pas un véritable environnement multithread multi core en raison de l'implémentation CPython de Python et du Global Interpreter Lock (GIL). Si vous souhaitez en savoir plus sur le multithreading sur Python, consultez cet article. Examinons le reste du code en détail. Tout d'abord, nous importons toutes les bibliothèques nécessaires, y compris la file d'attente. Le filetage et le temps. Nous importons ensuite tous les fichiers de code ci dessus. Personnellement, je préfère mettre en majuscule tous les paramètres de configuration, ce qui est une habitude que j'ai pris de travailler avec Django Après que nous définissons la fonction commerciale, qui a été expliqué en Python pseudocode ci dessus. Une boucle infinie while est exécutée (alors que True:) qui interroge en continu depuis la file d'attente des événements et ne saute la boucle que si elle est trouvée vide. Si un événement est trouvé, il s'agit soit d'un TickEvent ou d'un OrderEvent, puis le composant approprié est appelé pour l'exécuter. Dans ce cas, il s'agit soit d'un gestionnaire de stratégie ou d'exécution. La boucle s'endort simplement pendant des secondes de pulsation (dans ce cas, 0,5 seconde) et continue. Enfin, nous définissons le point d'entrée principal du code dans la fonction principale. Il est bien commenté ci dessous, mais je vais résumer ici. En essence, nous instancions la file d'attente des événements et définissons les unités d'instruments. Nous créons ensuite la classe StreamingForexPrices de flux de prix puis le gestionnaire d'exécution Execution. Les deux reçoivent les détails d'authentification nécessaires fournis par OANDA lors de la création d'un compte. Nous créons ensuite l'instance TestRandomStrategy. Finalement, nous définissons les deux threads puis les démarrons: Pour exécuter le code, il suffit de placer tous les fichiers dans le même répertoire et d'appeler au terminal: Notez que pour arrêter le code à ce stade, Processus Python. Via Ctrl Z ou l'équivalent Ive n'a pas ajouté un fil supplémentaire à la poignée recherchant le sys. exit () qui serait nécessaire pour arrêter le code en toute sécurité. Un moyen possible d'arrêter le code sur une machine UbuntuLinux est de taper: Et ensuite passer la sortie de ce (un numéro de processus) dans la suivante: Où PROCESSID doit être remplacé par la sortie de pgrep. Notez que ce n'est pas particulièrement bonne pratique Dans les articles suivants, nous allons créer un mécanisme de stopstart plus sophistiqué qui fait usage de la supervision de processus Ubuntus afin d'avoir le système de négociation en cours d'exécution 247. La sortie après 30 secondes environ, selon le moment de Jour par rapport aux principales heures de négociation pour EURUSD, pour le code ci dessus, est donné ci dessous: Les cinq premières lignes montrent les données de la marque JSON retournées par OANDA avec les prix bidask. Par la suite, vous pouvez voir la sortie Exécuter l'ordre ainsi que la réponse JSON retournée par OANDA confirmant l'ouverture d'un commerce d'achat pour 10 000 unités d'EURUSD et le prix auquel il a été atteint. Cela continuera à fonctionner indéfiniment jusqu'à ce que vous tuez le programme avec une commande Ctrl Z ou similaire. Whats Next Dans les articles suivants, nous allons effectuer certaines améliorations nécessaires, y compris: Stratégies réelles Stratégies de forex appropriées qui génèrent des signaux rentables. Infrastructure de production implémentation de serveurs distants et 247 systèmes de trading surveillés, avec capacité stopstart. Gestion des portefeuilles et des risques Répartition des portefeuilles et des risques pour tous les ordres proposés de la stratégie. Stratégies multiples Construire un portefeuille de stratégies qui intègrent dans la gestion des risques overlay Comme avec les actions backtestter événementiel, nous avons également besoin de créer un module de backtesting forex. Cela nous permettra d'effectuer des recherches rapides et de faciliter le déploiement de stratégies. Forex Trading Diary 1 Forex Trading automatisé avec l'API OANDA J'ai déjà mentionné dans l'article QuantStart: 2014 en revue que je passerais une partie de l'écriture 2015 sur le commerce de forex automatisé. Étant donné que moi même habituellement effectuer des recherches sur les marchés d'actions et à terme, j'ai pensé qu'il serait amusant (et éducatif) d'écrire sur mes expériences d'entrer sur le marché des changes dans le style d'un journal. Chaque entrée de journal tentera de construire sur tous ceux avant, mais devrait également être relativement autonome. Dans cette première entrée du journal Ill être décrivant comment mettre en place un nouveau compte de courtage de pratique avec OANDA ainsi que la façon de créer un moteur de négociation multithread base événementielle qui peut exécuter automatiquement les métiers à la fois dans un cadre pratique et en direct. L'année dernière, nous avons passé beaucoup de temps à regarder le backtestter événementiel. Principalement pour les actions et les FNB. Celui que je présente ci dessous est orienté vers le forex et peut être utilisé pour le commerce de papier ou de commerce en direct. J'ai écrit toutes les instructions suivantes pour Ubuntu 14.04, mais ils devraient facilement traduire à Windows ou Mac OS X, en utilisant une distribution Python comme Anaconda. La seule bibliothèque supplémentaire utilisée pour le moteur de négoce Python est la bibliothèque de requêtes, nécessaire pour la communication HTTP avec l'API OANDA. Puisque c'est le premier poste directement sur le commerce de devises, et le code présenté ci dessous peut être directement adapté à un environnement commercial en direct, je tiens à présenter les avertissements suivants: Avertissement: Trading des devises étrangères sur la marge comporte un niveau élevé de risque, Et peut ne pas convenir à tous les investisseurs. Les performances passées ne représentent pas les résultats futurs. Le haut degré de levier peut travailler contre vous ainsi que pour vous. Avant de décider d'investir en devises, vous devriez considérer attentivement vos objectifs de placement, votre niveau d'expérience et votre appétit pour le risque. La possibilité existe que vous pourriez soutenir une perte de tout ou partie de votre investissement initial et donc vous ne devriez pas investir de l'argent que vous ne pouvez pas vous permettre de perdre. Vous devriez être conscient de tous les risques associés aux opérations de change, et demander conseil à un conseiller financier indépendant si vous avez des doutes. Ce logiciel est fourni tel quel et toute garantie expresse ou implicite, y compris, mais sans s'y limiter, les garanties implicites de qualité marchande et d'adéquation à un usage particulier, est exclue. En aucun cas, les régents ou contributeurs ne pourront être tenus responsables de dommages directs, indirects, accessoires, spéciaux, exemplaires ou consécutifs (y compris, mais sans s'y limiter, l'achat de biens ou de services de remplacement perte d'utilisation, de données ou de profits ou d'interruption d'activité ), Quelle qu'en soit la cause et quelle que soit la théorie de la responsabilité, contractuelle, stricte ou délictuelle (y compris la négligence ou autre) découlant de l'utilisation de ce logiciel, même si elle est avisée de la possibilité de tels dommages. Configuration d'un compte avec OANDA La première question qui vient à l'esprit est Pourquoi choisir OANDA. En bref, après un peu de Googling autour pour les courtiers forex qui avaient API, j'ai vu que OANDA avait récemment publié une API REST appropriée qui pourrait facilement être communiquée à partir de presque n'importe quelle langue d'une manière très simple. Après avoir lu la documentation de l'API de développeur. J'ai décidé de leur donner un essai, au moins avec un compte pratique. Pour être clair je n'ai pas de relation préalable ou existante avec OANDA et je suis seulement de fournir cette recommandation basée sur mon expérience limitée en jouant avec leur API de pratique et quelques brèves utilisation (pour le téléchargement de données de marché) alors qu'il était auparavant dans un fonds. Si quelqu'un a rencontré tout autre forex courtiers qui ont également une API similairement similaire alors je serais heureux de leur donner un coup d'oeil ainsi. Avant d'utiliser l'API, il est nécessaire de s'inscrire à un compte pratique. Pour ce faire, dirigez vous vers le lien d'inscription. Vous verrez l'écran suivant: Vous pourrez alors vous connecter avec vos identifiants de connexion. Veillez à sélectionner l'onglet fxTradePractice à partir de l'écran de connexion: une fois entré, vous devrez noter votre ID de compte. Il est répertorié sous l'en tête noir de Mes fonds en regard de Primaire. Le mien est un nombre à 7 chiffres. En outre, vous devrez également générer un jeton API personnel. Pour ce faire, cliquez sur Gérer l'accès à l'API sous l'onglet Autres actions en bas à gauche: À ce stade, vous serez en mesure de générer un jeton API. Vous aurez besoin de la clé pour une utilisation ultérieure, alors assurez vous de l'écrire aussi. Vous voudrez maintenant lancer l'application FXTrade Practice, qui nous permettra de voir les ordres exécutés et notre perte de gain (papier). Si vous utilisez un système Ubuntu, vous devez installer une version légèrement différente de Java. En particulier, la version Oracle de Java 8. Si vous ne faites pas cela, le simulateur pratique ne sera pas chargé à partir du navigateur. J'ai exécuté ces commandes sur mon système: Vous serez maintenant en mesure de lancer l'environnement commercial pratique. Revenez au tableau de bord d'OANDA et cliquez sur le lien Mise en évidence sur le lien vert mis en évidence. Une boîte de dialogue Java s'affiche pour vous demander si vous voulez l'exécuter. Cliquez sur Exécuter et l'outil fxTrade Practice sera chargé. Mine a manqué à un graphique de bougie de 15 minutes de EURUSD avec le panneau de devis sur la gauche: À ce stade, nous sommes prêts à commencer à concevoir et à coder notre système automatisé de forex contre l'API d'OANDA. Vue d'ensemble de l'architecture commerciale Si vous avez suivi la série de backtester événementielle pour les actions et les ETF que j'ai créés l'année dernière, vous serez conscient de la façon dont fonctionne un système de négociation événementielle. Pour ceux d'entre vous qui sont nouveaux dans le logiciel événementiel. Je suggère vivement de lire l'article afin de mieux comprendre comment ils fonctionnent. Essentiellement, l'ensemble du programme est exécuté dans une boucle infinte while qui ne se termine que lorsque le système de trading est coupé. Le mécanisme de communication central du programme est donné via une file d'attente qui contient des événements. La file d'attente est constamment interrogée pour vérifier les nouveaux événements. Une fois qu'un événement a été retiré du haut de la file d'attente, il doit être géré par un composant approprié du programme. Par conséquent, un flux de données de marché pourrait créer TickEvent s qui sont placés sur la file d'attente quand un nouveau prix de marché arrive. Un objet stratégie de génération de signal peut créer OrderEvent s qui doivent être envoyés à une maison de courtage. L'utilité d'un tel système est donnée par le fait qu'il n'a pas d'importance quel ordre ou types d'événements sont placés sur la file d'attente, car ils seront toujours correctement gérés par le bon composant au sein du programme. En outre, différentes parties du programme peuvent être exécutées dans des threads distincts. Ce qui signifie qu'il n'y a jamais d'attente pour un composant particulier avant de traiter un autre. Ceci est extrêmement utile dans des situations de trading algorithmique où les gestionnaires de flux de données de marché et les générateurs de signaux de stratégie ont des caractéristiques de performances très différentes. La boucle commerciale principale est donnée par le pseudo code Python suivant: Comme nous l'avons indiqué ci dessus, le code s'exécute dans une boucle infinie. Tout d'abord, la file d'attente est interrogée pour récupérer un nouvel événement. Si la file d'attente est vide, la boucle redémarre simplement après une courte période de sommeil connue sous le nom de battement cardiaque. Si un événement est détecté, son type est évalué et le module concerné (la stratégie ou le gestionnaire d'exécution) est appelé à gérer l'événement et éventuellement à générer de nouveaux qui retournent dans la file d'attente. Les éléments de base que nous allons créer pour notre système commercial sont les suivants: Streaming Price Handler Cela permettra de garder une connexion longue durée ouverte aux serveurs OANDAs et d'envoyer des données tick (bidask) à travers la connexion pour tous les instruments qui ont été intéressés. Générateur de signaux de stratégie Cela prendra une séquence de tics et les utilisera pour générer des ordres de trading qui seront exécutés par le gestionnaire d'exécution. Execution Handler Prend un ensemble d'événements d'ordre puis les exécute aveuglément avec OANDA. Evénements Ces objets constituent les messages transmis dans la file d'attente des événements. Nous n'avons besoin que de deux pour cette implémentation, à savoir TickEvent et OrderEvent. Point d'entrée principal Le point d'entrée principal comprend également la boucle commerciale qui interroge en continu la file d'attente de messages et distribue des messages au composant approprié. Cela est souvent appelé la boucle d'événements ou le gestionnaire d'événements. Nous allons maintenant discuter de la mise en œuvre du code en détail. Au bas de l'article est la liste complète de tous les fichiers de code source. Si vous les placez dans le même répertoire et exécutez python trading. py, vous commencerez à générer des ordres, en supposant que vous avez rempli votre identifiant de compte et votre jeton d'authentification de OANDA. Mise en œuvre de Python Il est de mauvaise pratique de stocker des mots de passe ou des clés d'authentification dans un codebase car vous ne pouvez jamais prédire qui sera éventuellement autorisé à accéder à un projet. Dans un système de production, nous stockerons ces informations d'identification en tant que variables d'environnement avec le système, puis nous les interrogerons chaque fois que le code sera redéployé. Cela garantit que les mots de passe et les jetons d'authentification ne sont jamais stockés dans un système de contrôle de version. However, since we are solely interested in building a toy trading system, and are not concerned with production details in this article, we will instead separate these auth tokens into a settings file. In the following settings. py configuration file we have a dictionary called ENVIRONMENTS which stores the API endpoints for both the OANDA price streaming API and the trading API. Each sub dictionary contains three separate API endpoints: real. practice and sandbox . The sandbox API is purely for testing code and for checking that there are no errors or bugs. It does not have the uptime guarantees of the real or practice APIs. The practice API, in essence, provides the ability to paper trade . That is, it provides all of the features of the real API on a simulated practice account. The real API is just that it is live trading If you use that endpoint in your code, it will trade against your live account balance. BE EXTREMELY CAREFUL IMPORTANT: When trading against the practice API remember that an important transaction cost, that of market impact . is not considered. Since no trades are actually being placed into the environment this cost must be accounted for in another way elsewhere using a market impact model if you wish to realistically assess performance. In the following we are using the practice account as given by the DOMAIN setting. We need two separate dictionaries for the domains, one each for the streaming and trading API components. Finally we have the ACCESSTOKEN and ACCOUNTID. Ive filled the two below with dummy IDs so you will need to utilise your own, which can be accessed from the OANDA account page: The next step is to define the events that the queue will use to help all of the individual components communicate. We need two: TickEvent and OrderEvent. The first stores information about instrument market data such as the (best) bidask and the trade time. The second is used to transmit orders to the execution handler and thus contains the instrument, the number of units to trade, the order type (market or limit) and the side (i. e. buy and sell). To future proof our events code we are going to create a base class called Event and have all events inherit from this. The code is provided below in events. py : The next class we are going to create will handle the trading strategy. In this demo we are going to create a rather nonsensical strategy that simply receives all of the market ticks and on every 5th tick randomly buys or sells 10,000 units of EURUSD. Clearly this is a ridiculous strategy However, it is fantastic for testing purposes because it is straightforward to code and understand. In future diary entries we will be replacing this with something significantly more exciting that will (hopefully) turn a profit The strategy. py file can be found below. Lets work through it and see whats going on. Firstly we import the random library and the OrderEvent object from events. py. We need the random lib in order to select a random buy or sell order. We need OrderEvent as this is how the strategy object will send orders to the events queue, which will later be executed by the execution handler. The TestRandomStrategy class simply takes the instrument (in this case EURUSD), the number of units and the events queue as a set of parameters. It then creates a ticks counter that is used to tell how many TickEvent instances it has seen. Most of the work occurs in the calculatesignals method, which simply takes an event, determines whether it is a TickEvent (otherwise ignore) and increments the tick counter. It then checks to see if the count is divisible by 5 and then randomly buys or sells, with a market order, the specified number of units. Its certainly not the worlds greatest trading strategy, but it will be more than suitable for our OANDA brokerage API testing purposes The next component is the execution handler . This class is tasked with acting upon OrderEvent instances and making requests to the broker (in this case OANDA) in a dumb fashion. That is, there is no risk management or potfolio construction overlay. The execution handler will simply execute any order that it has been given. We must pass all of the authentication information to the Execution class, including the domain (practice, real or sandbox), the access token and account ID. We then create a secure connection with httplib. one of Pythons built in libraries. Most of the work occurs in executeorder. The method requires an event as a parameter. It then constructs two dictionaries the headers and the params. These dictionaries will then be correctly encoded (partially by urllib. another Python library) to be sent as an HTTP POST request to OANDAs API. We pass the Content Type and Authorization header parameters, which include our authentication information. In addition we encode the parameters, which include the instrument (EURUSD), units, order type and side (buysell). Finally, we make the request and save the response: The most complex component of the trading system is the StreamingForexPrices object, which handles the market price updates from OANDA. There are two methods: connecttostream and streamtoqueue . The first method uses the Python requests library to connect to a streaming socket with the appropriate headers and parameters. The parameters include the Account ID and the necessary instrument list that should be listened to for updates (in this case it is only EURUSD). Note the following line: This tells the connection to be streamed and thus kept open in a long running manner. The second method, streamtoqueue. actually attempts to connect to the stream. If the response is not successful (i. e. the response code is not HTTP 200), then we simply return and exit. If it is successful we try to load the JSON packet returned into a Python dictionary. Finally, we convert the Python dictionary with the instrument, bidask and timestamp into a TickEvent that is sent to the events queue: We now have all of the major components in place. The final step is to wrap up everything we have written so far into a main program. The goal of this file, known as trading. py. is to create two separate threads . one of which runs the pricing handler and the other which runs the trading handler. Why do we need two separate threads Put simply, we are executing two separate pieces of code, both of which are continuously running. If we were to create a non threaded program, then the streaming socket used for the pricing updates would never ever release back to the main code path and hence we would never actually carry out any trading. Similarly, if we ran the trade loop (see below), we would never actually return the flow path to the price streaming socket. Hence we need multiple threads, one for each component, so that they can be carried out independently. They will both communicate to each other via the events queue. Lets examine this a bit futher. We create two separate threads with the following lines: We pass the function or method name to the target keyword argument and then pass an iterable (such as a list or tuple) to the args keyword argument, which then passes those arguments to the actual methodfunction. Finally we start both threads with the following lines: Thus we are able to run two, effectively infinite looping, code segments independently, which both communicate through the events queue. Note that the Python threading library does not produce a true multi core multithreaded environment due to the CPython implementation of Python and the Global Interpreter Lock (GIL). If you would like to read more about multithreading on Python, please take a look at this article . Lets examine the rest of the code in detail. Firstly we import all of the necessary libraries including Queue. threading and time. We then import all of the above code files. I personally prefer to capitalise any configuration settings, which is a habit I picked up from working with Django After that we define the trade function, which was explained in Python pseudocode above. An infinite while loop is carried out ( while True: ) that continuously polls from the events queue and only skips the loop if it is found empty. If an event is found then it is either a TickEvent or a OrderEvent and then the appropriate component is called to carry it out. In this case it is either a strategy or execution handler. The loop then simply sleeps for heartbeat seconds (in this case 0.5 seconds) and continues. Finally, we define the main entrypoint of the code in the main function. It is well commented below, but I will summarise here. In essence we instantiate the events queue and define the instrumentsunits. We then create the StreamingForexPrices price streaming class and then subsequently the Execution execution handler. Both receive the necessary authentication details that are given by OANDA when creating an account. We then create the TestRandomStrategy instance. Finally we define the two threads and then start them: To run the code you simply need to place all the files in the same directory and call the following at the terminal: Note that to stop the code at this stage requires a hard kill of the Python process . via Ctrl Z or equivalent Ive not added an additional thread to handle looking for the sys. exit() that would be needed to stop the code safely. A potential way to stop the code on a UbuntuLinux machine is to type: And then pass the output of this (a process number) into the following: Where PROCESSID must be replaced with the output of pgrep. Note that this is NOT particularly good practice In later articles we will be creating a more sophisticated stopstart mechanism that makes use of Ubuntus process supervision in order to have the trading system running 247. The output after 30 seconds or so, depending upon the time of day relative to the main trading hours for EURUSD, for the above code, is given below: The first five lines show the JSON tick data returned from OANDA with bidask prices. Subsequently you can see the Executing order output as well as the JSON response returned from OANDA confirming the opening of a buy trade for 10,000 units of EURUSD and the price it was achieved at. This will keep running indefinitely until you kill the program with a Ctrl Z command or similar. Whats Next In later articles we are going to carry out some much needed improvements, including: Real strategies Proper forex strategies that generate profitable signals. Production infrastructure Remote server implementation and 247 monitored trading system, with stopstart capability. Portfolio and risk management Portfolio and risk overlays for all suggested orders from the strategy. Multiple strategies Constructing a portfolio of strategies that integrate into the risk management overlay As with the equities event driven backtester, we also need to create a forex backtesting module. That will let us carry out rapid research and make it easier to deploy strategies. settings. py (remember to change ACCOUNTID and ACCESSTOKEN ):Pioneering in Tomorrows Trading How does it work Build Algorithms in a Browser IDE, Using Template Strategies and Free Data Design and test your strategy on our free data and when youre ready deploy it live to your brokerage. Code dans plusieurs langages de programmation et exploiter notre groupe de centaines de serveurs pour exécuter votre backtest pour analyser votre stratégie en actions, FX, CFD, options ou marchés à terme. QuantConnect est la prochaine révolution dans le commerce quantitatif, combinant le cloud computing et l'accès ouvert aux données. Une vitesse inégalée Utilisez notre batterie de serveurs pour des vitesses institutionnelles à partir de votre ordinateur de bureau. Vous pouvez itérer sur vos idées plus rapidement que vous avez jamais fait auparavant. Massive Data Library Nous fournissons une vaste bibliothèque de données de résolution de tiques de 400TB couvrant les actions américaines, les options, les contrats à terme, les fondamentaux, les CFD et le Forex depuis 1998. Exécution de classe mondiale Nos algorithmes de négociation en direct sont co situés à côté des serveurs de marché à Equinix (NY7) Pour une exécution rapide, résiliente et sûre sur les marchés. Avez vous de bonnes idées? Laissez le tester Démarrez votre algorithme Qualité professionnelle, Open Data Library Conception de stratégies avec notre bibliothèque de données soigneusement organisée, couvrant les marchés mondiaux, de la tique à la résolution quotidienne. Les données sont mises à jour presque quotidiennement afin que vous puissiez backtest sur les données les plus récentes possible, et la survie biais libre. Nous offrons des données sur les actions qui remontent à janvier 1998 pour chaque symbole échangé, totalisant plus de 29 000 actions. Le prix est fourni par QuantQuote. En outre, nous avons Morning Star Données fondamentales pour les plus populaires 8 000 symboles pour 900 indicateurs depuis 1998. Forex CFD CFD Nous proposons 100 paires de devises et 70 contrats CFD couvrant toutes les grandes économies fournies par FXCM et OANDA. Les données sont à la résolution de la tique, commence avril 2007 et est mise à jour quotidiennement. Nous offrons des contrats à terme et des données de cotation de janvier 2009 à aujourd'hui, pour chaque contrat négocié dans CME, COMEX et GLOBEX. Les données sont mises à jour chaque semaine et fournies par AlgoSeek. Nous proposons des opérations sur options et des cotations jusqu'à une résolution minime, pour chaque option négociée sur ORPA depuis 2007, couvrant des millions de contrats. Les données sont mises à jour dans les 48 heures et fournies par AlgoSeek. Collaboration en équipe Trouvez de nouveaux amis dans la communauté et collaborez avec notre fonctionnalité de codage d'équipe Partagez des projets et consultez leur code instantanément au fur et à mesure de leur frappe. Vous pouvez même accorder l'accès en direct et contrôler l'algorithme en direct ensemble. Utilisez notre messagerie instantanée interne pour trouver des membres potentiels de l'équipe pour unir leurs forces. Propriété intellectuelle sécurisée Notre objectif est de vous donner la meilleure plate forme de négociation algorithmique possible et de protéger votre précieuse propriété intellectuelle. Nous serons toujours un fournisseur d'infrastructure et de technologie d'abord. Lorsque vous êtes prêt pour le commerce en direct bien heureux vous aider à exécuter à travers votre courtier de choix. Exécuter par le biais de courtiers de premier plan Weve intégré avec les courtiers mondiaux de premier plan pour fournir la meilleure exécution et les frais les plus bas à la communauté. Stratégies entraînées par les événements Conception d'un algorithme ne pourrait pas être plus facile. Il n'y a que deux fonctions requises et nous nous occupons de tout le reste. Vous venez d'initialiser () votre stratégie et de gérer les événements de données que vous avez demandés. Vous pouvez créer de nouveaux indicateurs, classes, dossiers et fichiers avec un compilateur C complet basé sur le Web et un auto complet. Nous nous engageons à vous offrir la meilleure expérience de conception d'algorithmes possible. Tirer parti de votre potentiel Opt dans les utilisateurs peuvent avoir leurs stratégies présentées aux clients hedgefund dans un tableau de bord professionnel transparent de la stratégie. Stratégies sont validées par QuantConnects backtesting et live trading, vous donnant une neutralité tiers examen du code. Les hedgefunds intéressés peuvent vous contacter directement à travers QuantConnect pour vous offrir un emploi ou un financement pour votre stratégie. Joignez vous à notre communauté Nous avons l'une des plus importantes communautés commerciales quantitatives au monde, construisant, partageant et discutant des stratégies à travers notre communauté. Converse avec certains des esprits les plus brillants dans le monde que nous explorer de nouveaux domaines de la science, des mathématiques et des finances.


No comments:

Post a Comment