How to Make a Trading Journal in Notion

Short answer

Make a Trades database with Entry, Exit, Size, Fees and Risk. A P&L formula works out each result, R divides it by what you risked, and the Calculate row gives net P&L, average R and a win rate from a view that leaves out open trades.

Rather skip the setup? Our Trading Journal 2027 is ready to use, $15 once.
A trading journal in Notion: our test trades with P&L, R, Result and a win rate, the Closed trades filter, and a setup’s stats in our Trading Journal

Try it: close a trade

Six trades, one still open. Type an exit price and watch P&L, R and the result change, the same way the formulas below work in Notion. The numbers at the top are the ones Notion’s Calculate row gives.

Net P&L $256.00

Win rate 60% 3 wins of 5 closed

Average R 0.44

  • AAPL Long Entry 180 Size 50 Fees $2.00 Risk $150.00
    $298.00 R 1.99 Win
  • EUR/USD Short Entry 1.085 Size 10000 Fees $0.00 Risk $50.00
    $30.00 R 0.6 Win
  • TSLA Long Entry 250 Size 20 Fees $2.00 Risk $100.00
    -$122.00 R -1.22 Loss
  • SPY Short Entry 520 Size 10 Fees empty Risk $60.00
    $50.00 R 0.83 Win
  • NVDA Long Entry 900 Size 5 Fees $1.00 Risk $75.00
    P&L empty R empty Open
  • MSFT Long Entry 410 Size 10 Fees $0.00 Risk $40.00
    $0.00 R 0 Breakeven

Type an exit for NVDA to close it, or change any exit and watch P&L, R and the win rate.

1. Set up the Trades database

Each trade is one page. Make a table called Trades and give it these properties:

PropertyTypeWhat it holds
TradeTitleThe symbol, like AAPL or EUR/USD
DateDateThe day you opened it
DirectionSelectTwo options: Long and Short
EntryNumberYour entry price
ExitNumberYour exit price, empty while the trade is open
SizeNumberShares, or units for forex
FeesNumberCommission for the whole trade
RiskNumberWhat you’d lose if your stop were hit

Open Fees and Risk, pick Edit property and set Number format to your currency. Name the Direction options exactly Long and Short: the formula looks for the word Short.

2. The P&L formula

Add a Formula property called P&L and paste this:

P&L
if(
  empty(prop("Exit")),
  toNumber(""),
  (prop("Exit") -
    prop("Entry")) *
    prop("Size") *
    if(
      prop("Direction") ==
        "Short",
      -1,
      1
    ) -
    if(
      empty(prop("Fees")),
      0,
      prop("Fees")
    )
)

It takes Exit minus Entry, times Size, flips the sign for a short and takes off the fees. An empty Fees counts as 0. With no Exit, the trade is still open and P&L stays empty. Set its Number format to your currency too. Here’s what Notion showed in our test:

TradeWhat happenedP&L
AAPLLong 180 to 186, 50 shares, $2 fees$298.00
EUR/USDShort 1.085 to 1.082, 10,000 units$30.00
TSLALong 250 to 244, 20 shares, $2 fees-$122.00
SPYShort 520 to 515, 10 shares, Fees empty$50.00
NVDALong at 900, no exit yetEmpty
MSFTLong 410 to 410, 10 shares$0.00

3. R, Result and Win

R is the result measured in what you risked, so a small trade and a big one sit on the same scale. Add a formula called R:

R
lets(
  pnl, if(
    empty(prop("Exit")),
    toNumber(""),
    (prop("Exit") -
      prop("Entry")) *
      prop("Size") *
      if(
        prop("Direction") ==
          "Short",
        -1,
        1
      ) -
      if(
        empty(prop("Fees")),
        0,
        prop("Fees")
      )
  ),
  if(
    empty(prop("Exit")) or
      empty(prop("Risk")),
    toNumber(""),
    round(
      pnl / prop("Risk") * 100
    ) / 100
  )
)

The part after pnl is the P&L formula again, so R works on its own. It divides P&L by Risk and rounds to two decimals: $298 on $150 at risk is 1.99.

Why does it check Exit and not P&L? Notion’s empty() counts 0 as empty. Our first try checked empty(pnl), and the MSFT trade, closed at exactly its entry, lost its R. Checking Exit keeps R at 0 there.

Result puts each trade in words:

Result
lets(
  pnl, if(
    empty(prop("Exit")),
    toNumber(""),
    (prop("Exit") -
      prop("Entry")) *
      prop("Size") *
      if(
        prop("Direction") ==
          "Short",
        -1,
        1
      ) -
      if(
        empty(prop("Fees")),
        0,
        prop("Fees")
      )
  ),
  ifs(
    empty(prop("Exit")), "Open",
    pnl > 0, "Win",
    pnl < 0, "Loss",
    "Breakeven"
  )
)

And Win is a checkbox for the win rate. Notion shows a formula that gives true or false as a checkbox:

Win
lets(
  pnl, if(
    empty(prop("Exit")),
    toNumber(""),
    (prop("Exit") -
      prop("Entry")) *
      prop("Size") *
      if(
        prop("Direction") ==
          "Short",
        -1,
        1
      ) -
      if(
        empty(prop("Fees")),
        0,
        prop("Fees")
      )
  ),
  if(
    empty(prop("Exit")),
    false,
    pnl > 0
  )
)
Six trades in Notion with entry, exit, size, fees and risk, then P&L, R, Result and Win, and Sum, Average and Checked under the table
Our test table. NVDA is still open, so its P&L and R are empty.

4. Net P&L, average R and win rate

Notion works these out under the table. Hover below a column, click Calculate and pick:

That 50% counts NVDA as a trade you didn’t win, though it’s still open. Three wins out of five closed trades is 60%. To get that number, make a view that leaves open trades out:

  1. Click + next to the view name at the top of the table, pick Table and call it Closed trades.
  2. Click the filter icon, pick Result, set the condition to Is not and type Open.
  3. Set the same Calculate row in this view: Sum under P&L, Average under R and Percent checked under Win.
A Closed trades view in Notion with the filter Result is not Open, five trades and Checked 60.00% under the Win column
The Closed trades view: the same trades without NVDA, and a win rate of 60%.

If the numbers look off

Questions

How do I make a trading journal in Notion?

Make a Trades database with Direction, Entry, Exit, Size, Fees and Risk. Formulas then work out P&L, R and the result of each trade, and the Calculate row under the table gives your net P&L, average R and win rate.

Does this work on the free Notion plan?

Yes. We built it in a workspace on the free plan: the four formulas, the Calculate row and the Closed trades view all worked.

What is R in a trading journal?

R is a trade’s result divided by what you risked on it. Risk $150 and make $298, and the trade is 1.99R. It lets you compare trades of different sizes on one scale.

Why is my win rate in Notion lower than I worked out?

Percent checked counts every row, so open trades pull it down. Our test showed 50% with one open trade among six, and 60% in a view that left the open trade out.

Is this financial advice?

No. This guide shows how to keep records of your own trades in Notion. It doesn’t suggest trades, and trading involves risk.