Guide

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.

Joakim JusellWritten by , trading coach at Jusell Trading Academy
Updated 11 min read

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.

A spreadsheet is fine if
  • You take a handful of trades a day
  • You like knowing exactly how every number is calculated
  • You trade something no journal imports yet
Use Actal instead if
  • 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.

One thing before any formulas. Fill it in the same day you trade. Once a journal is a week behind you stop reviewing it, and then there's no point having one.

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.

ColumnHeaderWhat goes in it
ADateThe trade date. Has to be a real date, not text, or the weekly formulas won't work.
BSymbolMNQ, ES, CL, AAPL. Spell it the same way every time.
CSideLong or Short, picked from a list.
DQtyContracts or shares.
EEntryYour average entry price.
FExitYour average exit price.
GStopWhere your stop was when you got in. Not where you moved it to.
HPoint valueWhat one point is worth per contract. MNQ 2, MES 5, NQ 20, ES 50, CL 1,000. Shares 1.
IFeesCommissions and fees for the whole trade.
JPointsFormula
KGross P&LFormula
LNet P&LFormula
MRisk $Formula
NRFormula
OSetupWhich setup it was, picked from a list.
PIn plan?Y if it was in your plan for the day, N if it wasn't.
QGradeA to F for how well you traded it. Not for what it made.
RMistake 1Picked from a list. Leave it empty if the trade was clean.
SMistake 2For the trades where you managed two.
TNoteOne sentence about why you took it.
ULessonWhat 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.

CellFormulaWhat 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.

ColumnResultHow
Points34.5023,446.75 minus 23,412.25
Gross P&L$138.0034.50 x 2 x 2
Net P&L$132.80$138.00 minus $5.20
Risk $$57.0014.25 points to the stop x 2 x 2
R2.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.

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.

NumberFormulaWhy 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.

QuestionFormulaHow 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 gradeIf 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 D5The 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.

CellFormulaWhat 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

Make a Trades sheet with columns for date, symbol, side, quantity, entry, exit, stop, point value and fees. Add formulas for points, gross and net P&L, risk and R. Then add setup, in plan, grade and mistake columns with dropdowns, and a Dashboard sheet that uses COUNT, COUNTIF, SUMIF and AVERAGE on the Trades sheet.
See what your trades say about you.

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.

Joakim Jusell
About the author
Joakim Jusell

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.