Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
alsk1992 avatar

History

  • 12 installs
  • 610 repo stars
  • Updated June 26, 2026
  • alsk1992/cloddsbot

history is a Claude Code skill that fetches, syncs and analyzes prediction-market trade history from Polymarket and Kalshi.

About

history is a Claude Code skill that fetches, syncs and analyzes prediction-market trade history from Polymarket and Kalshi. It stores trades in a local SQLite database and reports win rate, total P&L, profit factor, Sharpe ratio and drawdown, plus daily, weekly and monthly P&L. A developer uses it to review trading performance and export trades to CSV or JSON.

  • Fetches and syncs trade history from Polymarket and Kalshi into a local SQLite DB
  • Computes win rate, P&L, profit factor, Sharpe ratio and max drawdown
  • Exports trades to CSV or JSON with daily, weekly and monthly P&L breakdowns

History by the numbers

  • 12 all-time installs (skills.sh)
  • Ranked #781 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

history capabilities & compatibility

Free skill; requires your own Polymarket/Kalshi API keys.

Capabilities
trade history · pnl analysis · performance analytics · csv export
Use cases
trading · data analysis
Pricing
Bring your own API key
From the docs

What history says it does

Fetch, sync, and analyze trade history from Polymarket and Kalshi with detailed performance metrics.
SKILL.md
Get comprehensive statistics
SKILL.md
npx skills add https://github.com/alsk1992/cloddsbot --skill history

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs12
repo stars610
Last updatedJune 26, 2026
Repositoryalsk1992/cloddsbot

What it does

Pull trade history from Polymarket and Kalshi into a local database and analyze win rate, P&L and risk metrics.

Who is it for?

Tracking prediction-market trading performance across Polymarket and Kalshi.

When should I use this skill?

You want to sync your trades and review win rate, P&L or drawdown.

What you get

A local trade database with win rate, P&L, risk metrics and CSV/JSON exports.

  • synced trade database
  • performance statistics
  • CSV/JSON trade export

By the numbers

  • 2 supported platforms (Polymarket, Kalshi)
  • P&L periods: daily, weekly, monthly
  • SQLite trades table schema

Files

SKILL.mdMarkdownGitHub ↗

Trade History - Complete API Reference

Fetch, sync, and analyze trade history from Polymarket and Kalshi with detailed performance metrics.

---

Chat Commands

Fetch & Sync

/history fetch                              # Fetch all trades from APIs
/history fetch poly                         # Fetch Polymarket only
/history fetch --from 2024-01-01            # From specific date
/history sync                               # Sync to local database

View History

/history list                               # Recent trades
/history list --limit 50                    # Last 50 trades
/history list --platform poly               # Polymarket only
/history list --market <id>                 # Specific market

Statistics

/history stats                              # Overall statistics
/history stats --period 30d                 # Last 30 days
/history stats --platform kalshi            # Platform-specific

P&L Analysis

/history daily-pnl                          # Daily P&L
/history weekly-pnl                         # Weekly P&L
/history monthly-pnl                        # Monthly P&L
/history by-market                          # P&L by market category

Export

/history export                             # Export to CSV
/history export --format json               # Export as JSON
/history export --from 2024-01-01           # Date range

Filtering

/history filter --side buy                  # Only buys
/history filter --pnl positive              # Only winners
/history filter --pnl negative              # Only losers
/history filter --min-size 100              # Min $100 trades

---

TypeScript API Reference

Create History Service

import { createTradeHistoryService } from 'clodds/history';

const history = createTradeHistoryService({
  polymarket: {
    apiKey: process.env.POLY_API_KEY,
    address: process.env.POLY_ADDRESS,
  },
  kalshi: {
    apiKey: process.env.KALSHI_API_KEY,
  },

  // Local storage
  dbPath: './trade-history.db',
});

Fetch Trades from APIs

// Fetch all trades from exchange APIs
const trades = await history.fetchTrades({
  platforms: ['polymarket', 'kalshi'],
  from: '2024-01-01',
});

console.log(`Fetched ${trades.length} trades`);

// Fetch from specific platform
const polyTrades = await history.fetchTrades({
  platforms: ['polymarket'],
  limit: 100,
});

Sync to Database

// Sync fetched trades to local database
await history.syncToDatabase();

console.log('Trades synced to database');

Get Trades

// Get trades from local storage
const trades = await history.getTrades({
  platform: 'polymarket',
  from: '2024-01-01',
  to: '2024-12-31',
  limit: 100,
});

for (const trade of trades) {
  console.log(`${trade.timestamp}: ${trade.side} ${trade.market}`);
  console.log(`  Size: $${trade.size}`);
  console.log(`  Price: ${trade.price}`);
  console.log(`  P&L: $${trade.pnl?.toFixed(2) || 'open'}`);
}

Statistics

// Get comprehensive statistics
const stats = await history.getStats({
  period: '30d',
  platform: 'polymarket',
});

console.log(`=== Trading Statistics (30d) ===`);
console.log(`Total trades: ${stats.totalTrades}`);
console.log(`Winning trades: ${stats.winningTrades}`);
console.log(`Losing trades: ${stats.losingTrades}`);
console.log(`Win rate: ${(stats.winRate * 100).toFixed(1)}%`);
console.log(`\nP&L:`);
console.log(`  Total: $${stats.totalPnl.toLocaleString()}`);
console.log(`  Gross profit: $${stats.grossProfit.toLocaleString()}`);
console.log(`  Gross loss: $${stats.grossLoss.toLocaleString()}`);
console.log(`  Profit factor: ${stats.profitFactor.toFixed(2)}`);
console.log(`\nTrade sizes:`);
console.log(`  Average: $${stats.avgTradeSize.toFixed(2)}`);
console.log(`  Largest win: $${stats.largestWin.toFixed(2)}`);
console.log(`  Largest loss: $${stats.largestLoss.toFixed(2)}`);
console.log(`\nRisk metrics:`);
console.log(`  Sharpe ratio: ${stats.sharpeRatio.toFixed(2)}`);
console.log(`  Max drawdown: ${(stats.maxDrawdown * 100).toFixed(1)}%`);

Daily P&L

// Get daily P&L breakdown
const dailyPnl = await history.getDailyPnL({
  days: 30,
  platform: 'polymarket',
});

console.log('=== Daily P&L ===');
for (const day of dailyPnl) {
  const sign = day.pnl >= 0 ? '+' : '';
  const bar = day.pnl >= 0
    ? '█'.repeat(Math.min(Math.floor(day.pnl / 10), 20))
    : '▓'.repeat(Math.min(Math.floor(Math.abs(day.pnl) / 10), 20));

  console.log(`${day.date} | ${sign}$${day.pnl.toFixed(2).padStart(8)} | ${bar}`);
}

Performance by Market

// Get performance breakdown by market category
const byMarket = await history.getPerformanceByMarket({
  period: '30d',
});

console.log('=== Performance by Market Category ===');
for (const [category, data] of Object.entries(byMarket)) {
  console.log(`\n${category}:`);
  console.log(`  Trades: ${data.trades}`);
  console.log(`  Win rate: ${(data.winRate * 100).toFixed(1)}%`);
  console.log(`  P&L: $${data.pnl.toLocaleString()}`);
  console.log(`  Avg trade: $${data.avgTrade.toFixed(2)}`);
}

Export

// Export to CSV
await history.exportCsv({
  path: './trades.csv',
  from: '2024-01-01',
  to: '2024-12-31',
  columns: ['timestamp', 'platform', 'market', 'side', 'size', 'price', 'pnl'],
});

// Export to JSON
const json = await history.exportJson({
  from: '2024-01-01',
});

---

Database Schema

CREATE TABLE trades (
  id TEXT PRIMARY KEY,
  platform TEXT NOT NULL,
  market_id TEXT NOT NULL,
  market_question TEXT,
  side TEXT NOT NULL,  -- 'buy' or 'sell'
  outcome TEXT,        -- 'YES' or 'NO'
  size REAL NOT NULL,
  price REAL NOT NULL,
  fee REAL DEFAULT 0,
  pnl REAL,
  timestamp INTEGER NOT NULL,
  created_at INTEGER DEFAULT (strftime('%s', 'now'))
);

CREATE INDEX idx_trades_platform ON trades(platform);
CREATE INDEX idx_trades_timestamp ON trades(timestamp);
CREATE INDEX idx_trades_market ON trades(market_id);

---

Best Practices

1. Sync regularly - Keep local database up to date 2. Export backups - Periodically export to CSV 3. Review weekly - Analyze performance patterns 4. Track by category - Identify strong/weak areas 5. Monitor drawdown - Set alerts for max drawdown

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.