Ready to go further
Next: the number a journal should be compared with
The expectancy page shows how to turn a list of trade results into an average per trade, which is the number a journal is checked against.
What is included
- What it is, in plain words
- The formula or mechanism, with exact arithmetic
- How it hits grid, martingale and DCA bots
- A check you can run before you switch a bot on
Who it is for
- People who run or plan to run a trading bot
- Anyone reading a backtest or a bot sales page
- Readers who want the numbers, not the pitch
- Not advice, and not a signal service
Key facts
- A trading journal for a bot is a log with one row per trade and one row per settings change. Its job is to let you compare live results with the backtest.
- Record the settings version, the time, the price you expected, the price you got, the size and every cost: spread, fee, slippage and overnight charges.
- In the made-up example below, the backtest assumed 0.08 percent cost per trade. The journal shows 0.08 for trades 1 to 5 and 0.17 for trades 6 to 10 (calculated by us on 29 Oct 2026, exact).
- Drift is a slow change in costs, fills or behaviour. It is rarely visible in a single trade, so you only see it by comparing groups of trades.
- A journal records facts. It is not a place to write opinions after the result is known, and it is not proof that a bot will work.
What a trading journal is, for a bot
A person keeps a trading journal to remember why they placed a trade. A bot already follows written rules, so the question changes. The journal for a bot answers: did the bot do what the test said it would do, at the cost the test assumed?
That check matters because a backtest is a model. It assumes fills, spreads and rules. A live account meets the real versions of all three, and the gap between model and reality is where many bots lose their edge. See how to backtest for the model side. The journal is the live side of the same comparison.
Keep it boring and complete. A journal that is only filled in when a trade goes wrong has a bias in it, much like survivorship bias: you only see the rows you chose to keep.
The fields to record
One row per trade
- Trade id and settings version. Without the version, you cannot tell whether two trades came from the same rules. Change the version every time any input changes.
- Open and close time, with the time zone written down. Servers and charts often disagree.
- Instrument, side and size. Include the lot size or units, so you can recompute the money result.
- Expected price and filled price for the open and the close. The difference is slippage.
- Spread at entry. The spread changes through the day, so record the one you paid.
- Fees, commission and overnight charges as separate columns, not one lump.
- Gross result, total cost and net result. Net is gross minus cost.
- Why it closed: target, stop, time exit, or manual. A manual close means a person overrode the bot.
One row per event
Also log things that are not trades: a settings change, a restart, a lost connection, a rejected order, a pause. A gap in trades is easier to explain when the event is in the log.
Account lines
Record the balance and equity at the end of each day. The equity curve and the drawdown come from these lines, and they catch open losses that closed-trade rows hide.
A worked example: a journal summary on 10 made-up trades
A bot on settings version v3 has made 10 trades. Every number is made up. Results are percent of the traded amount. Cost is the spread plus slippage plus a fixed 0.04 percent fee. The backtest assumed 0.08 percent cost per trade. Everything was calculated by us on 29 Oct 2026 and is exact.
| Trade | Gross | Spread | Slippage | Fee | Cost | Net |
|---|---|---|---|---|---|---|
| 1 | +0.90 | 0.02 | 0.01 | 0.04 | 0.07 | +0.83 |
| 2 | -0.60 | 0.02 | 0.00 | 0.04 | 0.06 | -0.66 |
| 3 | +0.70 | 0.02 | 0.02 | 0.04 | 0.08 | +0.62 |
| 4 | -0.60 | 0.03 | 0.04 | 0.04 | 0.11 | -0.71 |
| 5 | +1.10 | 0.02 | 0.03 | 0.04 | 0.09 | +1.01 |
| 6 | -0.60 | 0.04 | 0.06 | 0.04 | 0.14 | -0.74 |
| 7 | -0.60 | 0.05 | 0.08 | 0.04 | 0.17 | -0.77 |
| 8 | +0.80 | 0.05 | 0.07 | 0.04 | 0.16 | +0.64 |
| 9 | -0.60 | 0.06 | 0.09 | 0.04 | 0.19 | -0.79 |
| 10 | +0.50 | 0.06 | 0.10 | 0.04 | 0.20 | +0.30 |
The summary the journal produces:
- Trades: 10, with 5 net winners. Far too few to trust, used only to show the arithmetic.
- Gross total: +1.00 percent. Total cost: 1.27. Net total: -0.27.
- Average cost, trades 1 to 5: 0.08 percent, close to the 0.08 assumed.
- Average cost, trades 6 to 10: 0.17 percent, 2.15 times the assumption.
- Net total, trades 1 to 5: +1.09. Trades 6 to 10: -1.36.
The gross results in the two halves are not very different. What changed is cost: spread and slippage both rose, and the second half of the table turns most of the gross gain into a net loss. A single row never shows this. The comparison of the two groups does.
How a journal catches drift
Drift means the live bot slowly stops matching the tested bot. The journal makes it visible in a few common forms:
- Cost drift. As in the example, average spread and slippage per trade move away from the backtest. Compare rolling groups of trades, such as the last 20 against the first 20.
- Fill drift. The gap between expected and filled price grows, or is always on the wrong side. The test may have assumed fills that rarely happen. See forward testing.
- Behaviour drift. The win rate, the average win or the average loss moves outside the range the test showed. Small samples swing a lot, so a gap needs a sensible number of trades before it means anything.
- Setting drift. A changed input with no new version. If trade rows carry a version, the change shows up as a mix of versions in one run.
- Override drift. More and more rows closed by hand. The bot is no longer the thing being tested.
For grid and martingale bots
These bots hide risk in open positions, so add the largest open exposure and the deepest open loss to the daily line, not only closed trades. A martingale run that looks calm in closed trades can be carrying a large open loss.
What a journal does not tell you
It does not say why a change happened, only that it did. With few trades it cannot separate drift from ordinary luck. It is a record, and what you do with it is a separate choice. Weigh it against the max drawdown your test showed.
Keep Going
Related Tools and Guides
Keep exploring
FAQ
Frequently Asked Questions
What should a trading journal for a bot include?
The settings version, open and close time, size, expected and filled price, spread, fees, slippage, overnight charges, gross and net result, and why the trade closed. Add event rows for restarts and settings changes.
Why record the settings version?
Without it you cannot tell which rules produced which trades. Any change to an input should make a new version, so groups of trades can be compared fairly.
How often should I review the journal?
On a regular schedule you set, such as weekly, and after any change or outage. Compare groups of trades, not single trades.
Can a spreadsheet be a trading journal?
Yes. Many bots can export a trade list that you paste into one. The important part is that every row has the same columns every time.
How many trades before drift means something?
It depends on how noisy the results are. Cost and fill columns are steadier than win rate, so they show drift sooner. A handful of trades is rarely enough.
Are the numbers on this page real?
Example numbers are made up to show how the maths works, and the page says so. A figure only counts as exact when the page says it was calculated on a stated date. Nothing you enter in a calculator leaves your browser.
Can I use this to decide whether to run a bot?
It can show whether a bot's numbers hold together and how much an account can lose. It cannot say what the market will do, and it is not advice. Use it to ask better questions, then read the terms of your own broker or exchange.
Is this financial advice?
No. It is general education about record keeping. The numbers are made up, and your costs and results will differ.
Know the Risk Before You Run It
Free calculators and guides, added every week. Leave your details and we will email you when new ones go up.
Trading carries a risk of loss