Blog de développement

Turbos: Mesurer, Synthétiser, Visualiser la performance

Dernière Modification le :
2000-01-01

...

Construire sa courbe de performance

Trado expliquait récemment qu'il est important de tenir son journal de trading et que certains construisent et publient parfois leurs performances

Tableurs (Excel, Google Sheets) : Créez un tableau de suivi avec les dates, les valeurs du portefeuille, les apports/retraits, et les formules de calcul.
Logiciels de Gestion de Portefeuille : Des outils comme Portfolio Performance, Yahoo Finance, ou des plateformes de courtage peuvent automatiser le suivi.

Mon broker ne propose pas de suivi avancé: le faire à la main est trop fastidieux: je l'automatise! Je cherche à automatiser l'export (en attendant, je ferai à la main), convertir au format .CSV, séléctionner et formater les colonnes.

Les plateformes, facilités d'export et intégration

On trouve des comparateurs de brooker "le trader du dimanche" Lire →. . je fais la comparaison sous le seul angle de l'exportatilité et de la facilité à utiliser
Portefeuille Relevé Outil
Brooker Format ISIN Format ISIN Interne Externe
Boursorama →
Degiro → x
EasyBourse → x
Fortuneo → .xls Oui .csv Non Non ??
IG → x
Saxo → x
Trade Rep. → x

Approche Générale

1. Exportation des Données votre plateforme
  • Connectez-vous à votre compte, puis aux sections "Portefeuille" et "Relevés".
  • Recherchez une option d'exportation tel qu'un bouton "Exporter", "Télécharger" ...
  • Choisissez le format d'exportation CSV qui est largement compatible.
  • Téléchargez le fichier exporté sur votre ordinateur.
  • Horodatez et transferez vers un dossier de travail.
2. Préparation des Données pour l'Importation

On va s'assurer que les fichiers CSV sont correctement formatés :

  • Convertir à CSV et déparasiter les lignes titre inutiles
  • Colonnes Requises : le(s) nom(s) de l'actif, la date de transaction, le type (achat/vente), la quantité, le prix, les frais, etc.
  • Format des Dates : Les dates doivent être dans un format reconnu par Portfolio Performance (par exemple, JJ/MM/AAAA ou AAAA-MM-JJ).
  • Séparateur de Colonnes : Utilisez un séparateur de colonnes compatible (généralement une virgule ou un point-virgule).
  • Si nécessaire, vous pouvez ouvrir le fichier CSV dans un logiciel de tableur comme Excel ou Google Sheets pour ajuster le format.
    3. (optinnel) Importation dans Portfolio Performance ou autre
    Ouvrez lelogiciel (ex: Portfolio Performance, PRT). PRT permet d'importer une liste Allez dans le menu Fichier > Importer > Transactions. Sélectionnez le fichier CSV que vous avez exporté depuis Fortuneo. Mappez les colonnes du fichier CSV avec les champs correspondants dans Portfolio Performance. Par exemple, assurez-vous que la colonne "Date" du CSV est associée au champ "Date de transaction" dans Portfolio Performance. Vérifiez les Données Importées : Avant de finaliser l'importation, passez en revue les transactions pour vous assurer qu'elles sont correctement alignées. Finalisez l'Importation. 4. Synchronisation Automatisée (Optionnelle) Actuellement, Portfolio Performance ne dispose pas d'une intégration directe avec Fortuneo. Toutefois, vous pouvez automatiser partiellement le processus en utilisant des scripts ou des outils tiers qui convertissent les données de Fortuneo en un format compatible. Voici quelques suggestions : Scripts Personnalisés : Si vous avez des compétences en programmation, vous pouvez créer un script (par exemple en Python) pour automatiser la conversion et l'importation des données. Outils de Conversion en Ligne : Recherchez des outils ou des services en ligne qui peuvent convertir les exports de Fortuneo en formats compatibles avec Portfolio Performance. Communauté Portfolio Performance : Consultez les forums et la communauté de Portfolio Performance. D'autres utilisateurs peuvent avoir développé des solutions ou des plugins spécifiques pour Fortuneo. 5. Conseils Supplémentaires Sauvegardes Régulières : Avant d'importer de nouvelles données, effectuez une sauvegarde de votre portefeuille dans Portfolio Performance pour éviter toute perte de données. Vérification des Données : Après l'importation, comparez les soldes et les transactions avec votre interface Fortuneo pour vous assurer de l'exactitude. Mises à Jour : Tenez votre logiciel Portfolio Performance à jour pour bénéficier des dernières fonctionnalités et améliorations de compatibilité.

    Le bilan par turbo (ou outil financier)

    J'ai travaillé un turbo pendant 1 à 8 Semaines, je l'ai acheté, vendu, acheté, vendu et je l'ai abondonné ou c'est lui qui m'a planté. Chaque semaine je regarde combien cet outil (typiquement un turbo) m'a fait. A l'instant t, je veux savoir si mon travail (en cours ou pas) est performant. Il me faut juste un tableau outil, gain ou perte. Ceci se construit assez facilement à partir de l'historique des opérations. Avec 300-500 opérations par mois, cela peut devenir fastidieux!

    Fortuneo distribue les produits Société Générale avec un courtage réduit. Fortunéo donne aisément accès à l'historique des opération qui peut être téléchargé en format .CSV.

    Normalisation des XLS et CSV

    C'est spécifique à votre source de données. Avec Fortunéo, le portefeuille est en .XLS avec des lignes titre parasites et le relevé est en .CSV mais pas UTF-8.

    Gestion Libellé, Code Mnémo, ISIN

    La désignation rigoureuse d'un titre ou dérivé est l'ISIN. Le code Mnémonique (en cours: mnémo, en anglais ticker) est une réduction à 5 Alphanumérique attribué par ? avec au moins un chiffre et une lettre. La lettre peut avoir été réservé par convention: ex un B en fin veut dire BNP. Pour les warrants, A désigne Calyon, B BNP Paribas, C Citigroup, D Dresdner, S Société générale, T TradingLab (UniCredit) et Z Commerzbank. La relation Code Mnémonique <--> ISIN est bijective et propre à la création d'un dictionnaire stable

    Le libellé est une dénomination labile qui résume le produit ainsi: le sous-Jacent (5 lettres), le strike, le contrat (ex: TCIOPENS) A cause du strike, le libellé d'un turbo OPEN change chaque jour, ce qui nécessite de créer un dictionnaire des alias. Ce changement est déclaré par l'emetteur (ex: Sg, BNP) mais pas faciement accessible via des bases de données ou internet. https://connect2.euronext.com/sites/default/files/documentation/data/Euronext%20Structured%20Products%20Masterfile%20Client%20Specification%20v4.13.2.pdf Euronext_designation: Instrument designation , Alphanumeric 18 , ex: CAC 4800 C 1206D Mnemonic Euronext Mnemonic Alphanumeric 5 5467D redesignation: https://github.com/sallamy2580/python-web-scrapping les types de contrat sont SPSOPEN, TPIOPEN, TS, SPLOPEN, TL, TCIOPEN. Les seuls à changer de nom sont les Illimités: contenant un I "Le détail des ajustements de strike se trouve dans le fichier XML attaché au Euronext Structured Products Corporate Actions products ou bien dans le Euronext Structured Products Master File". C'est payant!

    Je n'ai pas trouvé de ressource internet, d'accès simple, qui donne un ISIN à partir d'un Libellé ! SAUF easybourse

    Annuaire inversé vs annuaire quotidien

    L'annuaire inversé permet :
    - gratuit
    - facile à automatiser (Curl ou WinHttp + expression régulière)
    Inconvenients:
    - il disparaitra un jour... comme tous les bons plans gratuits
    - n'est valable que pour le jour même

    L'annuaire quotidien:
    - gratuit
    - source pérenne (Euronext)
    - facile à automatiser (Curl ou WinHttp + expression régulière)
    Inconvenients:
    - nécessite une mise à jour (quasi-) quotidienne
    - nécessite un outil heuristique de recherche inversée
    - limité aux ISIN sous surveillance

    Tabulation régulière (jour ou semaine) des Libellés pour un ISIN donné

    L'association heuristique d'un Libellé à un ISIN sera d'autant plus satisfaisane qu'on aura enrichi une table ISIN/Libellé avec le plus de régularité possible. La première étape est d'établir une liste des ISIN travaillés. Dans fortunéo on télécharge facilement un document nommé Export_portefeuille_simple_0123456...78.xls. Le nom contient le Numero de compte mais pas de date. La date est dans le ligne 3 ou alors prendre la date de dernière modification dans Windows. Il est important de mettre très tôt la date (et l'heure?) dans le nom pour éviter les doublons. Ce fichier donne accès à un Libellé complexe (ex: ASMLH625.5TCIOPENS (1181S)), composé du Libellé simple et du code mnémo entre parenthèses, et l'ISIN (ex: DE000SU16E44). On construit un tableau avec au moins ces 3 colonnes. Si on a commencé à travailler un turbo et fini dans le laps de temps entre 2 téléchargements, il se peut que l'on passe à coté. Soit on entre l'ISIN à la main dans la liste des ISIN sous sourveillance, soit on penses à cliquer sur Export Excel dès qu'un nouveau turbo apparairait dans le portefeuille (il apparait même si une première transaction n'a pas encore été exécutée). Alternativement utiliser un automate (Sélénium) pour s'identifier et acéder à cette ressource quotidiennement.

    Sources publiques: Euronext et EasyBourse

    On lit ici https://www.etpdatasystems.com/ que 100000 warrants et certificats sont listés en vie sur le marché français, 2000 nouveaux produits sont émis chaque jour, avec 2000 différents sous-jacents. La recherche fonctionne en sens unique ISIN vers Libellé sur easybourse et Euronext. Sauf aux utilisateurs connectés, elle n'est pas disponible sur Saxo, Boursorama ou Fortuneo. Boursorama donne un accès facile au status (actif/inactif). Régulièrement ou à la demande on va chercher le Libellé sur Euronext (le plus accessible) ou easybourse. L'URL de la page Euronext est se contruit facilement ex: https://live.euronext.com/en/product/structured-products/DE000SQ4ZWH7-XMLI On prend la racine https://live.euronext.com/en/product/structured-products/, on ajoute l'ISIN puis -XMLI et c'est tout. Le Libellé (product name) est le premier objet du titre. Sur EaasyBourse, il faut passer par la page de recherche en premier lieu (2 étapes, donc) Desambiguation: Si a recherche fourni un résultat unique, le seveur redirige vers la bonne page, sinon il propose une page de choix . 207 éléments sur 9 680 éléments soi 2 %

    Découverte de l'ISIN d'un Libellé nouveau

    On a donc une table ISIN/Libellés avec une granularité la plus fine possible. Journalière au mieux, hebdomadaire à défaut, etc...

    Annuaire direct par émetteur (code mnémo)

    Les émetteurs distribués par les brokers (ex: Bnp Paribas, Goldman Sachs, Ing, Societe Generale, Unicredit, Vontobel) via Euronext ou directs (ex. BNP Direct, IG, ...) ont une page 'produits'. Seuls les produits actifs sont listés. Si on télécharge régulièrement on peut donc faire un suivi actif/inactif, par différence.

    Il est possible de filtrer par Infini et de determiner par différence ce qui est fini (le libellé est fixe) de ce qui est infini (lbellé variable)

    Données ISIN Mnémo via Brooker Méthode Lien
    BNP Euronext → HTML Oui Oui Oui ?
    BNP Direct → .xlsx Oui Non Non ?
    Soc.Gén. → .xlsx Non Oui Oui GET

    Pour construire la table BNP Euronext seul, il faut construire la table BNP Euronext + Direct et soustraire la table Direct

    Pour automatiser le téléchargement du fichier Excel ou HTML, sans utiliser Selenium :
    Ouvrez la page dans votre navigateur et utilisez les outils de développement (F12).
    Allez dans l'onglet "Network" (Réseau) et cliquez sur le bouton "Exporter sous Excel".
    Observez la requête réseau qui est déclenchée lors du clic.
    Notez l'URL de téléchargement (GET ou POST):
    Reproduire la requête en Pythonavec la bibliothèque requests.
    Si la requête nécessite des en-têtes spécifiques (comme des cookies ou un User-Agent), récupérez-les depuis l'onglet "Headers" des outils de développement.
    Si le site nécessite une authentification ou des cookies spécifiques, vous devrez les inclure dans les en-têtes de la requête.
    Certains sites utilisent des jetons CSRF ou d'autres mécanismes de sécurité. Dans ce cas, il peut être nécessaire de gérer une session complète en utilisant requests.Session() pour maintenir l'état entre les requêtes.

    Constitution du nom commercial (libellé) ticker barriere T(urbo) L ou I(llimité) C ou P(Call/put) OPEN et S (ociété Générale)

    Société Générale: le fichier est limité à 5000 entrées (plus une ligne message et les entêtes.

    Fortuneo: Téléchargement (manuel) des Fichiers

    Récupérer les 2 fichiers qui nous importent pourrait être automatisé. On verra plus tard... Pour l'instant le téléchargement est manuel. 2 fichiers nous intéresssent:

    Le portefeuille: Page principale. Cliquer sur Export Excel. Cela met un fichier Excel dans le dossier des téléchargements. Le fichier ressemble à : Export_portefeuille_simple_xxx(N).xls, encodage : Latin1 (ANSI), Fin de line LF (?!) (Linux)

    Le Relevé: Aller dans Historique des Opérations/télécharger un historique. Choisir Titre et Opération et une date de départ loin (ex: 01/08). Choisir le format Excel (en fait, c'est un CSV). Télécharger le ZIP: il n'est pas daté ! Il contient un fichier avec dates (ex: HistoriqueOperationsBourse_xxxx_du_27_09_2024_au_27_10_2024) Au format CSV (separateur point virgule), encodage : Latin1 (ANSI), Fin de line Cr+LF (Windows). Le point décimal est le point

    Le bilan: Voir plus bas

    Fortuneo: Import et datation des Fichiers

    Je travaille sur plusieurs PC et les fichiers Fortuneo ne sont pas datés. La première chose à faire est de les dater avec un TimeStamp!
    On les copie des dossiers de téléchargement vers des dossiers dans le dossier de travail.
    On remplace le TimeStamp par un date stamp en ne conservant que le fichier le plus jeune.
    On dézippe et on ajoute un timestamp. On regroupe par un date stamp en ne conservant que le fichier le plus jeune.
    En fin de cette étape on dispose d'un dossier avec les portefeuilles: portefeuille_YYYYMMDD.xls et un dossier avec les relevés: releve_YYYYMMDD.xls

    Boursorama, Saxo, IG, EasyBourse, Degiro....

    Je ne connais pas les formats disponibles sur ces plateformes. Si je récupère l'info, je la mettrai!

    Conversion en .CSV, en UTF-8 et mise à jour de l'annuaire

    Source fiable pour l'annuaire : le Solde

    Dans Fortuneo, aller à "Plus ou moins values", qui présente 3 tableau dont le dernier est "Plus ou moins values réalisées sur les positions soldées sur l'année". Généré dynamiquement en HTML avec pagination de 10 lignes. Il faut donc un navigateur ou émulateur (Selenium) pour récupérer les données. Une alternative est https://github.com/rbignon/woob/tree/master Gilles Quenot * Fortuneo module maintainer. ou Jocelyn Jaubert

    Elles ont le mérite de faire état de données anciennes avec Libellé, Mnemo et ISIN. On recupère le tableau CSV gràce à une extension de Firefox TableCapture (gratuit). On se met sur le bon (3ième) tableau, on navigue, on selectrionne un peu de texte dans le tableau, puis click droit, on choix Table Capture en bas du menu contextuel. On copie successivement dans un fichier Bilan.txt

    Expression régulière pour Euronext (ISIN, product designation)

    Libellé : (en language Euronext: product designation) sa structure est Ticker (sur 5 charactères) strike, Type de Contrat. Fini normalement par une lettre désignant l'émetteur (ex. S pour Soc Gen., B = BNP). Il fait en général 18 caractères, mais il y a des exceptions probablement du au fait qu'on retire des double blancs au profit de simple blancs. Une regle heuristique est que cela commance toujours par une lettre. La deuxième est le plus souvent une lettre mais pas exclusivement (chiffre 1 ‰ ou blanc 1 ‱)

    1. Ticker (sur 5 caractères): outre les alphanumériques majuscules, il peut (rarement) contenir b, n, l, point ou blanc
    2. Strike
    3. : Longueur maximale des strikes : 5 Longueur minimale des strikes : 1 Un strike peut commencer par un point : Oui Nombre maximal de chiffres après un point : 3 on a un pb ici : VOW 60TL 1224S R538S
    4. Contrat
    5. (ex: TL 1124S, SPLOPEND) toujours suivi de la lettre de l'emetteur (ex: S pour SG) lui même contitué du Type de Contrat (ex: TPIOPEN, TS) et eventuellement du mois d'expiration (ex: 1224, 0325, 0125...)

    ISIN: ([A-Z]{2})([A-Z0-9]{9})([0-9]{1}) la question est discutée ici: https://stackoverflow.com/questions/33164718/isin-with-at-least-1-number . Ici, nous n'avons pas besoin de la validation par check digit...

    Code Mnemo: 5 alphanumeriques, le dernier etant propre à l'émetteur mais peut être double ex: S ou Z pour SG, B ou N pour BNP...). Il peut preter à confusion si il ressemble à une date: par exemple le 1224S.

    La desembiguation et ourne 1740 alternatives, sur 174 pages! l'alternative est d'aller sur easybourse, construre une recherche https://www.easybourse.com/turbos/recherche/?page=1&ordre=2&dir=1&action=1&code_libelle=1224S&type=&sous_jacent=&emetteur=&barriere_min=&barriere_max=&turbo_search=

    					    
    XXX