The Trading Journal Template You'll Actually Use (Free Copy)
The exact column structure to copy into Excel, Google Sheets, or Notion, the formulas that fill six columns for you, and the review cadence that keeps the sheet alive past week two.
Every trading journal template you download has the same failure mode. Twenty-something columns, all of them empty, all of them waiting for you to type into them at 4pm after a session that already took everything you had. You keep it up for four days. I have killed three journals exactly that way. The version below survived because most of its columns fill themselves: you type a ticker, click four dropdowns, paste in the numbers that were already sitting on your order ticket, and the sheet works out the rest. All of it is below as copy-paste text. A header row that splits itself into 18 columns the moment you drop it into A1, the six formulas that fill the computed half, and the same structure translated for Notion.
Quick Answer
A trading journal template needs 18 columns, and you should only be typing 12 of them. Date, ticker, direction, setup, grade, taken or skipped, entry, stop, target, and size go in before the trade. Exit price and one line of notes go in after. Risk, planned R:R, profit and loss in dollars and percent, R-multiple, and win or loss are formulas. The header row and all six formulas are copy-paste text further down this page, so a working sheet in Excel or Google Sheets is about two minutes away.
What Does a Trading Journal Actually Show You?
Things your broker statement structurally cannot. The statement is an accurate record of what happened to your money and it has no idea why. It knows you finished the month down $600. It does not know that every dollar of that came from one setup you keep taking because it worked spectacularly once in March.
That is the whole case for the columns. Each one exists so a question becomes answerable by sorting rather than by remembering. Tag every trade with a setup name and three months later you can sort by that column and find out that your bull flags are net positive and your reversal attempts are quietly funding them. Log a stop price and you can find out how often you actually respected it. Log the trades you skipped and you learn whether the ones you walk away from were genuinely worse than the ones you take.
The two columns that do the most work here are the setup tag and the R-multiple, because together they turn a pile of dollar amounts into a comparison. A $40 win on a small position and a $400 win on a large one look wildly different in a P&L column and can be the exact same trade in R terms. Which fields earn their place is its own argument, and I have made the longer version of it in the post on which journal metrics are worth tracking. This post is the implementation of that shortlist rather than a re-run of the debate.
Why Most Templates Die in Week Two
Friction, and it is almost never a discipline problem. A 20-column sheet filled in by hand after a losing session is a punishment, and you will skip one Tuesday, then the following Thursday, then the sheet is a museum. The number of columns is the wrong thing to cut, and cutting them is what most minimal templates get wrong: you end up with five columns that tell you nothing except that you lost money, which you already knew. Cut the number you have to type instead.
Run the count on the template below. Eighteen columns total. Six are formulas, so they are zero effort forever. Of the twelve that remain, four are dropdowns you click, four are numbers you already decided on before entry because they are your entry, stop, target, and size, one is the date, one is the ticker, and one is the exit price. That leaves exactly one field where you are composing a sentence from scratch, and that is the notes field. The deeper version of this argument, including how to keep a journal alive through a genuinely bad week, is in the piece on building a journaling habit that survives.
This assumes you take a handful of trades a day and log them by hand. If you are scalping 40 times a session, manual entry collapses and you want a journal app with a broker CSV import instead. The column structure still applies, you just should not be typing it. Same goes if you need tax lot reporting, which no hand-built sheet should be responsible for.
The Template: Every Column in the Sheet
Here is the full structure, and the quickest way to get it is to not type it. Select the line below, paste it into cell A1 of a blank Google Sheet or Excel workbook, and both apps split it on the tabs into 18 columns on their own. The letters in the table underneath match that order and every formula depends on it, so leave the columns where they land.
Date Ticker Direction Setup Grade Taken Entry Stop Target Size Risk $ Planned R:R Exit P&L $ P&L % R-multiple Win/Loss Notes
If the whole line lands in one cell instead, your clipboard stripped the tabs on the way over. Data, then Split text to columns, fixes it in a click. Here is what each of those 18 columns holds and whether you ever type into it.
| Column | Type | What goes in it | When |
|---|---|---|---|
| A. Date | Date | Session date. Default the cell to today so it costs one keystroke. | Pre-trade |
| B. Ticker | Text | The symbol, uppercase, so sorting groups it properly. | Pre-trade |
| C. Direction | Dropdown | Long or Short. Every profit and loss formula below reads this cell. | Pre-trade |
| D. Setup | Dropdown | Your own setup names, pulled from a second tab: bull flag, VWAP reclaim, opening range break. | Pre-trade |
| E. Grade | Dropdown | A+ through F. Your read on the setup quality, recorded before the outcome exists. | Pre-trade |
| F. Taken | Dropdown | Taken or Skipped, so the setups you passed on still get a row. | Pre-trade |
| G. Entry | Number | Planned entry price, or the actual fill once you are in. | Pre-trade |
| H. Stop | Number | The price that says the setup was wrong. Decided before entry or it is not a stop. | Pre-trade |
| I. Target | Number | First target. One is enough to start; add a T2 column later if you scale out. | Pre-trade |
| J. Size | Number | Shares or contracts. | Pre-trade |
| K. Risk $ | Formula | Distance to the stop times size. This is the number every other risk figure is measured against. | Computed |
| L. Planned R:R | Formula | Reward divided by risk, known before the trade runs. 2.4 means 2.4 to 1. | Computed |
| M. Exit | Number | Average fill on the way out. Stays blank on a skipped row. | Post-trade |
| N. P&L $ | Formula | Gross dollars, direction-aware so shorts do not come out backwards. | Computed |
| O. P&L % | Formula | Percent move on the position. Format the column as a percentage. | Computed |
| P. R-multiple | Formula | Profit and loss divided by the dollars you risked. +2.0 means you made twice your risk. | Computed |
| Q. Win/Loss | Formula | Derived from the sign of the profit and loss. Never typed, so it cannot be flattered. | Computed |
| R. Notes | Text | One line. Why you took it, what the market was doing, how you felt, what you would repeat. | Post-trade |
Two things about that ordering are deliberate. Risk and planned R:R sit at K and L, before the exit column, because both are computable the moment you have an entry, a stop, and a size. You know your reward-to-risk before the trade runs, not after, and seeing it land in the cell while you are still deciding is the point. If that ratio is doing less work in your process than it should, the breakeven math behind reward-to-risk is worth twenty minutes.
One row of the trading journal template, split by when each column gets filled
The notes field is the one everybody cuts and the one that repays the most. Keep it to a single line and give it a shape so you are not staring at a blank cell: why you took it, what the market was doing, and one thing you would repeat or avoid. Recording your state of mind there is genuinely useful in aggregate, with the caveat that a note written after a red trade is partly fiction, since you already know the outcome when you write it. That distortion is the subject of how emotion rewrites a trade in memory, and it is the reason the grade column further down gets recorded before the exit rather than alongside it.
How Do You Build This in Excel or Google Sheets?
Paste the header line into A1. In Excel, select that row and hit Ctrl+T to convert the range into a real table. That single step is what makes the sheet maintain itself, because Microsoft's documentation on calculated columns in a table puts it plainly: enter a single formula in one cell and it automatically expands to the rest of the column. Enter your P&L formula once, in row 2, and every future trade you log inherits it.
Then make the four dropdown columns actual dropdowns. Direction gets Long and Short. Taken gets Taken and Skipped. Grade gets A+ down to F. Setup points at a second tab where you list your own setup names, which means you can add one later without touching the main sheet. In Google Sheets this lives under Data and data validation, and Google's guide to creating an in-cell dropdown list covers both the range-backed and hand-typed versions. Dropdowns matter more than they look: they turn four typing decisions into four clicks, and they stop you writing "bull flag", "Bull Flag", and "bullflag" into the same column and breaking every count you later run against it.
Six formulas fill the computed columns, one each. Paste the line starting with an equals sign into the cell named directly above it, and the table carries it down the column for every trade you log after that. Google Sheets takes all six unchanged.
K2 (Risk $) =ABS(G2-H2)*J2 L2 (Planned R:R) =IFERROR(ABS(I2-G2)/ABS(G2-H2),"") N2 (P&L $) =IF(M2="","",IF(C2="Long",(M2-G2)*J2,(G2-M2)*J2)) O2 (P&L %) =IF(M2="","",IF(C2="Long",(M2-G2)/G2,(G2-M2)/G2)) P2 (R-multiple) =IFERROR(N2/K2,"") Q2 (Win/Loss) =IF(N2="","",IF(N2>0,"Win","Loss"))
That is the working sheet. Header row pasted, six formulas pasted, and you have not typed a single column name. The table below says what each of those formulas is actually doing and adds two summary formulas worth parking on a second tab.
| Cell | Formula | What it gives you |
|---|---|---|
| K2 (Risk $) | =ABS(G2-H2)*J2 | Dollars at risk if the stop fills. Works for longs and shorts without a direction check. |
| L2 (Planned R:R) | =IFERROR(ABS(I2-G2)/ABS(G2-H2),"") | Reward over risk. Stays blank until entry, stop, and target all exist. |
| N2 (P&L $) | =IF(M2="","",IF(C2="Long",(M2-G2)*J2,(G2-M2)*J2)) | Flips the subtraction for shorts. Blank until you fill in an exit. |
| O2 (P&L %) | =IF(M2="","",IF(C2="Long",(M2-G2)/G2,(G2-M2)/G2)) | Percent move on the position. Format the cell as a percentage, not a number. |
| P2 (R-multiple) | =IFERROR(N2/K2,"") | The single most useful number in the sheet. Makes a $40 win and a $400 win comparable. |
| Q2 (Win/Loss) | =IF(N2="","",IF(N2>0,"Win","Loss")) | Reads the profit and loss sign. A skipped row stays blank instead of counting as a loss. |
| Summary: win rate | =COUNTIF(Q:Q,"Win")/(COUNTIF(Q:Q,"Win")+COUNTIF(Q:Q,"Loss")) | Counts both outcomes explicitly. See the gotcha below for why this is not written the short way. |
| Summary: average R | =AVERAGE(P2:P500) | Ignores blanks and text on its own. Watch this number more closely than win rate. |
One gotcha worth knowing before it silently corrupts your win rate. A formula that returns an empty string still counts as non-empty to COUNTIF, so the tidy-looking COUNTIF(Q:Q,"<>") will happily count every blank-looking row your Win/Loss formula produced and quietly deflate the number. Counting Wins and Losses explicitly, as in the summary row above, avoids it. It is also why Win/Loss is a formula rather than a dropdown: a column you cannot type into is a column you cannot fudge on a bad day.
Column E is the one you cannot backfill
Every other column in this sheet can be reconstructed from your broker statement weeks later. The grade cannot, because it only means anything if it existed before the outcome did. Upload the chart screenshot and SnapPChart returns a grade from A+ to F with an entry, a stop, and the bear case, which is the value that goes in the cell.
Grade a setupThe Same Journal in Notion
Notion runs the same 18 columns as database properties rather than spreadsheet cells. Create a database, then set each property type: Date for the date, Title for the ticker, Select for Direction, Setup, Grade, and Taken, Number for entry, stop, target, size, and exit, Formula for the six computed columns, and Text for the notes. Notion's introduction to databases is the reference for the property system and the different views.
The formulas do not port. Notion has its own language that reads properties by name instead of by cell, so the P&L formula becomes something closer to if(prop("Direction") == "Long", (prop("Exit") - prop("Entry")) * prop("Size"), (prop("Entry") - prop("Exit")) * prop("Size")). Rewriting six formulas is a one-time cost of maybe fifteen minutes.
What you get for that is the thing spreadsheets are genuinely bad at. Every Notion row opens as its own page, so the chart screenshot lives inside the trade rather than floating over a grid of cells, and the notes field can run long on the trades that deserve it without wrecking your row height. You can also group a board view by Grade and see your A setups and your C setups as separate columns without writing a single formula. If the visual record of the setup matters more to you than the math, Notion is the better home.
Which Format Should You Use?
All three hold the same 18 columns, so this is a question about where you will actually open it rather than about features.
| What you care about | Excel | Google Sheets | Notion |
|---|---|---|---|
| What it costs | Paid, bundled with Microsoft 365 | Free with a Google account | Free on the personal plan |
| Formula syntax | The reference implementation | Near-identical, paste the same formulas | Its own language, every formula needs rewriting |
| Dropdown columns | Data Validation, list source | Data validation, renders as chips | Select property, built in with colors |
| Chart screenshot per trade | Floats over the cells, gets messy fast | Same problem, or a link to Drive | Row opens as a page, image lives inside it |
| Slicing by setup | Pivot tables | QUERY function or pivot tables | Group a view by Select, no formula needed |
| Logging from a phone | Workable but cramped | Fine, and the row is short enough | The most comfortable of the three |
| Where the data sits | Your machine, unless you sync it | Your Google account | On Notion servers |
| Best for | Traders already fluent in it | Most people, and the default pick | Traders who want the chart attached |
Google Sheets is the honest default for most traders. Free, opens anywhere, takes the formulas above with no edits, and the row is short enough that logging from your phone on the way home is realistic. Excel wins if you are already fluent in it. Notion wins if attaching the chart to the trade is the part you care about. A PDF or printed version is fine as a physical end-of-day sheet, but it cannot compute anything, so treat it as a capture device that gets typed up later rather than as the journal itself.
When Do You Fill It In and When Do You Review It?
The template is worthless without a filling rule and a reading rule, and those are two separate habits that fail for different reasons.
- Before entryTen columns, filled while you are still deciding. Date, ticker, direction, setup, grade, taken, entry, stop, target, size. If you cannot fill the stop cell, you do not have a trade yet, you have an urge. This half takes about twenty seconds once the dropdowns are in.
- Within minutes of the exitExit price and the one-line note, while the session is still in your head. Not tonight, not tomorrow. A note written six hours later is a reconstruction, and it will be a flattering one.
- Every skipped setupPre-trade half only, Taken set to Skipped, exit left blank. Fifteen seconds. These rows are the ones a broker statement can never give you.
- Once a week, 15 minutesThe actual review. Sort by setup and read the R column. Sort by grade and check whether your good grades outperformed your bad ones. Read the notes on your three worst trades. Write down one thing to do differently and nothing else, because a list of six changes is a list of zero changes.
- Once a month, brieflyZoom out. Is your average R moving? Is one setup carrying the account or quietly draining it? Monthly is where sample size starts being real, since a week of trades is mostly noise.
The weekly session is the one that gets skipped, and skipping it turns the whole sheet into data entry for nobody. Fifteen minutes on a Friday afternoon or a Sunday morning is enough if the columns are doing their job. If a trade from that week deserves more than a glance, the method for working back through it properly is in the walkthrough on re-grading a trade after you took it.
The Column Most Templates Leave Out
Column E, the grade, does not appear in any of the popular journal templates, and neither does column F, taken or skipped. Both are missing for the same structural reason: those templates are built to record what happened, and a grade is not something that happened. It is a judgment about setup quality made while the outcome is still unknown.
That timing is the entire value. A note written after the exit is contaminated by the result, which is why the same setup gets logged as "I forced it" when it loses and "I trusted my read" when it wins. A grade recorded before entry cannot be revised that way, so your weekly review is comparing a real prediction against a real outcome instead of against a memory that has been quietly edited. The full case for why recording after the fact leaves half the loop missing is laid out in the argument for grading before you log, and I would rather link it than repeat it here. What matters for the template is that both columns exist and that you fill them before you click.
You can grade setups yourself against a fixed written checklist and get most of the benefit, and plenty of people do. The reason a tool helps is consistency: your own bar quietly drops at 10:40am on a slow day when nothing has set up yet. SnapPChart grades a chart screenshot against the same rubric every time and hands back a letter grade with an entry, a stop, and the case against the trade, which is a value you copy into column E. Being clear about the boundary, since this category is full of vague claims: it does not keep your journal, sync with your sheet, import anything, or know whether you took the trade. It reads one static chart and scores the structure on it. The mechanics of that read are covered under AI chart analysis. The spreadsheet is yours and stays yours.
A grade does not predict whether the trade wins. It counts how many technical factors line up in your favor right now, which is a different claim and a much smaller one. Treat it as a second opinion that does not know you just lost money and is not excited about the move. Two columns, filled in fifteen seconds, that give your review something honest to score against.
Frequently Asked Questions
What should be in a trading journal?
Eighteen columns cover it: date, ticker, direction, setup name, pre-trade grade, taken or skipped, entry price, stop loss, target, position size, risk in dollars, planned reward-to-risk, exit price, profit and loss in dollars, profit and loss in percent, R-multiple, win or loss, and one line of notes. Ten go in before you click buy, two go in after the exit, and the remaining six are formulas you never touch. The notes field is the one traders skip and the one that pays, because it is the only column that records why you took the trade rather than what happened to it.
How do I create a trading journal in Excel?
Paste the tab-separated header line from this post into cell A1 and Excel splits it into eighteen columns on its own. Select that row and press Ctrl+T to turn the range into a real Excel table. That one step matters more than it sounds: inside a table, a formula entered once fills the entire column and keeps filling as you add rows, so your profit and loss column maintains itself. Then set Data Validation dropdowns on Direction, Setup, Grade, and Taken so those four are clicks instead of typing. Add a second sheet listing your setup names and point the Setup dropdown at it. Build the summary formulas on a third sheet. Pasting the headers and the six column formulas takes about two minutes, and the dropdowns and summary tab bring the full build to under ten. Google Sheets takes the same steps with nearly identical formula syntax.
Is there a free trading journal template?
Yes, and it is sitting in this post as copy-paste text. Select the tab-separated header line above, paste it into cell A1 of a blank Google Sheet or Excel workbook, and both apps split it into the 18 columns for you. Paste the six formulas into row 2 and the sheet calculates risk, planned reward-to-risk, profit and loss in dollars and percent, R-multiple, and win or loss from then on. That is the whole template, and it costs about two minutes. Delivering it as text rather than a file has a real advantage: no email signup, no macros from a stranger, no trade log sitting on a server you do not control, and no downloaded version going stale the moment you add a column. Paid journal apps earn their price once you are taking enough trades that manual entry breaks down or you want automatic broker imports, which is a volume problem rather than a template problem.
What is the best format for a trading journal: Excel, Google Sheets, or Notion?
Google Sheets is the default answer for most traders. It is free, it opens on any device, the formula syntax matches Excel almost exactly, and logging from your phone on the train home actually works. Pick Excel instead if you already live in it and want pivot tables. Pick Notion if attaching the chart screenshot to each trade matters more to you than formulas, because every Notion row opens as its own page and the image sits inside it rather than floating over a grid. The tradeoff with Notion is that its formula language is its own thing, so every spreadsheet formula has to be rewritten.
How do I log a trade I decided not to take?
Fill in the pre-trade half, set the Taken column to Skipped, and leave the exit blank. The row costs you about fifteen seconds and it is the row most journals cannot produce, because a log that only records fills has no evidence that you passed on anything. Over a few months those rows answer a question your fills cannot: whether the setups you walk away from were genuinely worse than the ones you take. If your skipped rows are full of clean setups and your taken rows are full of marginal ones, the problem is selection rather than execution.
This article is for educational and informational purposes only and does not constitute financial advice. The example figures, setups, and formulas here are illustrative teaching aids rather than trade recommendations or records of actual trades, and the spreadsheet formulas are provided as-is for you to verify against your own data before relying on them. A trading journal is a tool for review and does not guarantee improved results. Day trading carries a substantial risk of loss and is not suitable for every investor. AI analysis evaluates chart structure, levels, and visible indicator behavior; it does not guarantee trade outcomes and does not store or maintain your trading records. Always do your own research and never trade with money you cannot afford to lose.
Writes about AI-assisted day trading, technical analysis, and the systems traders actually use to stay disciplined.
Fill the grade column before you know how it ends
The spreadsheet stays yours. SnapPChart handles the pre-trade half: upload the chart screenshot and it grades the setup A+ to F with an entry, a structural stop, and the case against the trade. Copy the grade into column E before the outcome exists, and your weekly review has a real prediction to score.