Local Journal Writer

The record lives on the machine first.

Every closed trade becomes one row in a monthly file. Written local before remote, so the truth never depends on the connection. The sheet is only the view that catches up.

JournalWriter.py
# one closed trade, one row, local first
def on_trade_close(trade):
    row   = build_row(trade)    # all fields
    month = monthly_file()      # YYYY-MM
    append_local(month, row)    # machine first
    queue_remote(row)           # sheet later

One row, the whole trade

Nothing is summarised away. Each field of the closed position is captured in place.

Strategy · magic Momentum · 40712
Direction · volume Buy · 0.50
Open · price / time 1.09214 · 14:00:00
Close · price / time 1.09488 · 15:30:00
Net result +27.40
Close reason · duration Take profit · 1h 30m
Execution latency 42 ms

The number that matters

The distance between the candle that fired the signal and the moment the position was truly open.

Signal candle close the trigger is born Position open the order is live 42 ms

signal candle close → position open = 42 ms

Measured, written, and kept on every single trade.

Truth first, sheet second

The file on the machine is the record. Everything downstream is just a copy of it.

Trade closes Row built Local file Sheet catches up