Skip to main content
Glama

Backtesting Arena

Get Deribit BTC Max Pain History

arena_get_max_pain_history

Does max pain actually pull price to the strike? Settled Deribit BTC options expiries with the max-pain level we compute per expiry, for measuring the convergence question: does spot drift toward the max-pain level as expiry approaches? Each row: expiry_date, max_pain_strike, spot_at_expiry, %-diff, P/C ratio, notional, expiry-type flags. The mandatory base_rates block answers the convergence question PER expiry class (n, median |diff|, shares within 1%/2%, max, sample_adequate at n>=30) — the pooled median mixes tiny daily expiries with large quarterlies, which is what the per-class split separates. Filter with expiry_type / min_contracts / snapshot_expiry_date instead of post-processing the full row set. With include_open_snapshots=true it adds the daily observation series of still-open expiries — that series starts 2026-05-28, is not backfillable, and its per-expiry depth is thin, so check open_snapshot_coverage before computing anything from it. Days auto-capped by tier: Pro 365d, Power 3650d. Max-pain levels are our own aggregation across the option chain; the chain itself is not redistributed. Source: Deribit. Related: arena_get_max_pain (current + upcoming), arena_get_iv_snapshot. [API Pro tier]

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
daysNoDays back from today (default 90, capped by tier).
marketNoOptions market: 'DERIBIT_BTC' (default) or 'IBIT' (collected since 2026-08-24 — history is correspondingly short).
expiry_typeNoFilter expiries AND open_snapshots to one expiry class (label = highest level reached; the nesting booleans stay untouched). base_rates are always computed BEFORE this filter.
min_contractsNoOnly finalized expiries with total_contracts >= this (rows with unknown contracts drop out when set).
snapshot_expiry_dateNoReduce open_snapshots[] to exactly this expiry date (YYYY-MM-DD). Only meaningful with include_open_snapshots=true.
include_open_snapshotsNoDefault false. When true, adds open_snapshots[] (daily observations of not-yet-expired contracts) plus open_snapshot_coverage. Omit for the unchanged response.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / market / description
      Previous value: -"Options market. Currently only 'DERIBIT_BTC' (default)."New value: +"Options market: 'DERIBIT_BTC' (default) or 'IBIT' (collected since 2026-08-24 — history is correspondingly short)."
    • changedInput schema / properties / market / enum
      Previous value: -[
      -  "DERIBIT_BTC"
      -]New value: +[
      +  "DERIBIT_BTC",
      +  "IBIT"
      +]
  2. Changed3 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / context
      Removed value: -{
      -  "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"",
      -  "type": "string"
      -}
    • removedInput schema / required
      Removed value: -[
      -  "context"
      -]
  3. Changed3 schema fields changed
    • addedInput schema / properties / expiry_type
      Added value: +{
      +  "description": "Filter expiries AND open_snapshots to one expiry class (label = highest level reached; the nesting booleans stay untouched). base_rates are always computed BEFORE this filter.",
      +  "enum": [
      +    "daily",
      +    "weekly",
      +    "monthly",
      +    "quarterly"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / min_contracts
      Added value: +{
      +  "description": "Only finalized expiries with total_contracts >= this (rows with unknown contracts drop out when set).",
      +  "exclusiveMinimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / snapshot_expiry_date
      Added value: +{
      +  "description": "Reduce open_snapshots[] to exactly this expiry date (YYYY-MM-DD). Only meaningful with include_open_snapshots=true.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / include_open_snapshots
      Added value: +{
      +  "description": "Default false. When true, adds open_snapshots[] (daily observations of not-yet-expired contracts) plus open_snapshot_coverage. Omit for the unchanged response.",
      +  "type": "boolean"
      +}
  5. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so thoroughly: it explains the output structure (rows plus per-class base_rates), the pooling pitfall it separates, that base_rates are computed BEFORE filtering, the open_snapshots limitations (not backfillable, starts 2026-05-28, thin depth), tier capping, and that max-pain levels are the tool's own aggregation (chain not redistributed). It also discloses the data source.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though long, the description is densely packed with non-redundant information. It front-loads the core purpose, then flows from rows to base_rates, then to filters, then to open_snapshots caveats, tier caps, and source/related tools. Every sentence adds a distinct piece of guidance; there is no fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description must explain return values and does so concretely (row fields, base_rates stats, open_snapshots structure). It also covers critical constraints (tier caps, data availability, backfill limits) and trade-offs (pooled median vs per-class). For a tool with this many parameters and caveats, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds real value beyond the schema: it explains why open_snapshots filtering with snapshot_expiry_date only matters when include_open_snapshots=true, advises using the filter parameters instead of post-processing, and clarifies that expiry_type filter does not affect precomputed base_rates. This contextual advice enhances parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise research question ('Does max pain actually pull price to the strike?') and clearly states the tool returns settled Deribit BTC options expiries with computed max-pain levels. It enumerates the row fields and distinguishes from siblings (arena_get_max_pain for current/upcoming, arena_get_iv_snapshot). Verb+resource+scope are all specific, and it tells the agent exactly what analytical question this data serves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: it is for measuring the convergence question, contrasting with current/upcoming data. It instructs to filter with expiry_type / min_contracts / snapshot_expiry_date instead of post-processing the full row set, and warns that open_snapshots are thin and non-backfillable, so coverage must be checked first. It also notes tier-based day caps and names related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.