Stock Market

unlisted

by Pierre

Affiche un tableau de gains/pertes pour chaque transaction boursière.

Updated 21d ago
View on GitHub

Stock Market — Plugin Obsidian

Affiche un tableau de positions boursières calculées à partir de tes fichiers de transactions. Le plugin regroupe les achats et ventes par ticker, calcule le prix moyen pondéré (PMP), et affiche les gains latents (positions ouvertes) et réalisés (positions fermées).


Installation

  1. Copier le dossier stock-market/ dans .obsidian/plugins/
  2. Dans Obsidian → Réglages → Plugins communautaires → désactiver le mode sans échec → activer Stock Market

Prérequis

Le plugin s'attend à deux éléments dans le vault :

1. Fichiers de transactions

Chaque transaction est une note Markdown dans 090 - Finance/Stocks/Transactions/ avec ce frontmatter :

---
date: 2024-08-12
ticker: VFV
action: buy          # "buy" ou "sell"
quantity: 10
unit_price: 160.00
total: 1600.00
currency: CAD        # "CAD" ou "USD"
note: Achat mensuel  # optionnel — affiché en tooltip (ⓘ)
---

2. Fichier de prix actuels

Le fichier 090 - Finance/Stocks/symbols.json contient les cours en temps réel :

{
  "symbols": [
    {
      "symbol": "VFV.TO",
      "currency": "CAD",
      "price": 182.90,
      "price_cad": 182.90,
      "updated_at": "2026-06-07T02:32:46Z"
    },
    {
      "symbol": "NVDA",
      "currency": "USD",
      "price": 205.10,
      "price_cad": 285.77,
      "updated_at": "2026-06-07T02:32:46Z"
    }
  ]
}

Utilisation

Dans n'importe quelle note Obsidian, insère ce bloc de code :

```stock-gains

```

Le tableau s'affiche automatiquement avec toutes les positions.

Affichage pleine largeur + mode lecture automatique

Pour la note dédiée, ajouter en frontmatter :

---
cssclasses: stock-transactions
---

Cela active :

  • Largeur pleine page — le tableau utilise tout l'espace disponible
  • Mode lecture automatique — la note s'ouvre toujours en consultation (jamais en édition)
  • Propriétés masquées — le frontmatter n'est pas affiché
  • Bouton d'ajout de transaction dans la barre native Obsidian (icône +)

Ajouter une transaction

Sur toute note avec cssclasses: stock-transactions, un bouton apparaît dans la barre d'outils native d'Obsidian. Le cliquer ouvre un formulaire avec les champs :

ChampDétails
DatePré-rempli avec la date du jour (format YYYY-MM-DD)
TickerAccepte les formats VFV.TO, NVDA, TSE:VGRO
ActionAchat / Vente
DeviseCAD ou USD
QuantitéNombre d'unités
Prix unitairePrix par unité
TotalCalculé automatiquement — modifiable si des frais s'appliquent
NoteOptionnel — affiché en tooltip dans le tableau

À la soumission (bouton ou touche Entrée) :

  1. Crée un fichier .md dans le dossier Transactions (YYYY-MM-DD TICKER action.md)
  2. Ajoute le ticker à symbols.json s'il n'y est pas encore (avec price: 0 — à mettre à jour manuellement)
  3. Rafraîchit le tableau de positions sans recharger la page

Normalisation du ticker pour symbols.json : TSE:VGROVGRO.TO


Résolution des tickers

Le plugin fait correspondre le ticker de la transaction à un symbole dans symbols.json selon ces règles, dans l'ordre :

Ticker dans la transactionLogiqueExemple de match
TSE:VGROPréfixe XXX:BASE.TOVGRO.TO
VFV + CADCherche VFV.TO puis VFV.NEVFV.TO
NVDA + CADCherche NVDA.TO puis NVDA.NENVDA.NE
NVDA + USDMatch directNVDA

Calcul du Prix Moyen Pondéré (PMP)

Pour chaque ticker, les transactions sont traitées chronologiquement :

Achat :

totalCost += quantité × prix_unitaire
openQty   += quantité
pmp        = totalCost / openQty

Vente :

gainRéalisé += (prix_vente - pmp) × quantité
totalCost   -= pmp × quantité
openQty     -= quantité

Le PMP reste inchangé lors d'une vente — seul le coût total est ajusté proportionnellement. C'est la méthode recommandée par l'ARC pour le calcul des gains en capital.


Structure du tableau

Positions ouvertes

TickerQtéPrix moy.Prix actuelGain latent $Gain latent %

Cliquer sur une position déroule le détail de chaque transaction individuelle.

Positions fermées

Apparaît uniquement si tu as vendu la totalité d'une position.

TickerQté venduePrix moy.Gain réalisé $Gain réalisé %

Détail (tiroir)

Visible en cliquant sur le d'une position :

DateActionQtéPrix unitaireCoût totalGain latent $Gain latent %

Les transactions avec un champ note affichent un indicateur — survoler avec la souris révèle la note.

Performance globale du portefeuille

Affiche un graphique linéaire de la valeur totale du portefeuille (CAD), avec des boutons pour changer la période : 7 jours (par défaut), 1 mois, 1 an. Les données sont récupérées en direct depuis l'API chart de Yahoo Finance — nécessite une connexion réseau. La conversion des tickers USD utilise le taux de change courant (pas le taux historique réel).

Yahoo limite le nombre de requêtes par adresse IP. Les cours sont donc demandés deux à la fois plutôt que tous d'un coup, gardés en mémoire 15 minutes (revenir à une période déjà affichée ne redemande rien), et repris automatiquement en cas de refus passager. Si Yahoo bloque quand même — ce qui arrive surtout sur un réseau cellulaire, dont l'adresse est partagée entre abonnés — le graphique le dit et propose Réessayer au lieu d'un message vague. Un titre absent est nommé sous le graphique même quand la courbe a pu être tracée sans lui.


Développement

npm install
npm run dev      # mode watch (hot-reload)
npm run build    # build de production

Prérequis : Node.js ≥ 18

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.