PlanèteMembres  |  Mission   xlsAsset xlsAsset
Cherchez dans nos forums :

Communauté des investisseurs heureux (depuis 2010)

Echanges courtois, réfléchis, sans jugement moral, sur l’investissement patrimonial pour devenir rentier, s'enrichir et l’optimisation de patrimoine

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

Flèche Découvrez les actions favorites des meilleurs gérants en cliquant ici.

[+4]    #1 24/12/2014 08h47

Membre (2011)
Top 20 Actions/Bourse
Top 20 Obligs/Fonds EUR
Top 20 Entreprendre
Top 5 Finance/Économie
Top 20 Banque/Fiscalité
Réputation :   650  

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


Comparaison de mon PEA a mon portefeuille cible


Distribution des retours des différents portefeuilles


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 Hors ligne

 

#2 24/12/2014 13h10

Membre (2011)
Top 20 Invest. Exotiques
Top 20 Entreprendre
Top 20 SIIC/REIT
Réputation :   175  

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 Hors ligne

 

[+2]    #3 25/02/2015 22h16

Membre (2014)
Réputation :   187  

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 :
Browse | Coursera

A suivre !

Hors ligne Hors ligne

 

#4 28/02/2015 12h20

Membre (2012)
Top 20 Crypto-actifs
Réputation :   153  

INTP

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


=== 👍+1 === Ressources anti-arnaques === Ne pas nourrir les trolls ===

Hors ligne Hors ligne

 

#5 01/04/2015 16h28

Membre (2014)
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 Hors ligne

 

#6 01/04/2015 19h45

Membre (2011)
Top 20 Invest. Exotiques
Top 20 Entreprendre
Top 20 SIIC/REIT
Réputation :   175  

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 Hors ligne

 

#7 05/04/2015 16h34

Membre (2014)
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 Hors ligne

 

#8 05/04/2015 19h34

Membre (2011)
Top 20 Actions/Bourse
Top 20 Obligs/Fonds EUR
Top 20 Entreprendre
Top 5 Finance/Économie
Top 20 Banque/Fiscalité
Réputation :   650  

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 Hors ligne

 

#9 11/04/2015 02h31

Membre (2014)
Réputation :   0  

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 Hors ligne

 

#10 11/04/2015 09h34

Membre (2014)
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 Hors ligne

 

#11 11/04/2015 09h45

Membre (2011)
Top 20 Actions/Bourse
Top 20 Obligs/Fonds EUR
Top 20 Entreprendre
Top 5 Finance/Économie
Top 20 Banque/Fiscalité
Réputation :   650  

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 Hors ligne

 

#12 11/04/2015 10h01

Membre (2013)
Réputation :   0  

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


L'avenir appartient à ceux qui font se lever les autres tôt.

Hors ligne Hors ligne

 

#13 11/04/2015 22h51

Membre (2015)
Réputation :   238  

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



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 Hors ligne

 

#14 11/04/2015 23h33

Membre (2014)
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 Hors ligne

 

#15 12/04/2015 00h02

Membre (2014)
Réputation :   48  

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 Hors ligne

 

#16 12/04/2015 00h19

Membre (2015)
Réputation :   238  

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 :



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 Hors ligne

 

#17 12/04/2015 11h19

Membre (2014)
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 Hors ligne

 

[+1]    #18 12/04/2015 12h36

Membre (2015)
Réputation :   238  

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 Hors ligne

 

#19 12/04/2015 13h00

Membre (2011)
Top 20 Actions/Bourse
Top 20 Obligs/Fonds EUR
Top 20 Entreprendre
Top 5 Finance/Économie
Top 20 Banque/Fiscalité
Réputation :   650  

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

Hors ligne Hors ligne

 

Favoris 1    #20 12/04/2015 14h35

Membre (2014)
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 Hors ligne

 

[+1]    #21 12/04/2015 16h10

Membre (2015)
Réputation :   238  

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 Hors ligne

 

[+1]    #22 12/04/2015 16h25

Membre (2011)
Top 20 Actions/Bourse
Top 20 Obligs/Fonds EUR
Top 20 Entreprendre
Top 5 Finance/Économie
Top 20 Banque/Fiscalité
Réputation :   650  

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 Hors ligne

 

#23 12/04/2015 19h17

Banni
Réputation :   88  

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

Hors ligne Hors ligne

 

#24 12/04/2015 20h05

Membre (2011)
Top 20 Actions/Bourse
Top 20 Obligs/Fonds EUR
Top 20 Entreprendre
Top 5 Finance/Économie
Top 20 Banque/Fiscalité
Réputation :   650  

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 Hors ligne

 

#25 12/04/2015 20h41

Banni
Réputation :   88  

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 Hors ligne

 

Flèche Découvrez les actions favorites des meilleurs gérants en cliquant ici.


Discussions peut-être similaires à "langage r : langage de programmation et environnement statistique…"

Pied de page des forums