SQLite best practices, connection management, and migration system for PolyFlup.
ALWAYS use the db_connection() context manager:
from src.data.db_connection import db_connection
with db_connection() as conn:
c = conn.cursor()
c.execute("SELECT * FROM trades")
# Commit happens automatically on success
conn.commit() manually.execute_trade) from within an existing transaction, MUST pass the active cursor.The migration system tracks versions in the schema_version table.
src/data/migrations.py.MIGRATIONS list.src/data/database.py.Main table: trades
id, timestamp, symbol, side, entry_price, size, bet_usd, edgeorder_id, order_status, limit_sell_order_id, scale_in_order_idscaled_in, is_reversal, target_price, reversal_triggered, reversal_triggered_atsettled, settled_at, exited_early, final_outcome, exit_price, pnl_usd, roi_pctwindow_start, window_end, last_scale_in_atslug, token_id, p_yes, best_bid, best_ask, imbalance, funding_biasadditive_confidence, additive_bias, bayesian_confidence, bayesian_bias, market_prior_p_up# Get open positions with all relevant data
c.execute("""
SELECT id, symbol, token_id, side, entry_price, size, bet_usd,
limit_sell_order_id, scale_in_order_id, scaled_in, edge,
last_scale_in_at, window_end
FROM trades
WHERE settled = 0 AND exited_early = 0
AND datetime(window_end) > datetime(?)
""", (now.isoformat(),))
# Update position size after scale-in
c.execute("""
UPDATE trades
SET size = ?, bet_usd = ? * entry_price,
scaled_in = 1, last_scale_in_at = ?
WHERE id = ?
""", (new_size, new_size, now.isoformat(), trade_id))
# Settle position with exit data
c.execute("""
UPDATE trades
SET settled = 1, exited_early = 1, exit_price = ?,
pnl_usd = ?, roi_pct = ?, settled_at = ?
WHERE id = ?
""", (exit_price, pnl_usd, roi_pct, now.isoformat(), trade_id))
PRAGMA journal_mode=WALadditive_confidence, additive_bias, bayesian_confidence, bayesian_bias, market_prior_p_up) for A/B testingup_total, down_total, momentum_score, momentum_dir, flow_score, flow_dir, divergence_score, divergence_dir, vwm_score, vwm_dir, pm_mom_score, pm_mom_dir, adx_score, adx_dir, lead_lag_bonus) for confidence formula calibrationlast_scale_in_at column for tracking scale-in timingreversal_triggered_at column for timing reversalsreversal_triggered column for reversal trackingscale_in_order_id column for tracking pending scale-in ordersSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer