🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Simmer Calibration Report

by @djdyll

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...

Versionv1.0.4
Downloads504
Installs1
TERMINAL
clawhub install simmer-calibration-report

πŸ“– About This Skill


name: simmer-calibration-report displayName: "Simmer Calibration Report" description: 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 your edge lives β€” and where it doesn't. version: "1.0.4" authors: - name: "DjDyll" difficulty: "beginner"

πŸ“Š 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 |

βš™οΈ 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

πŸ“‹ Tips & Best Practices

| 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 |