Forex Trading Diary 3 Ouvrir Sourcing Forex Trading System Dans l'entrée d'aujourd'hui du Forex Trading Diary, je veux discuter du plan à plus long terme pour le système de trading forex. En outre, je veux décrire comment Ive utilisé Pythons Decimal type de données pour rendre les calculs plus précis. À ce jour, nous avons expérimenté avec l'API OANDA Rest afin de voir comment il est comparé à l'API fournie par Interactive Brokers. Nous avons également vu comment ajouter dans un élément de réplication de portefeuille de base comme la première étape vers un système de backtesting événementielle. Ive a également eu quelques commentaires utiles sur les deux articles précédents (1 et 2), ce qui suggère que beaucoup d'entre vous sont désireux de changer et d'étendre le code vous mêmes. Open Sourcing Forex Trading System Pour les raisons exposées ci dessus, j'ai décidé d'ouvrir le système de trading forex. Qu'est ce que cela signifie? Cela signifie que tous les codes actuels et futurs seront disponibles gratuitement, sous une licence open source MIT libérale, sur le site de contrôle de version de Github à l'adresse suivante: githubmhallsmooreqsforex. Pour ceux d'entre vous qui ont utilisé git et Github avant, vous serez en mesure de git clone le repo et commencer à le modifier pour vos propres besoins. Le système automatisé de trading Forex QuantStart est maintenant open source sous une licence MIT libérale. Vous pouvez trouver le dernier code sur Github sous le référentiel qsforex à githubmhallsmooreqsforex. Pour ceux d'entre vous qui sont nouveaux au contrôle de version source, vous voudrez probablement lire sur la façon dont git (et le contrôle de version en général) fonctionne avec le fantastique livre ebook Pro Git. Il vaut la peine de passer un peu de temps à apprendre sur le contrôle des sources, car il vous permettra d'économiser une énorme quantité de futurs maux de tête si vous passez beaucoup de temps de programmation et de mise à jour des projets Le démarrage rapide pour un système Ubuntu est d'installer git: Un répertoire pour le projet qsforex à vivre et cloner le projet à partir du site Github comme suit: À ce stade, vous devrez créer un environnement virtuel dans lequel exécuter le code: Vous devrez alors installer les exigences (cela prendra Quelque temps): Enfin, vous aurez besoin de créer un lien symbolique dans votre environnement virtuel Python pour vous permettre de taper qsforex d'importation dans votre code (et l'exécuter): Comme je l'ai mentionné dans les entrées précédentes, vous devrez créer les variables d'environnement nécessaires Pour vos informations d'authentification OANDA. Veuillez consulter l'entrée 2 du journal pour obtenir des instructions sur la façon de procéder. S'il vous plaît prêter attention au README associé au repo, car il contient des instructions d'installation, une clause de non responsabilité et une garantie sur l'utilisation du code. Comme le logiciel est en mode alpha, ces instructions deviendront plus simples à mesure que le temps avance. En particulier, je vais essayer d'envelopper le projet dans un paquet Python afin qu'il puisse être facilement installé via pip. Si vous avez des questions sur la procédure d'installation, alors s'il vous plaît n'hésitez pas à m'envoyer un mail sur mikequantstart. Plan à plus long terme La philosophie du système de négociation de forex, comme avec le reste du site QuantStart, est d'essayer de simuler la vie réelle trading autant que possible dans notre backtesting. Cela implique d'inclure les détails qui sont souvent exclus de la recherche plus orientée backtesting situations. La latence, les pannes de serveurs, l'automatisation, la surveillance, les coûts de transaction réalistes seront tous inclus dans les modèles pour nous donner une bonne idée de la façon dont une stratégie est susceptible d'effectuer. Puisque nous aurons accès aux données de tick (bidask timestamps), nous serons en mesure d'intégrer l'écart dans les coûts de transaction. Nous pouvons également modéliser le glissement. Il est moins difficile de modéliser l'impact sur le marché, bien que cela soit moins préoccupant pour les petites transactions. En plus des coûts de transaction, nous voulons modéliser la gestion robuste du portefeuille en utilisant les chevauchements des risques et le dimensionnement des positions. Ainsi, ce qui est actuellement inclus dans le Forex Trading System à ce jour Event Driven Architecture Le système de trading forex a été conçu comme un système événementiel à partir du sol, car c'est comment un système commercial intraday sera mis en œuvre dans un environnement en direct . Streaming de prix Nous avons un objet de streaming de prix de base. Cela gère actuellement l'abonnement à une seule paire, mais nous pouvons facilement modifier ce pour souscrire à plusieurs paires de devises. Génération de signaux Nous pouvons intégrer des stratégies de négociation (basées directement sur les prix de ticks passés et actuels) à l'aide de l'objet Stratégie, qui crée des objets SignalEvent. Exécution des ordres Nous avons un système naïf d'exécution des commandes qui envoie aveuglément des ordres du portefeuille à OANDA. Par aveugle, je veux dire qu'il n'y a pas de gestion des risques ou de dimensionnement des positions, ni d'exécution algorithmique qui pourrait conduire à des coûts de transaction réduits. GBP Devise de base Pour garder les choses simples, Ive écrit seulement le système de la devise de base GBP. C'est peut être l'aspect le plus important à modifier étant donné combien d'entre vous auront des comptes de pratique libellés en USD, EUR, CAD, JPY, AUD et NZD GBPUSD Trading J'ai choisi le câble comme la paire de devises pour tester les objets Position et Portfolio avec. La gestion de plusieurs paires de devises est une étape importante. Cela impliquera une modification des calculs de position et de portefeuille. Gestion décimale Tout système de négociation de production doit gérer correctement les calculs de devises. En particulier, les valeurs de devise ne doivent pas être stockées comme des types de données à virgule flottante, car les erreurs d'arrondi s'accumuleront. S'il vous plaît voir cet article fantastique sur les représentations en virgule flottante pour plus de détails. LongShort Trading entre les entrées journal 2 et 3, j'ai ajouté la possibilité de courte une paire de devises (par opposition à seulement être en mesure d'aller longtemps). Essentiellement, il s'agit également d'un test unitaire. Gestion de portefeuille local À mon avis, effectuer un backtest qui gonfle la performance de la stratégie en raison d'hypothèses irréalistes est ennuyeux au mieux et extrêmement peu rentable au pire L'introduction d'un objet portfolio local qui reproduit les calculs OANDA signifie que nous pouvons vérifier nos calculs internes tout en pratiquant commerce . Ce qui nous donne une plus grande confiance lorsque nous utiliserons plus tard ce même objet portfolio pour le backtesting sur des données historiques. Tests unitaires pour PositionPortfolio Bien que je ne l'ai pas mentionné directement dans les entrées de journal 1 et 2, j'ai réellement écrit des tests unitaires pour les objets Portfolio et Position. Puisque ceux ci sont si cruciaux pour les calculs de la stratégie, il faut être extrêmement confiant qu'ils fonctionnent comme prévu. Un avantage supplémentaire de ces tests est qu'ils permettent de modifier le calcul sous jacent, de sorte que si tous les tests passent, nous pouvons être confiants que le système global continuera à se comporter comme prévu. À ce stade, le Forex Trading System manque des fonctionnalités suivantes: Manipulation de glissement Le système génère actuellement beaucoup de glissement en raison de la nature à haute fréquence des données de tick fournies par OANDA. Cela signifie que le solde du portefeuille calculé localement ne reflète pas le solde calculé par OANDA. Jusqu'à ce que la manipulation des événements corrects et le réglage du glissement soit effectué, cela signifie qu'un backtest ne reflètera pas correctement la réalité. Devises de base multiples Nous sommes actuellement limités à GBP. À tout le moins, nous devons inclure les principales devises USD, EUR, CAD, AUD, JPY et NZD. Plusieurs paires de devises De même, nous devons soutenir les principales paires de devises au delà du câble (GBPUSD). Il y a deux aspects à cela. La première consiste à gérer correctement les calculs lorsque ni la base ni le devis d'une paire de devises n'est égal à la devise de la devise du compte. Le deuxième aspect est de soutenir plusieurs positions afin que nous puissions échanger un portefeuille de paires de devises. Gestion des risques Beaucoup de backtests de recherche ignorent complètement la gestion des risques. Malheureusement, cela est généralement nécessaire pour la brièveté dans la description des règles d'une stratégie. En réalité, nous devrions utiliser une couverture de risque lors de la négociation, sinon il est extrêmement probable que nous allons subir une perte substantielle à un certain stade. Cela ne veut pas dire que la gestion des risques peut l'empêcher entièrement, mais elle la rend moins probable Optimisation de portefeuille Dans un contexte institutionnel, nous aurons un mandat d'investissement qui dictera un système de gestion de portefeuille robuste avec diverses règles d'allocation. Dans un contexte de détail, nous pourrions utiliser une approche de dimensionnement de position telle que le critère de Kelly pour maximiser notre taux de croissance composé à long terme. Stratégies robustes Jusqu'à présent, je n'ai démontré que des stratégies de jeux de hasard. Maintenant que nous commençons à créer un système de trading forex intraday fiable, nous devrions commencer à mettre en œuvre des stratégies plus intéressantes. Les futures entrées du journal se concentreront sur des stratégies tirées d'un mélange de filtres d'indicateurs techniques ainsi que de modèles de séries chronologiques et de techniques d'apprentissage automatique. Déploiement à distance Puisque nous sommes potentiellement intéressés à négocier 24 heures (au moins pendant la semaine), nous avons besoin d'une configuration plus sophistiquée que d'exécuter le backtestter sur une machine desktoplaptop locale à la maison. Il est vital que nous créions un déploiement robuste de serveur distant de notre système avec une redondance et une surveillance appropriées. Historique Backtesting Nous avons construit l'objet Portfolio pour nous permettre d'effectuer un backtesting réaliste. À ce stade, nous manquons un système de stockage de données historiques. Dans les articles suivants, nous nous pencherons sur l'obtention de données historiques et la stocker dans une base de données appropriée, comme HDF5. Trade Database Nous souhaitons finalement stocker nos métiers vivants dans notre propre base de données. Cela nous permettra d'effectuer nos propres analyses sur les données de trading direct. Une bonne recommandation pour une base de données relationnelle serait PostgreSQL ou MySQL. Surveillance et haute disponibilité Étant donné que nous envisageons un système intraday à haute fréquence, nous devons mettre en place une surveillance complète et une redondance de haute disponibilité. Cela signifie que l'utilisation du processeur, l'utilisation du disque, l'IO réseau, la latence et la vérification que tous les scripts périodiques sont configurés pour continuer à fonctionner. En outre, nous avons besoin d'une stratégie de sauvegarde et de restauration. Demandez vous ce que les plans de sauvegarde que vous auriez en place si vous aviez de grandes positions ouvertes, dans un marché volatile, et votre serveur est mort soudainement. Croyez moi, il se produit Intégration multiple de BrokerFIX En ce moment nous sommes fortement couplés au courtier d'OANDA. Comme je l'ai dit, c'est simplement parce que je suis tombé sur leur API et a trouvé qu'il s'agissait d'une offre moderne. Il ya beaucoup d'autres courtiers là bas, dont beaucoup soutiennent le protocole FIX. L'ajout d'une fonction FIX augmenterait le nombre de courtiers pouvant être utilisés avec le système. GUI Control and Reporting À l'heure actuelle, le système est complètement consolecommand ligne basée. À tout le moins, nous aurons besoin de quelques graphiques de base pour afficher les résultats de backtest. Un système plus sophistiqué intégrera des statistiques sommaires sur les métiers, les indicateurs de performance au niveau de la stratégie ainsi que la performance globale du portefeuille. Cette interface peut être mise en œuvre à l'aide d'un système de fenêtrage multiplate forme tel que Qt ou Tkinter. Il pourrait également être présenté en utilisant un front end basé sur le Web, en utilisant un cadre web tel que Django. Comme on peut le voir, beaucoup de fonctionnalités restent sur la feuille de route. Cela dit, chaque nouvelle entrée dans le journal (et les contributions potentielles de la communauté) permettront de faire avancer le projet. Types de données décimales Maintenant que nous avons discuté du plan à plus long terme, je veux présenter certains des changements que j'ai apporté au code depuis l'entrée du journal 2. En particulier, je veux décrire comment j'ai modifié le code pour gérer les données décimales, Type au lieu d'utiliser le stockage en virgule flottante. Il s'agit d'un changement extrêmement important puisque les représentations en virgule flottante constituent une source importante d'erreurs à long terme dans les systèmes de gestion de portefeuille et d'ordre. Python supporte nativement les représentations décimales avec une précision arbitraire. La fonctionnalité est contenue dans la bibliothèque décimale. En particulier, nous devons modifier chaque valeur qui apparaît dans un calcul de position à un type de données décimal. Cela comprend les unités, l'exposition, les pépins, le bénéfice et le pourcentage de profit. Nous nous assurons ainsi que nous contrôlons totalement la façon dont les questions d'arrondissement sont traitées lorsque l'on traite avec des représentations monétaires qui ont deux décimales de précision. En particulier, nous devons choisir la méthode d'arrondissement. Python supporte quelques types différents, mais nous allons aller avec ROUNDHALFDOWN. Qui arrondit à l'entier le plus proche avec les liens allant vers zéro. Voici un exemple de la façon dont le code est modifié pour traiter les types de données décimales à partir de leurs précédentes représentations en virgule flottante. Voici une liste de position. py: Notez que nous devons fournir à Decimal un argument de chaîne, plutôt qu'un argument de virgule flottante. C'est parce qu'une chaîne spécifie précisément la précision de la valeur, alors qu'un type de virgule flottante ne le sera pas. Notez également que lorsque nous commencerons à stocker nos métiers dans une base de données relationnelle (comme décrit ci dessus dans la feuille de route), nous devrons nous assurer d'utiliser à nouveau le type de données correct. PostgreSQL et MySQL prennent en charge une représentation décimale. Il est essentiel que nous utilisions ces types de données lorsque nous créons notre schéma de base de données, sinon nous allons rencontrer des erreurs d'arrondi qui sont extrêmement difficiles à diagnostiquer. Pour ceux qui sont intéressés à une discussion plus approfondie de ces questions, en mathématiques et en informatique, le Objet de Numerical Analysis couvre les questions de stockage en virgule flottante, parmi de nombreux autres sujets intéressants. Dans les entrées du journal suivant, nous allons discuter de la façon dont j'ai appliqué les tests unitaires au code et comment nous pouvons étendre le logiciel à plus de paires de devises en modifiant les calculs de position. Full Python Code Comme le code source complet pour le projet est maintenant open source, sous une licence MIT. Il peut toujours être trouvé à githubmhallsmooreqsforex. Avec la documentation jointe. Si vous souhaitez lire les autres entrées de la série, s'il vous plaît suivez les liens ci dessous: Pionnier dans Tomorrows Trading Comment fonctionne t il Construire des algorithmes dans un navigateur IDE, en utilisant des stratégies de modèle et Free Data Design et tester votre stratégie sur nos données libres et Lorsque vous êtes prêt à le déployer en direct à votre courtage. 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