How to make a trading journal in Excel or Google Sheets
Every one of my students starts out on a spreadsheet. This is the one I set up for them, column by column, with every formula. It takes about an hour to build. If you don't want to build it yourself, you can download the finished file for free.
The short version
If you take a few trades a day, a spreadsheet works. Build the columns below, add the dashboard and look at it every Friday. Don't want to build it? Grab the free template. And if typing in fills is taking you longer than reviewing the trades, that's what Actal is for.
- You take a handful of trades a day
- You like knowing exactly how every number is calculated
- You trade something no journal imports yet
- Your platform exports fills and matching them up by hand takes forever
- You trade more than one account
- You'd rather be told what to fix than work it out yourself on Friday
Before you start
You can build this from scratch by following along. Or skip that and download the free template. It's the exact sheet this guide makes, already set up with a few example trades. Everything here is normal formulas with no macros, so it works in Excel, Google Sheets, Numbers and LibreOffice.
The columns
Make a sheet called Trades and put these headers in row 1. Keep the same letters, because the formulas below use them. J to N are formulas. The rest you type in or pick from a list.
| Column | Header | What goes in it |
|---|---|---|
| A | Date | The trade date. Has to be a real date, not text, or the weekly formulas won't work. |
| B | Symbol | MNQ, ES, CL, AAPL. Spell it the same way every time. |
| C | Side | Long or Short, picked from a list. |
| D | Qty | Contracts or shares. |
| E | Entry | Your average entry price. |
| F | Exit | Your average exit price. |
| G | Stop | Where your stop was when you got in. Not where you moved it to. |
| H | Point value | What one point is worth per contract. MNQ 2, MES 5, NQ 20, ES 50, CL 1,000. Shares 1. |
| I | Fees | Commissions and fees for the whole trade. |
| J | Points | Formula |
| K | Gross P&L | Formula |
| L | Net P&L | Formula |
| M | Risk $ | Formula |
| N | R | Formula |
| O | Setup | Which setup it was, picked from a list. |
| P | In plan? | Y if it was in your plan for the day, N if it wasn't. |
| Q | Grade | A to F for how well you traded it. Not for what it made. |
| R | Mistake 1 | Picked from a list. Leave it empty if the trade was clean. |
| S | Mistake 2 | For the trades where you managed two. |
| T | Note | One sentence about why you took it. |
| U | Lesson | What you'd do differently. Often empty, that's fine. |
Most templates stop at column N. P to S are the ones I care about most as a coach. Was it in your plan, how well did you trade it, and what went wrong. It's ten seconds per trade and they're the only columns that tell you what to work on.
Formulas for each trade
Put these in row 2 and drag them down. 500 rows is about a year for most people. They all start with IF(A2="","", so empty rows stay blank instead of filling up with zeros.
| Cell | Formula | What it does |
|---|---|---|
| J2 Points | =IF(A2="","",IF(C2="Long",F2-E2,E2-F2)) | Points won or lost, works for longs and shorts |
| K2 Gross P&L | =IF(A2="","",J2*H2*D2) | Points x point value x contracts |
| L2 Net P&L | =IF(A2="","",K2-I2) | Gross minus fees |
| M2 Risk $ | =IF(A2="","",IF(G2="","",ABS(E2-G2)*H2*D2)) | How much you had at risk to your stop |
| N2 R | =IF(A2="","",IF(M2="","",IF(M2=0,"",L2/M2))) | What you made or lost compared to what you risked |
Check it with a trade. Say you went long 2 MNQ at 23,412.25, got out at 23,446.75, your stop was 23,398.00 and fees were $5.20.
| Column | Result | How |
|---|---|---|
| Points | 34.50 | 23,446.75 minus 23,412.25 |
| Gross P&L | $138.00 | 34.50 x 2 x 2 |
| Net P&L | $132.80 | $138.00 minus $5.20 |
| Risk $ | $57.00 | 14.25 points to the stop x 2 x 2 |
| R | 2.33 | $132.80 divided by $57.00 |
Same numbers? Then your sheet is right. If Gross P&L is way off, like ten times too big, your point value is wrong. That's the most common mistake I see in futures spreadsheets by far.
Dropdowns and colours
If you type your mistakes in by hand, you'll end up with chased entry, chased and chase entry as three different mistakes, and the numbers stop meaning anything. Use dropdowns. Make a sheet called Lists with a column each for Side, Setups, Grades, Mistakes and Y/N.
- In Excel, select column C on Trades, go to Data, Data Validation, pick List and point it at the Side column on Lists. Do the same for Setup, In plan, Grade and both Mistake columns.
- In Google Sheets, select the column, go to Data, Data validation, Add rule, and choose Dropdown (from a range).
- Make Net P&L green above zero and red below with conditional formatting.
- Colour the grades too, A and B green, D and F red. When you scroll back through a month, the grade colours tell you a lot more than the P&L colours do.
- For the mistake list, start with the ones you already know you do. Moved stop, chased entry, oversized, revenge trade, early exit, no stop. When a new one shows up, add it to the list instead of typing it once.
The dashboard
Make a new sheet called Dashboard. These formulas read rows 2 to 500 on Trades. In Google Sheets you can just write L2:L to cover every row.
| Number | Formula | Why you want it |
|---|---|---|
| Trades | =COUNT(Trades!L2:L500) | Under 30 trades, don't read too much into anything else |
| Win rate | =COUNTIF(Trades!L2:L500,">0")/COUNT(Trades!L2:L500) | Means nothing on its own, only next to average win and loss |
| Net P&L | =SUM(Trades!L2:L500) | The total |
| Expectancy per trade | =AVERAGE(Trades!L2:L500) | What an average trade is worth to you. This is the one that tells you if you have an edge. |
| Average win | =AVERAGEIF(Trades!L2:L500,">0") | |
| Average loss | =AVERAGEIF(Trades!L2:L500,"<0") | |
| Profit factor | =SUMIF(Trades!L2:L500,">0")/ABS(SUMIF(Trades!L2:L500,"<0")) | Total wins divided by total losses. Under 1 means you're losing money. |
| Average R | =AVERAGE(Trades!N2:N500) | Same as expectancy but in R, so different sizes compare |
Most dashboards stop there. These next four are the ones I actually look at with students.
| Question | Formula | How to read it |
|---|---|---|
| What do my A trades make compared to my D trades? | =SUMIF(Trades!Q2:Q500,"A",Trades!L2:L500), one row per grade | If your A trades lose, the setup needs work. If your D trades make money, you're getting paid to build a bad habit. |
| What has each mistake cost me? | =SUMIF(Trades!R2:R500,D5,Trades!L2:L500)+SUMIF(Trades!S2:S500,D5,Trades!L2:L500), with the mistake name in D5 | The most negative row is what you work on next week |
| How often do I stick to my plan? | =COUNTIF(Trades!P2:P500,"Y")/(COUNTIF(Trades!P2:P500,"Y")+COUNTIF(Trades!P2:P500,"N")) | Put it next to the next row |
| P&L in plan vs off plan | =SUMIF(Trades!P2:P500,"Y",Trades!L2:L500), then the same with "N" | If in-plan trades make money and off-plan trades lose it, the plan is fine. Following it is the problem. |
Weekly stats and drawdown
For weekly numbers, put the Monday's date in B30 and count that week's trades with =COUNTIFS(Trades!A2:A500,">="&B30,Trades!A2:A500,"<="&B30+6). Change COUNTIFS to SUMIFS and add Trades!L2:L500 as the first part to get that week's P&L. Same idea with the Grade or In plan columns.
For max drawdown you need three extra columns after Lesson. They're not in the template, so add them if you want them.
| Cell | Formula | What it is |
|---|---|---|
| V2 Running P&L | =IF(L2="","",SUM($L$2:L2)) | Your equity curve, one row per trade |
| W2 Peak | =IF(V2="","",MAX(0,MAX($V$2:V2))) | The highest it's been so far |
| X2 Drawdown | =IF(V2="","",V2-W2) | How far you are below that high |
| Dashboard | =ABS(MIN(Trades!X2:X500)) | Your biggest drawdown in dollars |
Make a line chart from column V and you've got an equity curve. If you're doing a prop firm eval, check your drawdown against the firm's limit every day. I go into why in the prop firm guide.
If you use Google Sheets
- All the formulas above work as they are. You can also write open ranges like L2:L so you never have to extend them.
- You can fill a whole column with one formula using ARRAYFORMULA. For Points in J2: =ARRAYFORMULA(IF(A2:A="","",IF(C2:C="Long",F2:F-E2:E,E2:E-F2:F))). Don't drag it down, it fills in by itself.
- If you type dates like 14/09/2026 in a sheet set to US format, they turn into text. Set File, Settings, Locale to match how you write dates before you start.
- To bring in a CSV from your platform, use File, Import, Upload, Insert new sheet, then copy what you need over to Trades.
- Sheets gets slow after a few thousand rows of formulas. When that happens, move last year to its own tab and paste it as values.
Mistakes I see all the time
- Wrong point value. Log an MNQ trade with 20 instead of 2 and a normal day looks like you blew up the account.
- Grading on the result. If you weren't supposed to take the trade, it's a D, even if it made money. If every winner gets an A, your grade column is just your P&L column again.
- Changing the stop afterwards. Put in the stop you had when you got in. If you moved it, tag it as a mistake.
- Typing mistakes instead of picking them from a list. You end up with the same habit spread over five spellings and none of them look expensive.
- Putting every fill on its own row. A scale-out is one trade with an average exit, not three trades. Matching up fills by hand is where most people give up on the sheet.
Getting trades in from your platform
Every platform exports a CSV, but it's fills or orders, not finished trades. You'd have to match entries with exits, average out partial fills, split up accounts and fix the time zone. Fine at five trades a day. Not much fun at twenty.
That's the part Actal does for you. It reads the export from NinjaTrader, Tradovate, Rithmic, TradingView and seven others, puts the trades together, and does everything in this guide plus the grades, mistake costs and plan tracking. It's free while it's in beta. I also wrote about when a spreadsheet is still the better choice.
Who wrote this
I'm Joakim. I trade index futures and coach traders one-on-one at Jusell Trading Academy, and my students start on a sheet like this one. I checked every formula in Excel and Google Sheets with the example trade above, and they're the same formulas that are in the free template. Actal is my product.
Questions people ask
Drop in one export. In a minute Actal grades the trades it can, prices the mistakes you tagged, and tells you the first thing to fix. Free during beta, no card.

Full-time index futures trader. Coaches traders one-on-one at Jusell Trading Academy, five students at a time, since 2020. No platform was built for developing traders, so he had his own coaching software built; old students loved it and kept coming back, and Actal is that software turned into a proper journal for what matters.