← La méthode

La méthode · référence A

Le format, champ par champ

Le format dans lequel nous ramenons tout historique de transactions : ce qu'est un événement, les champs qu'il porte, les conventions de calcul et pourquoi elles sont celles-là, et ce que la validation refuse.

Ce texte fait foi : c'est lui que citent les rapports et les autres pages, mot pour mot. Il ne change qu'avec une date.

01 · Le format

Le format

Ce que nous mesurons, et comment chaque ligne est lue.

Un événement, c'est un mouvement, pas un ordre

Nous ne stockons pas des ordres d'achat et de vente. Nous stockons des mouvements économiques datés : ce qui est sorti, ce qui est entré, ce que ça a coûté.

C'est une décision de conception, et elle a une conséquence directe pour vous : un échange sur une plateforme et un échange dans votre portefeuille personnel entrent dans la même forme. Le premier est un cas particulier du second, pas l'inverse.

Le sens de l'opération et son prix ne sont donc jamais stockés — ils sont calculés à partir des deux jambes du mouvement. Quand les deux jambes sont des cryptomonnaies et qu'aucune n'est une devise de référence, votre relevé ne porte aucun prix : nous prenons alors celui de la jambe envoyée, à la minute de l'opération, dans la série que nous avons déposée et figée. Si cette jambe n'a pas de série, nous prenons celle de la jambe reçue, à la même minute. Si aucune des deux n'en a, il n'y a pas de prix, et nous le disons plutôt que de l'inventer.

Les champs

Obligatoires

ChampContenu
tsDate et heure, UTC, avec fuseau explicite, à la seconde. Jamais une heure locale.
kindNature du mouvement : échange · entrée · sortie · transfert interne · récompense · frais seuls · inconnu.
sent_amount / sent_assetCe qui est sorti, et dans quel actif. Vides si le mouvement est une entrée pure.
recv_amount / recv_assetCe qui est entré. Vides si sortie pure. Les deux jambes vides : la ligne est rejetée.
event_idIdentifiant reproductible, calculé à partir de la source et du contenu.

inconnu est une valeur légitime. Un mouvement que nous ne savons pas qualifier doit rester visible et être compté comme tel, pas disparaître du fichier.

Les frais — et le champ qui manque partout ailleurs

ChampContenu
fee_amount / fee_assetLes frais réellement payés, dans la devise où ils ont été prélevés. Jamais convertis à l'import.
fee_scopeLes frais sont-ils déjà déduits des montants, ou s'ajoutent-ils ?

Ce dernier champ n'existe dans aucun format d'export que nous ayons examiné. C'est pourtant lui qui décide si les frais sont comptés une fois, deux fois, ou pas du tout — et l'erreur est invisible dans le résultat final. Quand la source ne permet pas de trancher, nous retenons l'hypothèse la plus prudente, celle qui sous-estime votre performance, et le rapport l'écrit.

La provenance

ChampContenu
source_idLe nom d'un format, pas d'une plateforme : kraken.trades, ledgerlive.csv, manual.<empreinte>. Un même acteur produit plusieurs exports incompatibles ; c'est le format que nous vérifions.
source_statuscertifié ou accepté — voir la partie 02.
account_refUn pseudonyme local, généré à l'import. Ce n'est ni une adresse, ni un identifiant de compte.

kraken.trades est le nom d'une chose que nous avons lue, pas d'une chose qu'il faut posséder.

Aucune plateforme n'est requise pour utiliser Sextant.

Les conventions, et pourquoi elles sont celles-là

SujetCe que nous faisons
NombresCalcul en décimal exact, jamais en virgule flottante. Aucun arrondi avant restitution. Le seul arrondi est celui de la restitution : au plus proche, et à égalité exacte vers le chiffre pair — 0,125 € donne 0,12 €, 0,135 € donne 0,14 €. Ce mode s’appelle l’arrondi au pair le plus proche (ROUND_HALF_EVEN) et il ne penche d’aucun côté. L’autre mode courant pousse chaque demi-centime à l’opposé de zéro : sur un rapport dont le chiffre de tête est un gain, c’est un biais systématique, minuscule, et dans le sens qui nous arrange. Nous avons pris celui qui ne nous arrange pas. Affichage : 2 décimales en euros, 8 en crypto. Nous publions le mode parce que sans lui vous ne pouvez pas retomber sur notre chiffre au centime. Sur trois ans d'historique, une dérive d'arrondi devient visible — un vérificateur ne peut pas en avoir.
Fuseau horaireTout est ramené en UTC — le temps universel coordonné, la référence mondiale indépendante de l'heure locale. Le fuseau d'origine de chaque source est consigné dans sa fiche. Une heure de décalage suffit à inverser l'ordre de deux opérations, et donc à fausser tout l'appariement — le rapprochement d'un achat et de la vente qui le solde.
DoublonsDeux exports qui se recouvrent, c'est le cas normal : certaines plateformes limitent chaque relevé à un an. Nous dédupliquons — et le nombre de doublons écartés est une ligne du rapport. Dédupliquer en silence serait un mensonge par omission.
Transferts entre vos propres comptesNous proposons, vous confirmez. Jamais appliqué en silence : les lire comme des ventes fabriquerait un gain qui n'existe pas, les ignorer effacerait les frais payés. Si vous passez cette étape, le rapport écrit que le périmètre multi-comptes n'est pas fiable. Ce que votre fichier déclare lui-même vaut confirmation : une ligne dont votre export dit qu’elle est un transfert interne n’est pas devinée, et nous ne vous la reproposons pas. La règle vise l’inférence, pas la déclaration — un rapprochement que nous établissons entre une sortie et une entrée, ou une nature de mouvement qui viendrait de notre table de correspondance d’en-têtes plutôt que de votre fichier.
Conversion en eurosTaux de référence de la Banque centrale européenne, au jour de chaque opération, source citée. Jamais un taux moyen, jamais celui du jour du rapport. Conséquence à connaître : le total en euros n'est pas la conversion du total en dollars. L’USDT et l’USDC sont traités comme le dollar — deux jetons dont la valeur est censée coller au dollar, et qui s’en écartent parfois de quelques dixièmes de pour cent. C’est une approximation, la seule que nous faisons sur une devise, et elle s’arrête à ces deux-là : aucun autre jeton stable n’y a droit tant que nous ne l’avons pas écrit ici. Nous l'écrivons plutôt que de la supposer — une approximation tue est indiscernable d’un calcul juste.
Jour sans taux BCELa Banque centrale européenne ne publie aucun taux les samedis, les dimanches et les jours de fermeture TARGET ; la crypto, elle, se négocie sept jours sur sept. Quand une opération tombe l’un de ces jours, nous retenons le dernier taux publié avant elle — le vendredi pour un samedi ou un dimanche — et le rapport cite la date du taux retenu, pas seulement le taux. Les deux autres lectures possibles sont écartées pour la même raison : le jour ouvré suivant et l’interpolation utilisent une information postérieure à l’opération, et un moteur de mesure ne regarde jamais dans le futur.
D’où viennent nos prixUn rapport qu’on ne peut pas refaire n’est pas une vérification. Nos séries de prix sont donc déposées à la main dans notre dépôt, et figées — jamais interrogées en direct. L’écart n’a rien de théorique : la même question posée demain à une source interrogée en direct n’y donne pas forcément la même réponse, et plus personne ne peut dire laquelle des deux a servi. Ici, chaque rapport cite la série qu’il a lue par son empreinte sha256 — l’identifiant unique d’un fichier, qui change au moindre octet — et par la plage de dates qu’elle couvre. Deux rapports qui portent la même empreinte ont lu exactement les mêmes chiffres. Dans dix ans aussi. Les taux euro/dollar viennent de la série historique de la Banque centrale européenne. Les prix des cryptomonnaies viennent de la place où l’opération a été exécutée — pour un fichier Binance, les données publiques de marché de Binance (data.binance.vision) : des fichiers mensuels datés dont Binance publie l’empreinte, que nous citons avec la nôtre. Le prix retenu est la clôture de la bougie d’une minute qui contient l’opération, en heure UTC — pas un prix du jour. La raison est mesurée, pas supposée : sur notre premier dossier réel, le prix réellement obtenu pour un même actif variait dans une même journée de 1,5 % en médiane, et jusqu’à 37 % sur une ligne ; un prix journalier aurait multiplié cet écart sur des centaines de lignes. Quand aucun échange n’a eu lieu pendant la minute de l’opération, nous retenons la dernière clôture connue dans les soixante minutes précédentes — jamais après l’opération — et la ligne le dit ; au-delà, l’opération sort du périmètre et est comptée. Le panier final est valorisé à la dernière minute UTC du jour de mesure. Un historique sans place d’exécution — un portefeuille — n’a pas encore de règle : elle sera écrite ici, datée, quand un fichier réel la posera, et pas avant.
Échange entre deux cryptomonnaiesValorisé au prix de la jambe envoyée à la minute de l’opération — ce qui est réellement sorti de votre poche. À défaut de série pour elle, au prix de la jambe reçue à la même minute. À défaut des deux, sorti du périmètre et compté.
Actifs reçus sans contrepartieTout actif reçu sans rien donner en échange est valorisé au prix de la minute où vous l’avez reçu — récompense de staking (immobiliser des cryptomonnaies contre récompenses), intérêts d’un produit d’épargne, distribution gratuite de jetons, gain promotionnel. Seule leur variation ultérieure est portée au crédit ou au débit de vos décisions. C’est l’absence de contrepartie qui décide, jamais le nom que votre plateforme donne à la ligne : une définition calée sur des libellés commerciaux se périme au premier changement d’interface, et ne tient déjà pas d’une plateforme à l’autre. Conséquence, et elle ne joue pas en notre faveur : ces actifs entrent aussi dans le panier qui vous compare à l’immobilité. Ils améliorent le scénario où vous n’auriez rien fait — donc ils durcissent le jugement porté sur vos décisions. Les exclure aurait rendu vos allers-retours plus beaux. C'est une convention de mesure — ce n'est pas un traitement fiscal, et cette page n'en donne aucun.
Coût de revientQuand une position n’est vendue qu’en partie, le coût de ce qui est vendu est calculé au prix moyen pondéré de l’actif — jamais en premier-entré-premier-sorti. Deux raisons : le moyen pondéré ne dépend pas de l’ordre des lignes, or l’ordre d’un export n’est pas toujours garanti ; et les autres méthodes sont des conventions fiscales, qui changent d’un pays à l’autre. C’est une convention de mesure, et cette page ne donne aucun traitement fiscal. Si votre comptabilité retient une autre méthode, l’écart est normal — et vous pouvez le refaire, puisque la nôtre est écrite ici.
Achat à crédit (marge)La marge — emprunter pour acheter plus que ce que vous avez déposé. C’est l’endroit où un pourcentage devient facilement flatteur : rapporter un gain à votre seul apport, en taisant l’argent emprunté qui l’a produit, gonfle le résultat sans qu’un seul chiffre soit faux. Nous ne le faisons pas. L’argent que vous empruntez compte comme de l’argent en jeu : il entre dans le capital comparé au moment où vous l’engagez, au même titre que le vôtre, et le plus haut qu’il fait atteindre reste acquis — un emprunt remboursé deux heures plus tard élève votre capital comparé pour la suite. C’est délibérément la lecture qui vous avantage le moins. Les intérêts d’emprunt forment une ligne distincte des frais : vous voyez séparément ce que vous a coûté faire des opérations et emprunter. Deux décisions différentes, deux factures différentes. ⚠️ Un emprunt n’est presque jamais déclaré comme tel dans un export, et ses intérêts ne le sont jamais. Quand nous le déduisons — des libellés pour l’emprunt, de l’écart entre emprunté et remboursé pour les intérêts — c’est une inférence, le rapport l’écrit, et elle n’est jamais maquillée en déclaration de votre part. Un export qui ne nomme pas ses emprunts les laissera passer inaperçus — et ça aussi, le rapport le dit. Une liquidation est nommée quand l’export la déclare ; si rien n’y distingue les ventes qu’elle a forcées de celles que vous avez décidées, le rapport compte les premières comme des décisions et le dit.
Appariement des positionsUn achat soldé par plusieurs ventes forme une seule position, close à la date de la dernière vente qui le solde. Compter chaque vente séparément gonflerait mécaniquement le taux de réussite dès qu’une sortie gagnante est fractionnée — exactement le genre d’effet que nous cherchons ailleurs.

⚠️ « Nos prix » et « les sources » ne sont pas la même chose. La liste de la partie 02 recense les formats de relevé dont nous avons vérifié le traitement — ce que vous nous envoyez. Les séries ci-dessus sont nos références de prix — ce avec quoi nous valorisons. Les deux sont indépendantes, et c’est délibéré : d’où viennent nos prix ne vous demande rien et ne dit rien de l’endroit où vous, vous avez acheté. Aucune plateforme n’est requise pour utiliser Sextant.

Ce que nous ne mesurons pas, et que nous refusons d'approximer

CasCe que nous en faisons
Liquidité fournie à un protocoleSorti du périmètre mesuré, et compté comme tel.
Passage d'une chaîne à une autreIndétectable sans que vous nous le disiez. Non déclaré, il apparaît comme une sortie puis une entrée — donc compté deux fois. Le rapport le signale.
Transaction échouée avec des frais payésComptée dans le coût cumulé, jamais dans le résultat par position.
Actif sans série de prix disponibleSorti du périmètre, et le rapport dit combien d'actifs sont concernés.

Chacun de ces cas peut être « traité » par une approximation qui produit un chiffre d'apparence normale. Aucune de ces approximations n'est vérifiable par vous. Approximer en silence serait exactement ce que nous reprochons au marché. Nous comptons donc ce que nous ne savons pas mesurer, et nous l'affichons.

Validation

Un rejet qui porte sur le fichier, puis trois niveaux appliqués ligne à ligne.

Rejet du fichier — version de format inconnue. Un fichier n’est lu que si ses colonnes se ramènent au contrat publié plus haut. Si elles ne s’y ramènent pas, nous rejetons le fichier entier et nous vous disons quelles colonnes manquent : nous ne lisons pas à moitié un format que nous ne reconnaissons pas. Ce rejet ne porte pas sur la provenance. Un fichier venant d’une source absente de la liste de la partie 02 est parfaitement lisible — il porte simplement la mention « source non certifiée ». Ne pas avoir testé un export et ne pas savoir le lire sont deux choses différentes, et nous ne les confondons pas.

Ensuite, ligne à ligne, trois niveaux :

  • Rejet — date absente ou illisible, deux jambes vides, frais sans devise.
  • Avertissement — portée des frais non renseignée, mouvement non qualifié. Ces avertissements ne bloquent rien : ils alimentent la partie 03 — Les limites.
  • Information — doublon écarté, ligne hors période.

La période d’un audit est celle que vous demandez, et elle est écrite sur le rapport. Si vous n’en demandez aucune, la période est celle de votre fichier — du premier au dernier mouvement — et alors aucune ligne n’est hors période. Une ligne écartée pour ce motif n’est pas un défaut de votre export : le rapport dit combien de lignes ont été mises de côté, et pour quelle fenêtre. À ne pas confondre avec la fenêtre où vos données et nos prix de référence se recouvrent : celle-là est une limite de nos prix, elle ne concerne que la comparaison au buy & hold.

Une ligne avertie reste comptée. Elle entre dans le décompte des événements mesurés et dans les mesures — c’est la conséquence directe du fait que les avertissements ne bloquent rien. En contrepartie, le rapport indique combien des événements retenus portaient un avertissement : un chiffre calculé sur des données averties sans le dire serait exactement le défaut que cette page existe pour rendre visible.

Un fichier partiellement lisible produit un rapport partiel. Jamais un échec silencieux.

↑ Sommaire