bullpen solana stats closed-positions¶
Last updated: July 13, 2026
Show closed Solana token positions sorted by realized PnL
Usage¶
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¶
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
{
"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.