Skip to content

bullpen solana stats closed-positions

Last updated: July 13, 2026

Show closed Solana token positions sorted by realized PnL

Usage

bullpen solana stats closed-positions [OPTIONS]

Live Help

Show closed Solana token positions sorted by realized PnL

Usage: bullpen solana stats closed-positions [OPTIONS]

Options:
      --output <OUTPUT>
          Output format for command results

          [possible values: table, json]

      --window <WINDOW>
          Time window for swap aggregation (1d, 7d, 30d, 90d, or all)

      --env <ENV>
          Target environment to connect to (overrides config.toml)

          [env: BULLPEN_ENV=]
          [possible values: staging, production]

      --mint <MINT>
          Restrict stats to one SPL token mint

      --config <CONFIG>
          Path to a custom config.toml file (overrides $BULLPEN_CONFIG and the default location).

          Explicit --config and BULLPEN_CONFIG paths fail closed: if the file is missing, the CLI exits validation instead of silently loading defaults. Credentials still resolve via BULLPEN_HOME, so set BULLPEN_HOME too when isolating a session.

      --refresh
          Refresh the upstream chain PnL cache before fetching

      --read-only
          Enable read-only mode: blocks all mutating commands

      --non-interactive
          Suppress interactive prompts; does NOT imply --yes for money-moving commands

          [env: BULLPEN_NON_INTERACTIVE=]

  -h, --help
          Print help (see a summary with '-h')

EXAMPLES:
  # Show closed Solana positions
  bullpen solana stats closed-positions

  # Export closed positions as JSON
  bullpen solana stats closed-positions --output json

Example Commands

bullpen solana stats closed-positions
bullpen solana stats closed-positions --output json

JSON Output

Contract: JSON Output Contract.

Successful output is a single JSON document. The shape below is representative for this command family; commands may add fields without breaking the shared contract.

Schema version: 1 when a command emits schema_version; otherwise treat the current command shape as contract version 1.

Top-level Keys

key type nullable notes
address string no Bullpen Solana wallet address whose stats were queried
chain string no Always solana
window string no Selected aggregation window: 1d, 7d, 30d, 90d, or all
mint string yes SPL mint filter when supplied
window_start_unix_secs integer yes Window lower bound; null for all
window_end_unix_secs integer no Window upper bound used for the query
chain_pnl object no Chain-level or mint-filtered realized/unrealized PnL and volume summary
window_stats object no Cursor-paginated Bullpen swap PnL/volume aggregation
thirty_day_volume object no Current 30d volume and delta vs the prior 30d window
closed_positions array no All-time zero-balance positions sorted by realized PnL
closed_positions_scope string no Currently all_time
include_closed_positions boolean no Whether table mode requested expanded closed positions
fetched_at_unix_secs integer no Local fetch timestamp

Example

Example JSON output
bullpen solana stats closed-positions --output json
{
  "address": "7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e",
  "chain": "solana",
  "window": "30d",
  "mint": null,
  "window_start_unix_secs": 1777328575,
  "window_end_unix_secs": 1779920575,
  "chain_pnl": {
    "realized_pnl_usd": "42.5",
    "unrealized_pnl_usd": "3.25",
    "buy_volume_usd": "500",
    "sell_volume_usd": "550",
    "total_volume_usd": "1050",
    "tokens_held": 3,
    "biggest_win_usd": "25"
  },
  "window_stats": {
    "pnl_usd": "12.5",
    "volume_usd": "250",
    "biggest_win_usd": "8",
    "tx_count": 4,
    "page_count": 1,
    "truncated": false
  },
  "thirty_day_volume": {
    "value_usd": "250",
    "delta_usd": "50",
    "percent_delta_pct": "25"
  },
  "closed_positions": [
    {
      "mint": "So11111111111111111111111111111111111111112",
      "balance": "0",
      "realized_pnl_usd": "25",
      "unrealized_pnl_usd": "0",
      "buy_volume_usd": "100",
      "sell_volume_usd": "125",
      "buy_count": 2,
      "sell_count": 1,
      "realized_pnl_pct": "25"
    }
  ],
  "closed_positions_scope": "all_time",
  "include_closed_positions": true,
  "fetched_at_unix_secs": 1779920575
}

Stability

Patch releases may add nullable or optional fields. Minor releases may add required fields or increment schema_version. Major releases may remove or rename fields.