Suivez les discussions sur : Twitter Facebook RSS   Abonnez-vous à la newsletter : Newsletters   Utilisez la recherche : 
Chercher
Membres  |  Mission

Forums des investisseurs heureux

Discussions courtoises et réfléchies sur l'investissement patrimonial pour s'enrichir, générer une rente et atteindre l'indépendance financière

Vous n'êtes pas identifié : inscrivez-vous pour échanger et participer aux discussions !

#1 24/12/2014 08h47 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   285 

Bonjour,

Cela fait longtemps que je voulais m’intéresser à R, et je m’y suis enfin mis.

Pour ceux qui ne connaissent pas R est un outil de statistiques open source extrêmement puissant. De nombreuses bibliothèques ont été développées, ce qui fait que sa richesse est extrêmement incroyable. Par ailleurs, c’est souvent bien documenté et il existe de nombreux tutoriels%.

Je me suis donc lancé dans la transformation de fichiers XL en code R. Pour l’instant je ne suis pas déçu, si ce n’est les représentions graphiques qui sont, c’est vrai moins sympa que sous XL.

L’objectif de mon premier code est de télécharger des cours de trackers et de mon portefeuille, afin de comparer les retours et les risques.

Voila en français l’ "algo" :
- Télécharger les cours quotidiens sur Yahoo d’une liste de tracker dans un fichier XL
- Importer la valeur de la "part" de mon PEA
- Fusionner les différentes valeurs. Comme je n’ai pas remplis tous les jours la valeur de mon PEA, j’interpole entre 2 dates.
- Transformer en retour% quotidien
- Calculer l’évolution de mon portefeuille cible (55% CAC40, 40%SP500, 5% Emerging) rebalancé trimestriellement
- Calculer les ratios : Volatilité, Sharpe, Max Drawdown, Ulcer Rate
- Faire un graphique de différence entre mon PEA et mon portefeuille cible

J’utilise la bibliothèque "PerformanceAnalytics" (et "Zoo"), ça fait donc moins de 15 lignes de code !
(sous excel il y a des dizaines de colonnes, et des macros difficilement maintenant et largement plus lentes)
Je ne suis pas encore au bout de ce que je veux faire, mais ça avance.

Je vous mets quelques graphiques standards :

Performance cumulée des différents portefeuilles + drawdown
http://www.devenir-rentier.fr/uploads/598_picture4.jpg

Comparaison de mon PEA a mon portefeuille cible
http://www.devenir-rentier.fr/uploads/598_comparaison.png

Distribution des retours des différents portefeuilles
http://www.devenir-rentier.fr/uploads/598_picture3.jpg

Y-a-t-il d’autres utilisateurs de R ? Quelles fonctionnalités avec vous mises en oeuvre ? Quelles bibliothèques avez vous découvertes ?

Dernière modification par Fructif (24/12/2014 09h13)

Mots-clés : code, portefeuille, r, statistiques

Hors ligne

 

#2 24/12/2014 13h10 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   166 

R est un outil essentiel en finance. Je ne connais pas de salle de marché à Wall st qui ne s’en serve pas, en tout cas en obligataire. La seule exception est Goldman, comme il faut utiliser un langage développé en interne ("slang") qui d’ailleurs ressemble beaucoup à R.

Je dirais que l’opposition entre R et Excel par exemple relève de l’opposition entre approche professionnelle et en tant qu’amateur.

A noter, R est réputé comme l’outil existant le plus puissant pour générer des graphiques à partir de données. Par ailleurs R s’articule bien avec Latex pour l’édition professionnelle de rapports.

Hors ligne

 

#3 25/02/2015 22h16 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   46 

Pour ceux qui sont intéressés par l’apprentissage du logiciel open source R dans la finance, voici un cours gratuit sur COURSERA que je débute :
https://www.coursera.org/course/compfinance

A suivre !

Hors ligne

 

#4 28/02/2015 12h20 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   44 

Bonjour,

Je ne pratique pas R pour l’instant mais je m’y interesse un peu, "au cas où"…

Un lien que l’on m’a transmis récemment :

How to Transition from Excel to R
An Intro to R for Microsoft Excel Users

District Data Labs - How to Transition from Excel to R

Cordialement,

Eric

Hors ligne

 

#5 01/04/2015 16h28 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   56 

Bonjour,

Je débute sur R, je n’en suis pas encore à faire des calculs financiers avec, mais je me pose une question : cet outil permet-il de backtester des stratégies momentum plus efficacement qu’Excel ?

Sur Excel on se retrouve vite avec de nombreuses colonnes de chiffres (indices, moyennes mobiles, rendements mensuels de chaque stratégie, seuils de stop loss, drawdown, etc.

Pour donner un exemple concret, en entrée j’indique une série historiques de n cours fin de mois, la(les) moyenne(s) mobile(s) que je veux utiliser, et en sortie je récupère le rendement, la volatilité, max drawdown de la stratégie choisie sur cette période.

Sur R, est-il possible de programmer ce type de traitement ?

Merci

Hors ligne

 

#6 01/04/2015 19h45 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   166 

C’est possible, et je pense que parmi les centaines de packages existants sur R plusieurs doivent être spécialisés dans ce genre de calcul.

Hors ligne

 

#7 05/04/2015 16h34 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   56 

J’ai trouvé mieux, un blog avec une série d’articles précisément sur le suivi d’une stratégie momentum sur R
Momentum with R: Part 1 | rbresearch

Hors ligne

 

#8 05/04/2015 19h34 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   285 

Bonjour,

Oui vous pouvez bien sûr faire cela avec R.
Avec de l’entrainement ce sera très facile, mais il y a quand même un coût d’apprentissage.

Il y a effectivement une librairie qui vous facilitera la vie : quantstrat
Attention, elle nécessite d’installer d’autres librairies.

J’ai rapidement regardé, il y a l’air d’y avoir pas mal d’exemples, mais pas super bien documentées. Cela étant, cela devrait répondre à vos besoins.

Hors ligne

 

#9 11/04/2015 02h31 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   

Bonjour,

Je vais justement entamer ce cours

La programmation en R

Je vous tiendrai au courant de mes premiers algorithmes.

Je suis un peu dans le même état d’esprit que Fructif. On verra bien.

Hors ligne

 

#10 11/04/2015 09h34 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   56 

Bonjour,
Bon choix, je l’ai suivi il y a quelques mois, c’est une bonne entrée en matière même si ça reste assez léger, il faut mettre en pratique dès que possible pour bien assimiler ces notions de base.

Un gros avantage de ce logiciel est que la documentation est foisonnante: pour tous les points sur lesquels j’ai buté - c’est à dire quasiment à chaque ligne de code au début -  j’ai trouvé une réponse complète et précise en faisant une bête recherche Google  wink.

Hors ligne

 

#11 11/04/2015 09h45 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   285 

Oui, c’est très très bien documenté et il y a une grosse communauté.

Je trouve que la difficulté vient du langage mais surtout des notions de Maths à avoir et des matrices.

A titre d’exemple, souvent entre mon premier code fait de manière classique et mon code optimisé "matrice", j’arrive à diminuer le nombre de lignes de code par 5 et surtout diviser le temps de calcul par beaucoup plus !

Hors ligne

 

#12 11/04/2015 10h01 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   

Un autre MOOC sur FUN qui permet d’apprendre les bases sur R:
Introduction à la statistique avec R

Hors ligne

 

#13 11/04/2015 22h51 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   77 

Sanbouddha, un exemple de ce que permet R sur un backtest d’une stratégie momentum action :

http://www.devenir-rentier.fr/uploads/7856_momentum_hpq.jpg

en vert, les achats, en rouge les ventes

résultats spectaculaires :
[1] "HPQ"
[1] "retour buy&hold    : -21.30% "
[1] "retour strat 2s. naïve : -15.08% "
[1] "retour strat 2s. avec stop loss 4% : 188.32% "
[1] "nombre de commissions 67"

je me suis inspiré du lien que vous avez mis plus haut, mais sur une seule action en cherchant les inflexions.

La stratégie est évaluée par semaine pour localiser les points d’entrées sur retournements de tendance
On sort dès qu’on perd plus de 4%.

La stratégie naïve sans stop loss ne marche pas vraiment, même si elle limite le drawdown, par contre, dès qu’on ajoute des stop loss pour vendre automatiquement en cas de baisse, ça marche plutôt pas mal.

Sur les valeurs en grosse croissance, on perd une partie de l’upside, mais on limite sérieusement les risques en cas de baisse.

le nombre d’ordre n’est pas trop important.

Ce fichier est en cours d’élaboration et je débute aussi en R, mais si ça intéresse je pourrai le publier ici quand il sera fini.

Hors ligne

 

#14 11/04/2015 23h33 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   56 

Gaspode a écrit :

La stratégie naïve sans stop loss ne marche pas vraiment, même si elle limite le drawdown, par contre, dès qu’on ajoute des stop loss pour vendre automatiquement en cas de baisse, ça marche plutôt pas mal.

Avec la stratégie s’appuyant uniquement sur la moyenne mobile, le stop loss existe, c’est la moyenne mobile elle même.
Il y a un point que je ne comprends pas, vous dites "on sort dès qu’on perd 4%" ok mais quand est-ce qu’on réinvestit ?
Je prends l’exemple du CAC40 qui est 17% au dessus de sa MM40 hebdo. Si je sors dès que perds 4%, dès la semaine suivante le modèle me dit de réinvestir car l’indice est toujours au dessus de la MM.

Hors ligne

 

#15 12/04/2015 00h02 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   12 

Et sinon, pour les plus paresseux : peut-on dénicher du code R prêt à l’emploi pour les ratios de base volatilité, Sharpe etc… ?

Hors ligne

 

#16 12/04/2015 00h19 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   77 

Je n’utilise pas la moyenne mobile mais la différence entre les ratios de changements à 1,2,4 semaines et plus (fonction ROC dans R -- rate of change).

Le but est d’identifier les plus bas sur la courbe, et l’inversion de tendance correspondante, donc un ROC(n) positif couplé à un ROC(n+xx) négatif, ce qui déclenche l’ordre d’achat. La difficulté est éliminer les faux positifs sans perdre trop du début d’upside. J’ai encore des chose à améliorer de ce côté là.

Dans l’article que vous aviez trouvé ils se contentaient de classer les différents instruments et d’investir dans le meilleur chaque mois.

Là, dans la version naïve, je garde l’action tant que le ROC(1) de la semaine est supérieur à -4%. Ca marche mieux si je rajoute un stop loss par rapport au plus haut de la série en cours pour éviter en fin de semaine d’avoir perdu beaucoup plus et annulé la plus grande partie du gain.

Tant que le signal de vente n’est pas atteint, une fois les actions achetées, on n’utilise plus le signal d’achat, on laisse courir.

Dans votre exemple du CAC 40  je vais attendre un ROC(x) négatif, avec x=2 ou 3, et un ROC(1) positif (en fait > 2%) pour réinvestir.

On voit très bien sur la courbe que tous les points verts sont 1 ou semaines après un plus bas.

COMPLEMENT :

Pour illustrer la différence entre la version naïve et avec les stop loss :

http://www.devenir-rentier.fr/uploads/7856_momentum_swk.jpg

en rouge la vente avec le stop loss
en noir la vente normale en fin de semaine

On voit bien la conservation de plus value supplémentaire qu’apporte le stop loss.

[1] "SWK"
[1] "retour buy&hold    : 204.29% "
[1] "retour strat 2s. naïve : 88.75% "
[1] "retour strat 2s. avec stop loss 4% : 260.36% "
[1] "nombre de commissions 42"

Idamante, R est malheureusement relativement complexe et ésotérique si bien qu’une approche  paresseuse est difficile. Sinon dans la dizaine de milliers de package R existants, les fonctions que vous cherchez doivent bien exister sous une multitude de versions.

Quelques exemples :
Le package FinancialInstrument que j’utilise récupère automatiquement les cours sur Yahoo.
PerformanceAnalytics a environ 200 fonctions d’économétrie et d’analyse de risque (dont Sharpe et CAPM).

Dernière modification par Gaspode (12/04/2015 00h50)

Hors ligne

 

#17 12/04/2015 11h19 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   56 

Gaspode a écrit :

Là, dans la version naïve, je garde l’action tant que le ROC(1) de la semaine est supérieur à -4%. Ca marche mieux si je rajoute un stop loss par rapport au plus haut de la série en cours pour éviter en fin de semaine d’avoir perdu beaucoup plus et annulé la plus grande partie du gain.

Voyons si j’ai bien compris.

En fin de semaine 1, le ROC(1) est positif (ou supérieur à 2%) et le ROC(3) est négatif. Vous achetez (on admettra que le cours d’ouverture du lundi est +/- égal au cours de clôture du vendredi, mettons 100.

Pendant la semaine
- cas 1: le cours passe sous les 96 (perte supérieure à 4%) et finit la semaine à 102. Dans cette situation, vous vendez à 96 ou vous restez investi toute la semaine (et au delà car ROC(1) est toujours positif) ?
- cas 2: le cours passe sous les 96 (perte supérieure à 4%) et finit la semaine à 90. Dans cette situation, vous vendez à 96 en cours de semaine ou à 90 en fin de semaine (ou à l’ouverture le lundi suivant) ?
- cas 3: le cours atteint 105 puis tombe à 95. Dans cette situation, vous vendez à 101 (stop loss à -4% sous le plus haut de 105) ou à 96 (stop loss à -4% sous le dernier cours fin de semaine de 100) ?

Merci.

Hors ligne

 

#18 12/04/2015 12h36 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   77 

La clé est de partir du principe qu’on ne regarde la situation qu’en fin de semaine. Les stops sont une assurance

*cas 1 : départ 100, cours < 96 dans la semaine, fin de semaine à 102

- version naïve, on garde car le ROC(1) est positif. Gain
- version avec stop, on a vendu dès que le cours est descendu à 96. On a donc eu une perte faible sur un cours qui a en fait monté. On attend le prochain signal buy pour réinvestir. Si le titre ne rebaisse pas, celui-ci aura lieu la semaine prochaine (2 semaines de hausse).

*cas 2 : départ 100, cours < 96 dans la semaine, fin de semaine à 90

- version naïve, on vends en fin de semaine. Grosse perte.
- version avec stop, on a vendu dès que le cours est descendu à 96. on attends le prochain signal buy pour réinvestir. on a donc eu une perte faible

*cas 3 : départ 100, cours > 105 dans la semaine, fin de semaine à 95

- version naïve, on vends en fin de semaine à 95. Perte.
- version avec stop, on a vendu dès que le cours est descendu à 96. on attends le prochain signal buy pour réinvestir. On a donc eu une perte + faible

Le stop était positionné à 96 parce que le dernier plus haut fin de semaine était 100. Changer le stop en cours de semaine permettrait en effet d’avoir une plus-value supplémentaire mais n’est pas prévu dans la stratégie.

voyons un autre cas :

* cas 4 : Sn-1 : 102, Sn : 100 le stop est positionné à 96% de 102 soit 97,9.

Plus on positionne le stop près du + haut, meilleure est la capture du potentiel de hausse mais il faut tenir compte de la volatilité intrinsèque du titre. 4% semble être un bon compromis. On perd dans tous les cas au moins la première semaine de hausse de chaque run. De plus les semaines de perte, celle ci est limitée.  Un titre cyclique mais à pas trop forte volatilité est idéal.

les faux départs (couple achat/perte à -4% en une semaine) ne coutent pas trop cher et sont largement compensés par la réduction du drawdown des semaines en forte baisse.

Après tout ça est encore théorique, je compte l’essayer mais il faudra voir ci cela marche dans les faits. Une grande rigueur dans les ordres et la pose des stops semble nécéssaire. La version naïve capture bien les hausses, mais le délai de réponse à 1 semaine est catastrophique pour les baisses.

Hors ligne

 

#19 12/04/2015 13h00 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   285 

Oui Idamante, cela existe bien sûr
J’utilise le package PortfolioAnalytics, il y a la plupart des choses que je cherche !

Hors ligne

 

#20 12/04/2015 14h35 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   56 

Gaspode a écrit :

La clé est de partir du principe qu’on ne regarde la situation qu’en fin de semaine. […] version avec stop, on a vendu dès que le cours est descendu à 96.

On ne regarde que les cours fin de semaine pour former un signal d’achat (activé si la perf de la semaine est positive) et le cas échéant mettre en place le stop loss.
En revanche le signal de vente se déclenche dès que le stop est touché en séance.
Si j’ai bien compris, pour backtester cette stratégie on a donc besoin des cours de clôture hebdo et des plus hauts et plus bas de chaque journée de la semaine.
A quel moment utilisez-vous les ROC d’ordre supérieur (j’avais compris qu’un signal d’achat était ROC(1)>0 ET ROC(3)<0 or ce n’est pas le cas apparemment ?)

Hors ligne

 

#21 12/04/2015 16h10 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   77 

Vous avez bien compris. Yahoo fournit toutes les informations nécessaires sauf qu’il faut reconstituer les dividendes et les splits éventuels depuis le prix ajusté. Les données étant parfois d’une fiabilité aléatoire, ce n’est parfois qu’approximatif. Quandl fournit de meilleures données mais uniquement pour les US en gratuit.

j’ai pas fini le contrôle de la volatilité en cours de semaine, mais c’est bien le principe.

Le signal d’achat complet (pour le moment, les valeurs sont a affiner) est :

     (RoC(1)>0.5% ET RoC(3)<0)   # +bas S1 -S3
OU (RoC(1)>1% ET RoC(2) < 0)    # +bas S1 - S2
OU (RoC(1)>1% ET Roc(2) > 2%) # 2 semaines de hausse

Le plan est d’utiliser les Roc d’ordres supérieur pour choisir les valeurs à investir :

Sur un pool de N valeurs (N = 15 probablement) on crée un portefeuille de x valeurs (je pense x=4).

Pour cela, chaque semaine on sélectionne des valeurs dans le pool pour remplacer celles qu’on a vendues  en prenant celles qui ont un signal d’achat positif (Roc court) et le Roc long le plus haut.  Sur les premiers tests Roc(39), soit 9 mois, ou un mix Roc(13)&Roc(39) donnent les meilleurs résultats.

Le plus hallucinant c’est que tout ça, y compris récup de yahoo,graphiques et sorties textes, tient en pas 80 lignes de code, alors  que celui ci est encore très classique (trop de boucles de contrôle et pas manipulations directes de matrices et vecteurs). Je n’ai fait qu’effleurer la puissance de R pour l’instant.
Le problème est la documentation, extensive mais peu ordonnée et parfois complexe.

Le même code en Python serait au moins 5x plus gros avec des parties particulièrement difficiles à écrire. En Excel, j’envisage même pas.

Hors ligne

 

#22 12/04/2015 16h25 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   285 

Oui mais il y a des limites à R, en particulier si vous avez beaucoup de données !
D’ailleurs, je n’ai pas encore trouvé la solution miracle. Il y a des package spécialisés, et certains passent en Python (en faisant appel à des objets R)!

Hors ligne

 

#23 12/04/2015 19h17 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   52 

Fructif, à quelles limitations de volumes de données pensez-vous avec R?  merci

Hors ligne

 

#24 12/04/2015 20h05 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   285 

Bonjour Marcopolo,

Je vais vous donner un exemple :
Je calcule les retours (backtest) de portefeuilles qui sont la combinaison de 8 classes d’actions (par "pas" de 5%), ça fait plus de 800 000 portefeuilles. (Vous me direz je suis pas obligé de calculer tous ces portefeuilles pour arriver à peu prêt à ce que je veux faire, mais c’est une sorte d’entrainement).
Comme tout est loadé en mémoire vive, avec 32 gigas je sature et ça bugue. En tout cas de façon native. Il y a bien sûr des façons de s’en tirer mais pas de manière native.
De la même manière R n’utilise qu’un Core et il faut adapter le code pour faire de la parrallelisation.

R c’est un outil de statistiques mais pas vraiment de Big Data.

Dernière modification par Fructif (12/04/2015 20h06)

Hors ligne

 

#25 12/04/2015 20h41 → Langage R : langage de programmation et environnement statistique... (code, portefeuille, r, statistiques)

Membre
Réputation :   52 

Fructif, en cherchant un peu sur le net je suis tombé sur ceci :

The few science applications where size & speed matter tend to have compiled C or Fortran functions in the R package, and easy parallel processing

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Hébergé par Arcustech