โ† Back to skills
extension
Category: Data & AnalyticsAPI key required

Simmer Calibration Report

Run a calibration report on any Simmer trade journal. Win rate and EV broken down by strategy, time of day, price band, and market type. Know exactly where y...

personAuthor: djdyllhubclawhub

๐Ÿ“Š Simmer Calibration Report

You think you know where your edge comes from. This skill tells you if you're right.

This is a template. Point it at any Simmer JSONL trade journal โ€” live, sim, or exported from anywhere โ€” and get a full calibration breakdown. No strategy-specific logic baked in. Your journal, your numbers.

Setup

  1. Install dependencies:

    pip install simmer-sdk
    
  2. Set your API key:

    export SIMMER_API_KEY=your_key_here
    
  3. Run it:

    python calibration_report.py --live
    

That's it. If your journal exists at the default path, it just works.

Configuration

| Parameter | Env Var | Default | Description | |-----------|---------|---------|-------------| | journal_path | CALIB_JOURNAL_PATH | "" | Path to trade journal JSONL. Empty = auto-detect. | | min_trades | CALIB_MIN_TRADES | 10 | Minimum trades to show a segment. Below this, the numbers lie. | | lookback_days | CALIB_LOOKBACK_DAYS | 30 | How far back to analyze. | | include_unresolved | CALIB_INCLUDE_UNRESOLVED | false | Include unresolved trades. EV becomes less meaningful. |

Set config inline:

python calibration_report.py --set lookback_days=60
python calibration_report.py --set min_trades=5

Quick Commands

# Sim journal (dry run data)
python calibration_report.py

# Live journal
python calibration_report.py --live

# Custom journal path
CALIB_JOURNAL_PATH=/path/to/journal.jsonl python calibration_report.py

# Show config
python calibration_report.py --config

# Summary only (good for cron)
python calibration_report.py --live --quiet

Example Output

๐Ÿ“Š Calibration Report โ€” Last 30 days
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
Total: 287 trades | 68.3% WR | +$0.038 EV/trade
Journal: data/live/trade_journal.jsonl

BY STRATEGY
  btc_momentum         n=142  WR=72.5%  EV=+0.047  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  eth_midcandle        n=67   WR=61.2%  EV=+0.021  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  btc_midcandle_scalp  n=49   WR=65.3%  EV=+0.031  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  eth_btc_lag          n=29   WR=58.6%  EV=+0.015  โ–ˆโ–ˆโ–ˆโ–ˆ

BY HOUR (UTC)
  00-06                n=44   WR=75.0%  EV=+0.055  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  06-12                n=89   WR=70.8%  EV=+0.044  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  12-18                n=97   WR=65.0%  EV=+0.031  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  18-24                n=57   WR=64.9%  EV=+0.028  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ

BY ENTRY PRICE
  0.20-0.35            n=38   WR=73.7%  EV=+0.052  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  0.35-0.50            n=71   WR=70.4%  EV=+0.041  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  0.50-0.65            n=89   WR=66.3%  EV=+0.033  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  0.65-0.80            n=61   WR=63.9%  EV=+0.024  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ

๐Ÿ† Best segment: btc_momentum (EV=+0.047, WR=72.5%)

Troubleshooting

| Problem | Fix | |---------|-----| | "No journal found" | Set CALIB_JOURNAL_PATH explicitly, or ensure data/live/trade_journal.jsonl exists in your workspace. | | 0 resolved trades | Trades haven't resolved yet. Set CALIB_INCLUDE_UNRESOLVED=true to see pending trades (EV will be approximate). | | Segment not showing | Below min_trades threshold. Lower it: python calibration_report.py --set min_trades=5 | | "SIMMER_API_KEY not set" | export SIMMER_API_KEY=your_key_here | | "simmer-sdk not installed" | pip install simmer-sdk |