Journal de trades — template Sheets
Template pour Google Sheets / Excel / Numbers. Pensé pour les 30 premiers trades démo (gate du KANBAN root avant Hermes), mais tient pour les 1000 suivants.
Critère #1 d'un bon journal : il est rempli. Un journal parfait pas rempli ne vaut rien. Vise 60 secondes par trade, pas 10 minutes.
Pourquoi un journal
Sans journal, tu vas répéter les mêmes erreurs sans le savoir, et tu n'auras pas de baseline pour évaluer Hermes quand il démarrera.
Avec un journal, tu peux répondre à des questions concrètes :
- Mon hit-rate sur Pullback long est-il vraiment > Range trading ?
- Sur quelles sessions je perds le plus (London / L+NY / NY) ?
- Combien de trades j'ai pris en mode FOMO ces 30 derniers jours ?
- Mon R:R réalisé moyen est-il aligné avec le R:R cible (1.5-2.0) ?
- Quand je déplace un stop (« move_stop »), est-ce que ça finit en gain ou en perte aggravée ?
Sans data, tout ça est pur ressenti — donc faux 80% du temps.
Format Sheets — 2 onglets
Onglet 1 : trades (le journal principal)
Une ligne par trade exécuté en démo. Champs alignés sur le schéma
SQLite de Hermes (cf. KANBAN.md Phase 5b) — au moment où Hermes
démarrera, tu pourras importer ce CSV directement dans signals_taken.
Headers CSV (à copier-coller dans la 1ʳᵉ ligne)
id,date_time,pair,tf,direction,setup_type,session,entry_price,stop_price_initial,tp_price_initial,size_units,exit_date_time,exit_price,exit_reason,pnl_pips,pnl_eur,r_multiple,emotion_entry,emotion_exit,error_made,filters_passed,notes
Description colonne par colonne
| # | Colonne | Type | Exemple | Comment remplir |
|---|---|---|---|---|
| 1 | id |
int | 1, 2, 3... | Auto-incrément. T-001, T-002 si tu préfères les préfixes. |
| 2 | date_time |
datetime | 2026-04-28 18:42 | Heure d'entry. Format ISO recommandé. |
| 3 | pair |
text | EURUSD | V1.5 = toujours EURUSD, mais on garde la colonne. |
| 4 | tf |
text | H1 | Timeframe d'exécution. |
| 5 | direction |
text | long ou short | |
| 6 | setup_type |
text | pullback_ema50 | 1 des 4 codes (cf. § codes). |
| 7 | session |
text | london_ny | Session forex au moment de l'entry (cf. § codes). |
| 8 | entry_price |
float | 1.08502 | 5 décimales pour EUR/USD. |
| 9 | stop_price_initial |
float | 1.08172 | Stop placé à l'entry (avant tout ajustement). |
| 10 | tp_price_initial |
float | 1.09162 | TP placé à l'entry. |
| 11 | size_units |
int | 14 700 | Position size en unités (Oanda/MT5). |
| 12 | exit_date_time |
datetime | 2026-04-29 03:14 | Quand le trade s'est fermé. |
| 13 | exit_price |
float | 1.08842 | Prix réel de fermeture. |
| 14 | exit_reason |
text | tp / sl / manual / killswitch / expiry | Pourquoi tu es sorti. |
| 15 | pnl_pips |
float | +66 ou -33 | Auto-calculé : sign(direction) × (exit_price - entry_price) / 0.0001. |
| 16 | pnl_eur |
float | +61.38 | Auto-calculé : pnl_pips × 0.93 × size_units / 10000. |
| 17 | r_multiple |
float | +2.0 ou -1.0 | Auto-calculé : pnl_pips / abs(stop_price_initial - entry_price) × 0.0001. |
| 18 | emotion_entry |
text | calm | Cf. § codes. À remplir à la prise du trade. |
| 19 | emotion_exit |
text | relieved | Cf. § codes. À remplir à la sortie. |
| 20 | error_made |
text | none ou move_stop | Cf. § codes. Honnêteté brutale obligatoire. |
| 21 | filters_passed |
int | 5 | Combien des 5 filtres macro étaient OK (toujours 5 si tu as suivi la checklist). |
| 22 | notes |
text | "Bonne discipline" | 1 phrase, pas un essai. |
Onglet 2 : skipped (les presque-trades — IMPORTANT)
Ce 2ème onglet est ce qui sépare un journal amateur d'un journal pro. 90% des traders débutants ne le tiennent pas.
Pourquoi le tenir :
- Calibre tes filtres : si 80% des skips se révèlent gagnants 24h après, tes filtres sont trop restrictifs.
- Mesure ta discipline : si tu sautes 8 setups par semaine, tu es vigilant. Si tu en sautes 0, tu prends tout = sur-trading.
- Nourrit Hermes plus tard : la même base sert à tuner les filtres du risk gate.
Headers CSV
id,date_time,session,candidate_setup,reason_skipped,multi_tf_status,score_seen,what_happened_24h,note
| # | Colonne | Type | Exemple | Description |
|---|---|---|---|---|
| 1 | id |
int | S-001 | ID skip distinct. |
| 2 | date_time |
datetime | 2026-04-28 14:22 | Heure du presque-trade. |
| 3 | session |
text | london_ny | Session courante. |
| 4 | candidate_setup |
text | pullback_ema50 long | Le setup envisagé. |
| 5 | reason_skipped |
text | news_blackout | 1 des 11 critères SKIP (cf. § codes). |
| 6 | multi_tf_status |
text | aligned, mixed, neutral | État du bandeau multi-TF. |
| 7 | score_seen |
float | +42 ou -28 | Score React au moment du skip. |
| 8 | what_happened_24h |
text | winner / loser / range | À remplir 24h après — ce que tu aurais eu si tu avais pris. |
| 9 | note |
text | "BCE meeting dans 2h" | 1 phrase. |
Codes standardisés (vocabulaire fixe)
Pour pouvoir filtrer/grouper par la suite, garde un vocabulaire strict.
setup_type
pullback_ema50— Pullback EMA50 (la stratégie sweet spot)range_trading— Range tradingdivergence_hunter— Divergence RSIichimoku_trend— Ichimoku trend followingautre— utilise SEULEMENT en cas de force majeure (ex: trade manuel dehors de la stratégie pour cause de retournement évident). Note bien dansnotes. Si > 10% de tes trades sontautre, tu as un problème de discipline.
session
london— 07h-12h UTC = 09h-14h CET (en gros, varie un peu)london_ny— 12h-17h UTC = 14h-19h CET (overlap, pic d'activité)ny— 17h-21h UTC = 19h-23h CET (NY afternoon)asia— ne devrait JAMAIS apparaître si tu suis la checklist
exit_reason
tp— TP atteint, sortie automatiquesl— SL atteint, sortie automatiquemanual_better— sortie manuelle anticipée alors que ça allait dans le bon sens (souvent une erreur — voir si tu as raté du gain)manual_worse— sortie manuelle pour limiter la perte (souvent OK si motif valide)killswitch— déclenchement automatique du killswitch (drawdown -5%, etc.)expiry— sortie forcée vendredi 22h ou avant news rouge
emotion_entry
calm— focus normal, plan respectéexcited— euphorie après gain, méfianceunsure— hésitant — note si tu valides quand mêmefomo— peur de rater le mouvement — rouge en généralforced— pris parce que tu cherchais à trader, pas parce que setup A+revenge— après une perte, pour récupérer — rouge absolu
emotion_exit
calm— exécution propre, plan respectérelieved— soulagement après stress (= position trop grosse ?)frustrated— frustré du résultat (= attentes mal calibrées ?)regretful— regret de l'exécution (move_stop, premature exit, etc.)confident— calme et satisfait, peu importe gain/perte
error_made
none— exécution propre selon le planmove_stop— stop déplacé après ouverture (très grave en V1.5)move_tp— TP déplacé (parfois OK si trailing planifié, sinon erreur)premature_exit— sorti avant SL/TP par peur, pas par stratégielate_entry— entré 5+ pips après le signal optimalfomo— pris en mode FOMOrevenge— pris en mode revengeover_size— taille > 1% du capitalwrong_setup— entré sur un setup que tu ne sais pas valider rétroactivementnews_violation— entré dans la fenêtre 90min ± news rougemulti_tf_violation— entré sans multi-TF alignedother— décris dansnotes
reason_skipped (onglet 2) — 15 codes alignés sur la checklist
Aligné avec les 11 critères SKIP de CHECKLIST_PRE_TRADE.md
- 4 codes additionnels capturant des cas Phase 1-2-3 plus granulaires.
Mappés directement sur les 11 SKIP critères de la checklist :
mental_state— état mental dégradé (CHECKLIST #1)news_blackout— news rouge dans 90min ± (CHECKLIST #2)multi_tf_mixed— bandeau React orange / divergence (CHECKLIST #3)setup_partial— conditions du setup non toutes remplies (CHECKLIST #4)stop_too_wide— stop > 1.5× ATR moyen, setup mal calibré (CHECKLIST #5)rr_too_low— R:R < 1.5 (CHECKLIST #6)oversize— position size > 1% du capital (CHECKLIST #7)over_max_trades— déjà 2 trades pris cette session (CHECKLIST #8)losing_streak— 3 pertes consécutives, session fermée (CHECKLIST #9)friday_late— vendredi après 19h CET (CHECKLIST #10)cant_explain— tu n'arrives pas à expliquer le setup en 2 phrases (CHECKLIST #11)
Granularité supplémentaire (sub-cas Phase 1-2) :
session_inactive— sub-cas demental_statemais quand c'est l'horaire qui bloque (Asia, 22h-08h CET)score_low— sub-cas desetup_partialquand le filtre principal est le score (-25 à +25)cooldown— sub-cas deover_max_tradesquand le cooldown 4h paire+sens est encore actifpressure_time— sub-cas demental_statequand c'est la pression temporelle (< 30 min dispo)
Note : session_inactive, score_low, cooldown, pressure_time sont des
raffinements des critères CHECKLIST. Tu peux mapper en sous-catégorie
ou utiliser le code parent — au choix selon ton style de journalisation.
Pour des stats hebdo simples, garder les 11 codes parents. Pour identifier
finement les motifs de skip, utiliser les 15 codes complets.
Formules pour les colonnes auto-calculées
pnl_pips (colonne 15)
=IF(direction="long",
(exit_price - entry_price) / 0.0001,
(entry_price - exit_price) / 0.0001)
pnl_eur (colonne 16)
Approximation pour EUR/USD avec compte EUR :
=pnl_pips * 0.93 * size_units / 10000
Le 0.93 vient du taux EUR/USD ≈ 1.08 (1/1.08). Précision suffisante pour le journal — pour la compta exacte, regarde Oanda.
r_multiple (colonne 17)
=pnl_pips / (ABS(stop_price_initial - entry_price) * 10000)
Pour un stop de 33 pips et un gain de +66 pips → R = +2.0. Pour une perte au stop → R = -1.0. C'est la métrique reine.
Routines d'analyse
Quotidien (5 min, fin de session)
À chaque fin de session de trading, avant de fermer ton ordi :
- ☐ Tous les trades du jour sont enregistrés dans l'onglet
trades? - ☐ Tous les skips notables enregistrés dans
skipped? - ☐ Note dans
notesdu dernier trade : 1 phrase sur la session - ☐ Drawdown journalier ? Si > -2.5% → sentinelle pour demain
Hebdomadaire (15 min, dimanche soir)
Avant de préparer la semaine prochaine, ouvre le Sheets et calcule :
Stats de la semaine
─────────────────────
Trades pris : ___
Trades gagnants : ___ (___%)
R:R réalisé moyen : ___
P&L total : ___ €
Drawdown max : ___ %
Skips notés : ___
% trades avec error_made ≠ none : ___% (cible : descend chaque semaine)
Questions à te poser :
- Mon
error_madele plus fréquent cette semaine ? Quoi faire la semaine prochaine ? - Hit-rate par
setup_type? Y a-t-il un setup à éviter sur le marché actuel ? - Hit-rate par
session? Une session est-elle systématiquement perdante ? - Mes
emotion_entry = fomocette semaine — combien sont devenus perdants ?
Mensuel (30 min, dernier dimanche du mois)
Tableau de bord plus large :
Stats du mois
──────────────
Trades pris : ___
Hit-rate : ___%
Profit Factor : ___ (cible > 1.5)
Sharpe ratio approx : ___
Drawdown max : ___ %
Capital final / capital initial : ___ %
Questions à te poser :
- Suis-je discipliné ?
% trades sans error_made>= 80% ? - Mes filtres sont-ils bien calibrés ?
skipped → winner_24h< 50% ? - Quelle stratégie performe le mieux ce mois ? Garder l'allocation ?
- Quelles séries de pertes consécutives ? Comment ai-je géré ?
Mini-template prêt à l'emploi
Pour démarrer en 3 minutes : copie ces 2 lignes dans ton Sheets, c'est parti.
Onglet trades (ligne 1)
id date_time pair tf direction setup_type session entry_price stop_price_initial tp_price_initial size_units exit_date_time exit_price exit_reason pnl_pips pnl_eur r_multiple emotion_entry emotion_exit error_made filters_passed notes
Onglet skipped (ligne 1)
id date_time session candidate_setup reason_skipped multi_tf_status score_seen what_happened_24h note
Exemple d'une ligne trade pleine (long Pullback EMA50)
T-001 2026-04-28 18:42 EURUSD H1 long pullback_ema50 ny 1.08502 1.08172 1.09162 14700 2026-04-29 03:14 1.09162 tp +66 +90.18 +2.0 calm confident none 5 "Setup A+ propre, multi-TF aligned, hammer EMA50"
Exemple d'une ligne trade perte avec erreur
T-002 2026-04-29 16:15 EURUSD H1 short pullback_ema50 london_ny 1.08850 1.09180 1.08190 12500 2026-04-29 17:42 1.09180 sl -33 -38.36 -1.0 unsure frustrated late_entry 4 "Entré 8 pips trop tard, signal validé tardivement, rang non respecté"
Exemple d'une ligne skip (filter_passed)
S-001 2026-04-28 14:22 london_ny pullback_ema50_short news_blackout aligned -38 loser "BCE meeting dans 2h - skip prudent"
Comment importer dans Hermes plus tard
Au moment où Hermes démarrera (Phase H4 du KANBAN root), tu pourras importer tes 30+ trades manuels comme baseline :
# Dans hermes/ après le démarrage de l'agent
uv run python -m src.tools.import_journal \
--csv ~/Documents/journal_trades.csv \
--table signals_taken
(ce script n'existe pas encore — il sera implémenté Phase H1 si jugé utile.)
L'objectif : Hermes connaît ta baseline manuelle et peut comparer ses propres signaux avec ce que tu aurais pris à la main. C'est exactement le mécanisme qui détecte les biais de l'agent.
Liens
- Checklist pré-trade — la procédure d'exécution
- Stratégies détaillées — fiches des 19 stratégies
- KANBAN monorepo — plan général