Skip to main content

Building a Trading Journal and Performance Review System With AI Makler and User Lists

Every trader needs a journal. It's the only way to know what works, what doesn't, and how to improve. AI Makler remembers its own decisions in memory, but a persistent journal in User Lists gives you something more: queryable history, sorting, filtering, trend analysis, and the ability to track outcomes against decisions.

This article shows how to build a complete journaling and performance review system around AI Makler.

Why Journal AI Makler's Decisions?

BenefitWhat it enables
Track accuracyCompare decisions to actual outcomes
Identify patternsWhen does the agent perform best? Worst?
Build confidenceSee historical certainty vs. actual results
Optimize parametersWhich investorType + instrumentTypes combo works best?
Audit trailFull record of every decision made

Architecture Overview

AI Makler Output ──→ User List "Trading Journal"
├── Every decision logged here
├── Results updated retrospectively
└── Queryable for performance reports

[Weekly Report Workflow] ──→ Query Journal → Analyze → Report

Step 1: Create the Journal User List

In the Profile → Lists tab, create a new list called "Trading Journal" with these columns:

Column NameData TypeDescription
timestamptextISO timestamp of the decision
symboltextInstrument symbol
actiontextbuy, sell, close, hold
entry_pricetextPrice at decision time
target_pricetextPrice target (if set)
stop_losstextStop loss level (if set)
certaintytextConfidence percentage
investor_modetextaggressive/moderate/conservative
market_statetextMarket conditions at decision time
reason_summarytextShort summary of the reasoning
actual_outcometextpending, won, lost, breakeven
actual_pnltextFinal P&L (filled after outcome)
notestextUser notes for manual review

Step 2: Log Decisions After Each AI Makler Run

After AI Makler executes, connect a User Lists → add_row worker to log each order:

[Schedule: every 4h]
→ [Fetch Data + News]
→ [AI Makler: decision]
→ [For each order in AI Makler output:]
→ [User Lists: add_row to "Trading Journal"]
→ [Continue with execution...]
graph LR
S[Schedule 4h] --> FD[Fetch Data + News]
FD --> AM[AI Makler]
AM --> F{For each order}
F --> UL[User Lists<br/>add row to Journal]
UL --> EXEC[Execute Order]

Each row in the journal captures:

timestampsymbolactionentry_pricecertaintymarket_state
2026-06-21T08:00BTCUSDbuy$86,52075%Bullish breakout
2026-06-21T08:00ETHUSDhold70%Neutral
2026-06-20T12:00SOLUSDsell$148.2065%Bearish momentum

Step 3: Update Outcomes Retrospectively

After a trade plays out, update the journal row with actual results. This can be done manually or through a second workflow:

[Schedule: daily cleanup]
→ [Query Trading Journal: actual_outcome = "pending"]
→ [For each pending row:]
→ [Fetch current price for symbol]
→ [Calculate: did price reach target? hit stop? still open?]
→ [Update row: actual_outcome + actual_pnl]
# Logic for outcome calculation
if current_price >= target_price:
outcome = "won"
elif current_price <= stop_loss:
outcome = "lost"
elif abs(pnl_percent) < 0.5:
outcome = "breakeven"
else:
outcome = "open" # still in position

After a few weeks, your journal will show which decisions were profitable:

symbolactioncertaintyentrytargetstopoutcomepnl
BTCUSDbuy75%$86,520$89,000$84,000won+2.9%
ETHUSDhold70%won+1.2%
SOLUSDsell65%$148.20$140.00$155.00won+5.5%
BTCUSDbuy60%$84,500$88,000$82,000lost-2.9%

Step 4: Performance Review Workflow

Create a weekly review workflow that queries the journal and generates a performance report:

[Schedule Trigger: every Monday 09:00]
→ [User Lists: query "Trading Journal"]
→ [DSL Filter: "timestamp gte last_monday"]
→ [Python Exec: Calculate Stats]
→ Total signals: 12
→ Won: 7 (58%)
→ Lost: 3 (25%)
→ Breakeven: 2 (17%)
→ Average certainty won: 72%
→ Average certainty lost: 62%
→ Best symbol: BTCUSD (4-1 record)
→ [Format Report as Markdown]
→ [Telegram Notify: Weekly Performance Summary]

Performance Metrics to Track

MetricFormulaWhat it tells you
Win Ratewon / (won + lost)Overall accuracy
Avg Certainty (Won)Avg certainty of winning tradesHow confident when correct
Avg Certainty (Lost)Avg certainty of losing tradesOverconfidence on losers?
Best Symbolwin_rate by symbolWhere does agent perform best
Best Modewin_rate by investor_modeWhich profile works best
Avg P&Ltotal_pnl / total_tradesProfitability per trade

Step 5: Let AI Makler Review Its Own Performance

The ultimate feedback loop — use the performance report as additional context for AI Makler's next run.

[Weekly Performance Report]
→ [Feed report as a "news" item to AI Makler]
→ [AI Makler considers its own track record]
→ [Adjusts decision-making accordingly]

In the news field, pass:

=== YOUR RECENT PERFORMANCE ===
Last 7 days: 7 won / 3 lost / 2 breakeven (58% win rate)
Best performing symbol: BTCUSD (4-1)
Average certainty on winners: 72%
Average certainty on losers: 62%

The agent can then adjust — e.g., if it notices it's been too aggressive on low-certainty trades, it can raise its threshold.

Complete Daily Workflow

Here's the full daily trading + journaling workflow:

1. Schedule Trigger: Every 6 hours (00:00, 06:00, 12:00, 18:00)
2. Fetch Price Data: BTCUSD, ETHUSD, SOLUSD (4h timeframe)
3. Fetch Technical Indicators: RSI, MACD, Volume
4. Fetch Latest News: Crypto RSS feed
5. AI Makler: Decision mode
├── Returns: results, orders, marketState
└── Memory: auto-saves with timestamp
6. Condition: ordersCount > 0?
├── Yes → For each order:
│ ├── User Lists: add_row to "Trading Journal"
│ │ (timestamp, symbol, action, entry, target, stop, certainty, marketState, reason)
│ └── Run Workflow "Execute Trade"
└── No → Log "No signals this session"
7. Log session summary to "AI Makler Sessions" list

Weekly Review Workflow

1. Schedule Trigger: Every Monday 09:00
2. User Lists: query "Trading Journal"
3. DSL Filter: "timestamp gte last_monday AND action ne hold"
4. Python Exec: Calculate performance metrics
5. Format Results: Create markdown report
6. Telegram Notify: Send weekly summary
7. AI Makler: Analysis mode
├── Input: "news" contains the performance report
└── Output: Recommendations for improvement

Memory + Journal = Complete System

AI Makler's built-in memory (MongoDB) and User Lists (the journal) work together:

ComponentWhat it storesBenefit
AI Makler MemoryMarket state, analysis, decisionsAgent remembers context across runs
User Lists JournalStructured, queryable trade recordsYou can filter, sort, and analyze
BothFull audit trailReview and improve over time

The memory gives the agent context for better decisions. The journal gives you the data to validate the agent's performance.

Dashboard Integration

Create a Dashboard widget that queries the Trading Journal and displays:

  • Win rate gauge — visual bar showing win/loss ratio
  • Performance by symbol — bar chart of P&L per symbol
  • Certainty vs. Outcome — scatter plot showing if higher certainty correlates with wins
  • Recent decisions — table of the last 10 signals

This turns your journal into a live performance dashboard.

Getting Started

  1. Create the "Trading Journal" User List with the columns above
  2. Add a User Lists worker after AI Makler in your workflow
  3. Run for 1 week to collect data
  4. Build the weekly review workflow
  5. Review the first performance report
  6. Iterate — adjust parameters based on results

Past performance does not guarantee future results. Trading involves substantial risk of financial loss. This journaling system is a tracking and analytics tool — it does not constitute financial advice.