Identifiant   Mot de passe       Oublie mot de passe?  Oublie login?  Creer un compte

Trading Automatique

Coder plus... pour gagner plus!

Forum Trading Auto

by nvitale
Mar.15.10 12:48:02
by madjes
Mar.14.10 21:16:57
by pensera
Mar.14.10 10:33:33
by nvitale
Mar.11.10 21:08:44
by nvitale
Mar.10.10 17:08:38
by nvitale
Mar.08.10 23:27:41
Animé par JoomlaMe
Trading Algorithmique et Quantitatif
Apprendre le trading algorithmique - Partie 3 Envoyer

 

Voici  le dernier volet mais pas le moindre de cette série concernant l'apprentissage du trading quantitatif / algorithmique par les livres (extrait traduit et complété du blog Quantivity)

 

Partie 1 :  Aperçu de la finance quantitative
Partie 2 :  Les fondamentaux des mathématiques financières

Partie 3 :  Modélisation et analyses mathématiques financières modernes

 

Cette troisième partie se concentre sur l'analyse et la modélisation financière en considérant que le lecteur a une bonne compréhension des mathématiques financières grâce à la partie 2 et un aperçu général du trading systématique et quantitatif grâce à la partie 1. Après cela, vous devriez être capable à la fois de construire des systèmes de trading intéressants et de comprendre la dynamique des microstructures qui dirige le market making moderne (sell side) et le trading de blocs (buy side).

 

Commençons par une introduction au séries financières, à la dynamique des actifs, à la volatilité et la modélisation des prédictions :

 

Continuons par la théorie moderne des portefeuilles et l'ingénierie financière :

 

Puis la volatilité pour les options et la corrélation/dispersion pour l'arbitrage :

 

Enfin, étudions la haute fréquence et les microstructures du marché pour appréhender les bases du sell et buy side moderne :

 

Voilà, vous pouvez dès à présent vous plonger dans les publications scientifiques actuelles pour en savoir plus.

 
Apprendre le trading algorithmique - Partie 2 Envoyer


Après avoir eu un aperçu sur la finance quantitative dans la première partie, nous continuons notre apprentissage du trading algorithmique avec une nouvelle partie plus technique toujours tirée du blog Quantivity.

Partie 1 :  Aperçu de la finance quantitative
Partie 2 :  Les fondamentaux des mathématiques financières

Partie 3 :  Modélisation et analyses mathématiques financières modernes

Cette deuxième partie se concentre sur les disciplines entremêlées qui sont à la base des mathématiques financières modernes et dont la connaissance est donc généralement assumée par les professionnels et la littérature actuelle.

La partie 3 réutilisera ces connaissances pour se spécialiser sur la modélisation et analyse financière qui est le domaine nous intéressant ici au final.

Pour commencer, voici une liste de livres donnant de solides bases sur les théories économétriques, en insistant particulièrement sur les séries temporelles (assumant une connaissance solide an algèbre linéaire et matrix)

Time Series Analysis, par Hamilton: livre classique sur les séries temporelles économétriques
Econometric Analysis, par Greene: livre classique sur les théories économétriques

 

Puis creusons les notions de filtrage et de vaguelettes :

Wavelet Methods for Time Series Analysis, par Percival et Walden: ouvrage standard sur les vaguelettes
An Introduction to Wavelets and Other Filtering Methods in Finance and Economics, par Gençay, Selçuk, et Whitcher: filtrage et vaguelettes appliqués la finance et l'économie

 

Explorez les notions de modern statistical / machine learning pour approcher l'intelligence artificielle:

Artificial Intelligence: A Modern Approach, par Russell et Norvig: introduction classique à l'Intelligence Artificielle standard
Apprentissage Artificiel : Concepts et Algorithmes, par Antoine Cornuéjols et Laurent Miclet : ouvrage français de référence (merci npernot)
The Elements of Statistical Learning, par Hastie, Tibshirani, and Friedman: apprentissage standard et statistique intermédiaire
Pattern Recognition and Machine Learning,par Bishop: intermediate classification and learning
Pattern Classification, par Duda: introduction standard à la classification

 

Voici des références concernant l'optimisation mathématique :

* Linear and Nonlinear Programming, par Luenberger: introduction standard à l'optimisation
* Nonlinear Programming, par Bazaraa et al.: optimisation standard non-linéaire
* Convex Optimization, par Boyd et Vandenberghe: optimisation standard convexe

 

Finalement, pour ceux qui sont intéressés par les options et vol, intéressez vous aux calculs stochastiques modernes :

Financial Calculus, par Baxter and Rennie: introduction plaisante et intuitive
Stochastic Calculus for Finance I
, par Shreve: une introduction douce via les binomiales
Stochastic Calculus for Finance II, par Shreve: une introduction douce en temps continue

 

Ne manquez pas la partie 3 qui partira de ces connaissances pour rentrez dans le vif du sujet...

 
Apprendre le trading algorithmique - Partie 1 Envoyer

 

Comment acquérir les connaissances pour se mettre au trading algorithmique? Voici une question que beaucoup se posent mais qui reste sans réponse à cause de l'aura de mystère qui entoure cette pratique pourtant désormais fortement répandue. Jusqu'à présent la réponse était d'acquérir les connaissances académiques classiques puis de travailler avec un spécialiste du métier et d'en apprendre ainsi toutes ses ficelles.


Pourtant, à bien y chercher, nous pouvons trouver de nombreuses références permettant de pénétrer le milieu. Nous allons donc faire l'inventaire dans une série de 3 articles des livres qui vous permettront d'acquérir les connaissances nécessaires à ce domaine. Cette liste est tirée du blog Quantivity pour la plupart des références et sera complétée au fur et à mesure par quelques livres manquants que j'ai trouvé intéressant.


Partie 1 :  Aperçu de la finance quantitative
Partie 2 :  Les fondamentaux des mathématiques financières

Partie 3 :  Modélisation et analyses mathématiques financières modernes


Les lecteurs habitués au trading systématique et quantitatif pourront se passer de la partie 1 pour attaquer directement le vif du sujet avec la partie 2. Bien entendu la plupart des ouvrages sont en langues anglaises ce qui posera peut être un problème à certains... auquels je conseillerais l'apprentissage de l'anglais comme exercice préalable et indispensable.

Commençons par des classiques académiques avec la finance comportementale.

Reminiscences of a Stock Operator, par Lefèvre: une introduction classique aux spéculateurs par Livermore. En version françaises: Mémoires d'un spéculateur.
When Genius Failed, par Lowenstein: récit populaire du fiasco de LTCM
Predictably Irrational, par Ariely: une introduction populaire de l'économie comportementale
Behavioral Investing, par Montier: synthèse de sagesse commune

Plongeons nous ensuite dans le trading systématique et les systèmes de trading (entrées, sorties, conservation, les paris avec Kelly, money management, etc), avec un  focus sur les concepts (plutôt que la mécanique qui est un peu daté) :

Trade Your Way to Financial Freedom, par Tharp: une introduction standard au trading à destination des particuliers, tout en ignorant le titre un peu ridicule...
Mathematics of Money Management, par Vince: une introduction standard au money management à destination eds particuliers
Intermarket Trading Strategies, par Katsanos: un évantail de stratégies de trading
Advanced Trading Rules, par Acar et Satchell:  étude de stratégies de trading
Applied Quantitative Methods for Trading and Investment, par Dunis et al: étude de stratégies de trading (incluant un brin d'arbitrage statistique)

Enfin, pour finir, intéressez vous un peu à l'Analyse Technique en gardant un oeuil critique tout en y reconnaissant le prédécesseur du trading algorithmque moderne. Certaines idées empiriques transmises par l'analyse technique sont reprises et élargies par les mathématiques financières modernes et de la microstructure des marchés comme les moyennes mobiles, les convolutions/filtrages, les indicateurs comportementaux (sur-vendus/sous-vendus), les moments dérivés (momentum et accélération, etc). Pour cette raison, malgré une liste astronomique d'ouvrage, une seule référence faisant autorité vous est proposée :


Technical Analysis from A to Z, de Achelis: le texte de référence standard du domaine


A bientot pour la suite de notre étude avec les fondamentaux des mathématiques financières.

 
Trading avec des algorithmes génétiques Envoyer


Voici la traduction d'un article intéressant d'Andrew du site TheGeneticTrader qui s'est lancé dans un projet de trading avec algorithme génétique. Ne soyez pas dissuadé par les morceaux de codes documentant l'article, car le texte se suffit à lui même.

J'ai rencontré il y a un couple de semaines un ami de longue date qui m'a raconté qu'il s'intéressait au trading et plus particulièrement aux paris financiers (financial spread betting) et aux possibilités d'en faire de l'argent puisqu'il connaissait des gens qui en vivaient. Je dois avouer que j'ai souvent pensé qu'il était possible d'utiliser des logiciels pour faire de l'argent sur les marchés, mais je n'avais pas réalisé encore que les paris financiers offraient une entrée à faible coût (mais haut risque...).

Cela semble assez évident mais vous devriez être gagnant si vous gagnez plus sur vos paris gagnants que ce que vous perdez sur les perdants, même si cela signifie d'être plus souvent perdant que gagnants. L'accent devrait donc être mis plus sur le gain moyen que le pourcentage de gains et de pertes. Comme cela est expliqué dans tous les livres, le plus grand danger du trader est ses émotions qui le poussent à couper trop vite ses positions gagnantes et à pyramider ses pertes pour essayer de se rattraper.

Utiliser des logiciels devrait donc enlever la part d'émotion du trading permettant de suivre à la lettre son plan de trading. J'ai donc commencé à écrire des programmes en Scheme pour générer un ordre au marché pour un paris sur le FTSE100 pour le prochain jour en se basant sur les données du précédent. Voici un exemple des mouvements journaliers :

undefined


Le FTSE est une cible idéale pour le pari financier parce qu'il a de larges mouvements journaliers et que les spreads offerts par la plupart des brokers sont très faibles (par exemple IG offre seulement 2 points) et que vous pouvez avoir un stop placé à seulement 30 points de distance ce qui signifie que l'on peut placer des paris à très faible prix.

L'ordre pourrait dire : Buy à 4280 et Stop à 30 points, pas de limites et £1 par point. Si le marché est plus bas que 4280 a n'importe quel moment de la journée, votre ordre sera exécuté. pour chaque point que le marché fait vers le haut, vous gagnez un pound. Si le marché bouge ensuite dans la direction opposée, vous perdrez £1 pour chaque point jusqu'à ce que le stop de 30 points soit atteint et votre ordre fermé avec une perte sèche de 30 pounds. Si par contre, le marché a progressé de 100 points vous serez presque plus riches de 100 pounds (la différence étant le spread prélevé).

La première tâche était donc de construire un simulateur et d'obtenir des données historiques intraday, minutes par minutes et ce sur 3 mois. Le simulateur prends une liste d'ordres et les exécute sur un jour particulier pour calculer le profit ou pertes pour chaque ordre. A l'intérieur de cela, le simulateur fait appel à une fonction qui indique l'ordre à passer en fonction des statistiques du jour précédent. La profitabilité journalière et hebdomadaire est ensuite calculée pour la stratégie en cours afin de décider si elle est gagnante ou pas. Vous pouvez ensuite utiliser cette stratégie pour générer des ordres pour le jour suivant, c'est à dire demain avec l'espérance qe=ue 'on gagnera plus que ce que l'on perdra.

En utilisant le simulateur, vous pouvez essayer des stratégies que vous pensez qu'elles puissent fonctionner. En voilà une qui n'est pas mauvaise :

 

;; Stats used by strategy function
(define-type stats
prev-open
prev-close
prev-high
prev-low
)

;; A very simple but surprisingly effective strategy
(define (simple-strategy stats)
(let ((gain (- (stats-prev-close stats) (stats-prev-open stats)))
(range (- (stats-prev-high stats) (stats-prev-low stats)))
(mid (/ (+ (stats-prev-high stats) (stats-prev-low stats)) 2)))
(cond
((> gain 10) (list (make-order - (+ mid 5) 30 0 1.0)))
(else (list (make-order + (+ mid 10) 30 0 1.0))))))


Le simulateur montre que cette stratégie très simple génère autours de 500 points de profits sur les trois mois backtestés (nb: les performances passées ne sont pas des garanties des performances futures). Le faiseur d'ordre donne la direction (+ pour buy et - pour sell), la valeur de l'ouverture pour l'ordre limite, le take profit, le stop et le levier. Notez que la seule entrée que prends la stratégie est l'ouverture du jours précédent, sa cloture, son plus bas et son plus haut. La stratégie marche sur la base que si le FTSE ferme en hausse un jour, il est probable qu'il ferme perdant le lendemain. Evidemment ce n'est pas une lois universelle qui se révellera d'ailleurs souvent fausse mais quand la prédiction est fausse on perd 30 points tandis qu'on en gagne jusqu'à 100 et plus en cas de succès.

Grâce à de l'analyse chartiste classique et en calculant par ordinateurs quelques valeurs optimales, j'ai créé une variation de la règle précédente qui parvenait à obtenir une moyenne de 1000 points de profits pour les données historiques que je possédais mais je n'avais aucun moyen de savoir si c'était optimal ou pas


Algorithmes génétiques


La programmation génétique est une technique permettant de faire évoluer les programmes pour résoudre un problème. Notre souhait est d'obtenir une stratégie de trading en créant des fragments de programme qui se reproduisent et mutent avec le temps tout en étant évalué par une fonction de "fitness" qui permet de supprimer les fragments les moins performants et encourage la reproduction des plus performants. Vous devriez donc comprendre à présent d'où vient le terme de programmation génétique. Dans notre cas, la fonction de "fitness" est le simulateur dont nous avons précédemment parlé : le profit total après les trois mois de test et tout ce qui compte. Si vous faites un bon profit vous pouvez rester et vous reproduire, si vous ne faites pas de profits vous êtes éliminés. La reproduction (croisement) prends des éléments de manière aléatoire des deux parents pour les recombiner, tandis que la mutation modifie aléatoirement un des élément de l'algorithme muté pour en produire un légèrement différent. Après plusieurs générations, vous obtenez une solution optimale au problème que vous essayez de résoudre.

Scheme est le langage parfait pour la programmation génétique car :

  1. Vous pouvez modifier facilement le code en manipulant des listes,
  2. Vous pouvez évaluer votre nouveau code avec eval.

 

Donc pour résoudre notre problème, nous avons besoin d'un 'trader' :

(define-type trader
dir-func
start-func
stop-func
limit-func
profit)



Notre trader est basiquement une collection d'expressions qui sont évaluées pour produire les données nécessaires aux placement des ordres. La valeur "profit" permet de suivre quelles sont les traders à succès.


Il y a une population de traders qui existent dans une liste et sont initialisées avec des expressions aléatoires  :

(define (pick-from lst)
(list-ref lst (random-integer (length lst))))

(define (get-random-var)
(pick-from '(o c h l g r m)))

(define (get-random-constant x)
(let ((r (- x (random-integer (* x 2)))))
(if (= r 0) (get-random-constant x) r))) ;; Don't want any divide by zero errors

(define (make-random-trader)
(make-trader (pick-from '(+ -)) (get-mutated-term (get-random-var)) (get-mutated-term (get-random-constant 100)) (get-mutated-term (get-random-constant 100)) 0))


(define (initialise-traders num)
(let ((traders '()))
(let nxt ((x 0))
(if (< x num)
(begin
(set! traders (cons (make-random-trader) traders))
(nxt (+ x 1))
)))
traders))

 

"Initialise-traders" crée la population de taille "num" en utilisant la fonction "make-random-trader". Les expressions sont basées sur des constantes aléatoires et des variables aléatoires qui sont o - ouverture d'hier, c - clôture d'hier, h - plus haut d'hier, etc. Une fonction utile prend des éléments d'une certaine liste de manière aléatoire.

Il faut noter que des études ont tout de même montré qu'il était utile d'initialiser la population avec certains bons spécimens connus comme la simple stratégie que nous avons précédemment évoqué.

Reproduction et Mutation

 

La fonction suivante permet le croisement (reproduction) de deux traders en sélectionnant des caractéristiques de chacun d'eux et en additionnant ensuite les mutations :

 

(define (breed t1 t2)
;; Create child from parents
(let ((t (make-trader
(pick-from (list (trader-dir-func t1) (trader-dir-func t2)))
(pick-from (list (trader-start-func t1) (trader-start-func t2)))
(pick-from (list (trader-stop-func t1) (trader-stop-func t2)))
(pick-from (list (trader-limit-func t1) (trader-limit-func t2)))
0 )))

;; Add mutation
(let ((r (random-integer 5))) ;; what to modify
(cond
((= r 1) (trader-dir-func-set! t (mutate (trader-dir-func t))))
((= r 2) (trader-start-func-set! t (mutate (trader-start-func t))))
((= r 3) (trader-stop-func-set! t (mutate (trader-stop-func t))))
((= r 4) (trader-limit-func-set! t (mutate (trader-limit-func t))))))
t))

 

La sélection des traders pour mutation est faite dans cette fonction :

 

(define (mutate-list l)
(pick-from (list
(map (lambda (x)
(if (> (random-integer 10) 2) (mutate x) x))
l)
(simplify-list l))))

(define (get-mutated-term t)
(pick-from (list
(get-random-constant 100)
(get-random-var)
`(+ ,t ,(get-random-constant 100))
`(- ,t ,(get-random-var))
`(* ,t ,(get-random-constant 100))
`(/ ,t ,(get-random-var))
`(if (> ,t ,(get-random-constant 100)) ,t ,(get-random-var)))))

(define (mutate f)
(cond
((list? f) (mutate-list f))
((number? f) (pick-from (list (get-mutated-term f) (+ f (get-random-constant 10)))))
((or (eq? f 'o) (eq? f 'c) (eq? f 'h) (eq? f 'l) (eq? f 'g) (eq? f 'r) (eq? f 'm)) (get-mutated-term f)) ;; Variable
((or (eq? f '+) (eq? f '-)) (pick-from (list '- '+ `(if (> ,(get-random-var) ,(get-random-constant 100)) + -))))
((or (eq? f '*) (eq? f '/)) (pick-from '(+ - / *))) ;; Arithmetic operator
((or (eq? f '>) (eq? f '<) (eq? f '=)) (pick-from '(> < =))) ;; Logical operator
(else f))) ;; No mutation - don't know what to do<


La fonction clé ici est "mutate" qui prends le terme d'une expression et la mute en utilisant "get-mutated-term".

Le reste du code s'occupe de maintenir la population du réservoir de traders en évaluant la profitabilité des membres et ensuite supprimant les moins profitables et reproduisant ce qui le sont le plus.

Les résultats


Le simple exemple de ci dessus parvenait à produire un profit de 509 points sur 3 mois de données historiques, tandis que le trader généré génétiquement est parvenu à produire 1469 points de profits! Mes efforts manuels pour optimiser le trader simple m'ont permis d'atteindre les 1100 points, soit 30% de moins que le modèle génétique.

Par la suite, j'ai étendu les données disponibles aux traders par une moyenne mobile longue et courte ainsi que par les gains du Dow Jones industrial Average. J'ai ré exécuté l'algorithme de sélection génétique pour obtenir cette fois ci un trader avec un profit de 1700 points sur ces trois mois, mais qui curieusement n'utilisait pas les données du Dow Jones.

J'ai ouvert un blog pour documenter la suite de mes efforts dans cette aventure et mes avancées : http://www.thegenetictrader.com

Note de trading Automatique:  Attention toutefois à la sur optimisation...

Traduction : Nicolas Vitale

 
Multi Stratégies Trading et régimes de marchés Envoyer

 

Voici la traduction d'un post de Tito Ingargiola du blog "Hack the market" dont des articles ont déjà été traduits sur le site (cf la série intitulée le miroir aux alouettes de l'optimisation, l'article Rassembler les pièces d'un système de trading algorithmique et le spectre des fréquences de trading). Tito Ingargiola a décidé de quitter en 2005 sa position de spécialiste en technologie a Wall Street pour créer Puppetmaster Trading et poursuivre ainsi à temps plein son intérêt croissant pour le trading algorithmique.

Post Original: multi strategy trading with regimes

L'un des défis du trading algorithmique est que même s'il y a beaucoup d'intérêt pour le domaine, ceux qui l'utilisent ne sont généralement pas diserts sur leurs observations. Les universitaires se concentrent plutôt sur des choses qui ne sont souvent pas immédiatement exploitables, ou quand ils pourraient l'être, semblent toujours monter un hedge-fund en parallèle en publiant des graphiques colorés sur la façon dont les marchés se «comportent».

Même s'il est ardu de trouver des bonnes choses, il est nécessaire de chercher car il y a toujours des informations et des idées que l'on peut effectivement retenir et utiliser. Il y a quelques semaines j'étais en train de formaliser la fonction d'espérance de profit d'un algorithme que je suis en train de développer et je souhaitais voire ce que les gens avaient écrit sur le sujet. J'ai donc entré "définir une fonction d'espérance de profit pour un algorithme" dans google et j'ai été agréablement surpris de trouver un article de recherche intitulé ‘Multi-strategy trading utilizing market regimes’ (trading multi-stratégie utilisant les régimes de marché) par Mlnarik, Ramamoorthy et Savani. Ca ne couvre pas directement le sujet que je recherchais mais aborde à la place à des sujets auxquels je m'intéressais depuis un moment.

  • Le traitement d'une stratégie comme un instrument à part entière
  • Composer des portefeuilles comprenant des stratégies
  • Utilisation de techniques de commutation par régimes pour gérer les portefeuilles de stratégies


Dans ce post, je vais brièvement passer en revue leur article, illustrer comment on peut facilement modéliser les stratégies de manière pertinente en utilisant la stratégie "modèle objet" que j'ai précédemment décris au travers d'un exemple, et conclure par quelques réflexions sur la façon dont ces types de stratégies pourraient être mises en œuvre et exploitées davantage.

«Trading multi-stratégie en utilisant les régimes de marché" par les Mlnarik, Ramamoorthy et Savani


Leur article commence ainsi:

"Cet article examine le problème de l'allocation dynamique de capital à un portefeuille de stratégies de trading. La répartition doit être robuste, et le capital affecté à une stratégie de trading devrait refléter la confiance dans le bénéfice prévu que la stratégie fera dans les conditions actuelles du marché.

Des bonnes stratégies de trading exploitent des dynamiques récurrentes du marché qui peuvent être plus fréquentes dans certaines périodes de temps que dans d'autres. En effet,  la notion de régimes est fondamentale pour les marchés financiers, et une grande partie de la recherche a été axée sur la détection des changements de régime. Dans cet article, nous considérons un régime tel que défini par un ensemble de stratégies de trading montrant des performances similaires dans un laps de temps donné.

Nous considérons différents paramétrages de la même stratégie comme distinctes dans notre jeu de stratégies. Le problème de trading est de choisir une distribution, parmi celles qui nous sont disponibles, qui permettra d'atteindre de bonnes performances dans la période courante
."

 

Ils commencent par quelques définitions intéressantes. Une stratégie de trading est définie comme une fonction qui prend un état donné du marché et génère une réponse appropriée "dénotant toutes les décisions de trading possibles". Les fonctions de stratégie peuvent également être paramétrées et différents paramétrages de la même fonction / stratégie sont considérés comme des stratégies qualitatives distinctes. Ils supposent l'existence de l'ensemble de toutes les stratégies. Un régime est défini comme un ensemble de stratégies de trading qui ont un comportement similaire sur une période de temps donnée, où la similarité est mesurée par la variation d'une fonction de fitness.

Ils commencent donc avec un ensemble de stratégies, une fonction de fitness, des données historiques et des états, et leur première tache est d'identifier des régimes. Ils le font en faisant tourner les stratégies sur des partitions de données historiques aléatoirement sélectionnées, en quantifiant leurs performances respectives par la fonction de fitness et en identifiant les groupes statistiquements signifiants. Ces groupes de stratégies signifiants sont les régimes de l'ensemble de stratégies dont ils sont extraits et qui sont candidates a l'exécution.

Ils définissent la fonction stFuncDist qui pour chaque régime génère une distribution ou balance des stratégies a l'intèrieur du régime.

A suivre...

 

des données historiques
 
<< Début < Précédent 1 2 3 Suivant > Fin >>

Page 1 sur 3

Articles en rapport :

 
Joomla 1.5 Templates by Joomlashack