{"server":{"name":"orats","version":"0.1.0","mcp":"https://mcp-staging.orats.com/mcp"},"tools":[{"name":"delete_intraday_backtest","title":"Delete an intraday backtest","description":"Permanently delete an intraday backtest and its results from the account.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Delete an intraday backtest","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_catalog","title":"Backtest finder catalog","description":"Which tickers and strategies the ORATS backtest finder has precomputed backtests for, with counts. Filter with ticker.","inputSchema":{"type":"object","properties":{"ticker":{"description":"Slice the catalog to one or more comma-separated tickers","type":"string"}},"additionalProperties":false},"annotations":{"title":"Backtest finder catalog","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_input","title":"Backtest finder input settings","description":"The input configuration of a precomputed backtest, by the rootBaseId from a search_backtest_finder row.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"rootBaseId from a performance row"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder input settings","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_returns","title":"Backtest finder daily returns","description":"Daily returns of a precomputed backtest, by the id from a search_backtest_finder row. Paged: limit and order (latest or earliest).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"id from a performance row"},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Rows to return (default 100, max 1000)."},"order":{"type":"string","enum":["latest","earliest"],"description":"Which end of the series to return (default latest)."}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder daily returns","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_stats","title":"Backtest finder summary stats","description":"Summary statistics and monthly returns for a precomputed backtest, by the id from a search_backtest_finder row.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"id from a performance row"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder summary stats","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_trades","title":"Backtest finder trade log","description":"Trade log of a precomputed backtest (one row per leg: date, option, ratio, P&L), by the id from a search_backtest_finder row. Paged: limit and order (latest or earliest).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"id from a performance row"},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Rows to return (default 100, max 1000)."},"order":{"type":"string","enum":["latest","earliest"],"description":"Which end of the series to return (default latest)."}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder trade log","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_delayed_cores","title":"Core volatility metrics (15-min delayed)","description":"ORATS core analytics per ticker, about 15 minutes delayed: implied vs forecast and historical volatility, IV percentile, skew (slope/deriv), term structure, earnings (wksNextErn, implied earnings move), dividends and liquidity. 340 columns, so pick fields. IV, HV and borrow values are in percentage points (28.8 = 28.8%). Classic screen: iv30d/orFcst20d above 1.15 = rich, below 0.85 = cheap. stockPrice is the ORATS underlying value derived from option prices (for indexes such as SPX: the implied value), not an exchange quote or index level. Realized-vol fields (orHv*, clsHv*) use the prior close, so they equal get_hist_eod_hvs for the previous session.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT,SPY\" (comma-separated, up to 100, batched automatically). Omit for every active ticker (large: combine with fields, where, sort and limit). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Core volatility metrics (15-min delayed)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_delayed_ivrank","title":"IV rank and percentile (15-min delayed)","description":"Implied-volatility rank and percentile over 1 month and 1 year, about 15 minutes delayed. The IV column is `iv`: ORATS's fitted ex-earnings IV (the same value as cores orIvXern20d and summaries rVol30), not iv30d. IV, HV and borrow values are in percentage points (28.8 = 28.8%). Percentile is more robust than rank for screening.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT,SPY\" (comma-separated, up to 100, batched automatically). Omit for every active ticker (large: combine with fields, where, sort and limit). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"IV rank and percentile (15-min delayed)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_delayed_tickers","title":"Ticker coverage","description":"Every symbol ORATS covers (including delisted ones) with the first and last date of data. Use it to check a symbol exists before other calls.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT,SPY\" (comma-separated, up to 100, batched automatically). Omit for every active ticker (large: combine with fields, where, sort and limit). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Ticker coverage","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_cores","title":"Historical core volatility metrics (end of day)","description":"End-of-day ORATS core analytics from 2007 (implied vs forecast vs historical vol, IV percentile, skew, earnings, liquidity). Give tickers, a trade date, or both: a date alone returns every ticker that day; a ticker alone returns its full history. IV, HV and borrow values are in percentage points (28.8 = 28.8%). stockPrice is the ORATS underlying value derived from option prices (for indexes such as SPX: the implied value), not an exchange quote or index level. Realized-vol fields (orHv*, clsHv*) use the prior close, so they equal get_hist_eod_hvs for the previous session.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, up to 100, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical core volatility metrics (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_dailies","title":"Daily underlying values (end of day)","description":"Daily open, high, low, close and volume for the underlying, split- and dividend-adjusted plus unadjusted columns.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, up to 100, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Daily underlying values (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_divs","title":"Dividends (history)","description":"Dividend history: ex-date, amount, frequency (payments per year) and declared date. Includes revisions and projected future dividends; for one paid dividend per month use where \"divAmt > 0\" with uniqueBy \"substr(exDate,0,7)\".","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Dividends (history)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_earnings","title":"Earnings dates (history)","description":"Past earnings announcement dates with time of day (anncTod: 0900 before the open, 1630 after the close). Upcoming dates are not included: use get_delayed_cores fields wksNextErn and nextErnTod.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Earnings dates (history)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_hvs","title":"Historical volatility (end of day)","description":"Realized (historical) volatility from 1 day to 1000 days: ORATS's range-based estimator (orHv*, modified Parkinson from open, high, low and close), close-to-close (clsHv*) and ex-earnings variants. IV, HV and borrow values are in percentage points (28.8 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, up to 100, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical volatility (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_ivrank","title":"Historical IV rank and percentile (end of day)","description":"End-of-day implied-volatility rank and percentile (1 month and 1 year). The IV column is `iv`: ORATS's fitted ex-earnings IV (the same value as cores orIvXern20d and summaries rVol30), not iv30d. IV, HV and borrow values are in percentage points (28.8 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, up to 100, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical IV rank and percentile (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_monies_forecast","title":"Historical forecast volatility by delta (end of day)","description":"End-of-day ORATS forecast volatility surface for a past trade date, one row per expiration. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Historical forecast volatility by delta (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_monies_implied","title":"Historical implied volatility by delta (end of day)","description":"End-of-day implied volatility surface for a past trade date: one row per expiration with ATM IV, skew and IV at fixed call deltas vol0..vol100. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Historical implied volatility by delta (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_splits","title":"Stock splits (history)","description":"Split history for a ticker: splitDate and divisor.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Stock splits (history)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_strikes","title":"Historical option chain (end of day)","description":"End-of-day option chain for a past trade date (2007 on): every strike and expiration with quotes, smoothed IV and Greeks. Narrow with dte and delta ranges. Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"dte":{"type":"string","description":"Days-to-expiration range \"min,max\", e.g. \"25,35\". Same-day expiry counts as 1."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Historical option chain (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_strikes_options","title":"Historical option contract (end of day)","description":"End-of-day history of one contract chosen by ticker, expiration and strike (both call and put on each row). Omit tradeDate for the contract's whole life. Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"expirDate":{"type":"string","description":"Expiration date YYYY-MM-DD."},"strike":{"type":"number","description":"Strike price, e.g. 225."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","expirDate","strike"],"additionalProperties":false},"annotations":{"title":"Historical option contract (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_summaries","title":"Historical volatility summary (end of day)","description":"End-of-day constant-maturity volatility summary (IV term structure, ex-earnings IV, skew pillars, implied move) from 2007. Give tickers, a trade date, or both: a date alone returns every ticker that day; a ticker alone returns its full history. IV and borrow values are decimals (0.288 = 28.8%). stockPrice is the ORATS underlying value derived from option prices (for indexes such as SPX: the implied value), not an exchange quote or index level.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, up to 100, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical volatility summary (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_monies_implied","title":"Implied volatility by delta at past minutes (intraday)","description":"Minute-level implied volatility surface (from August 2020): per expiration ATM IV, skew and IV at fixed call deltas, for one minute or a whole day. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\", or a whole day as YYYY-MM-DD. Coverage starts August 2020."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Implied volatility by delta at past minutes (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_strikes_chain","title":"Option chain at a past minute (intraday)","description":"The full option chain as of one past minute (from August 2020): quotes, smoothed IV and Greeks per strike. Minute timestamps only; narrow with dte and delta. Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\". Whole days are not available for full chains. Coverage starts August 2020."},"dte":{"type":"string","description":"Days-to-expiration range \"min,max\", e.g. \"25,35\". Same-day expiry counts as 1."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Option chain at a past minute (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_strikes_option","title":"One option at past minutes (intraday)","description":"One contract's minute-by-minute quotes, IV and Greeks (from January 2022), by ORATS compact symbol. Use a minute or a whole day. Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":30,"description":"ORATS compact option symbol (no call/put letter; both sides come back per row): ROOT + YYMMDD expiry + strike x1000 padded to 8 digits, e.g. AAPL28012100250000 for AAPL 2028-01-21 $250."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\", or a whole day as YYYY-MM-DD. Coverage starts August 2020."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"One option at past minutes (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_summaries","title":"Volatility summary at past minutes (intraday)","description":"Minute-level constant-maturity volatility summary (from August 2020) for one minute or a whole day. IV and borrow values are decimals (0.288 = 28.8%). stockPrice is the ORATS underlying value derived from option prices (for indexes such as SPX: the implied value), not an exchange quote or index level.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\", or a whole day as YYYY-MM-DD. Coverage starts August 2020."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Volatility summary at past minutes (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_time_sales_option","title":"Option trade prints for a past day","description":"Every OPRA option trade for a ticker (or one contract) on a past day, from 2022-09-09: price, size, NBBO at the trade, inferred aggressor side, and delta/IV from the one-minute snapshot. Filter by expiration, call/put, strike, time window and minimum size.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD. History begins 2022-09-09; a day's tape is complete after about 20:30 ET (use get_live_time_sales_option during the session)."},"symbol":{"type":"string","description":"One OCC contract instead of a whole chain, e.g. SPY260821P00630000."},"expirDate":{"type":"string","description":"Expiration date YYYY-MM-DD."},"callPut":{"type":"string","enum":["C","P"],"description":"Calls (C) or puts (P) only."},"strike":{"type":"number","description":"Strike price, e.g. 225."},"from":{"type":"string","description":"Start of an Eastern-time window HH:MM, inclusive."},"to":{"type":"string","description":"End of an Eastern-time window HH:MM, inclusive."},"minSize":{"type":"integer","minimum":1,"description":"Only prints of at least this many contracts."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["tradeDate"],"additionalProperties":false},"annotations":{"title":"Option trade prints for a past day","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intraday_backtest_inputs","title":"Intraday backtest inputs","description":"The inputs an intraday backtest was submitted with.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Intraday backtest inputs","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intraday_backtest_results","title":"Intraday backtest results","description":"Results of a completed intraday backtest: summary statistics, monthly returns, diagnostics, warnings and the effective configuration the engine ran, plus the per-leg trade log (tradeId groups legs) and daily returns, paged with limit and order (latest or earliest).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Rows to return (default 100, max 1000)."},"order":{"type":"string","enum":["latest","earliest"],"description":"Which end of the series to return (default latest)."}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Intraday backtest results","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intraday_backtest_status","title":"Intraday backtest status","description":"Status of one intraday backtest by id (queued, running with progress, completed with headline stats, timed_out, or error with the reason), or every backtest on the account, newest first, when id is omitted. With id and waitSeconds (up to 40), the call waits for a queued or running job to finish before answering, so one call replaces repeated polling.","inputSchema":{"type":"object","properties":{"id":{"description":"backtestId to look up","type":"string"},"waitSeconds":{"type":"integer","minimum":1,"maximum":40,"description":"Wait up to this many seconds (max 40) for a queued or running job to finish. Needs id."}},"additionalProperties":false},"annotations":{"title":"Intraday backtest status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_expirations","title":"Expiration dates (real time)","description":"All listed expiration dates for a ticker. With include=true, each date comes with its strikes and settlement time (expiryTod: am or pm).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"include":{"type":"boolean","description":"true returns {expirDate, strikes, expiryTod} objects instead of plain dates."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Expiration dates (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_monies_forecast","title":"Forecast volatility by delta, per expiration (real time)","description":"ORATS forecast volatility surface for one ticker: one row per expiration with forecast vol at fixed call deltas vol0..vol100 (vol50 is ATM). Compare with get_live_monies_implied to find mispriced expirations. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Forecast volatility by delta, per expiration (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_monies_implied","title":"Implied volatility by delta, per expiration (real time)","description":"The implied volatility surface for one ticker in real time: one row per expiration with ATM IV (atmiv), skew (slope, deriv) and IV at fixed call deltas vol0..vol100 (a 25-delta put is vol75). IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Implied volatility by delta, per expiration (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_strikes","title":"Option chain (real time)","description":"Full option chain for one ticker in real time: every strike and expiration, call and put quotes on one row, ORATS smoothed IV (smvVol), and Greeks. Narrow with dte and delta ranges; chains can run to thousands of rows. Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"dte":{"type":"string","description":"Days-to-expiration range \"min,max\", e.g. \"25,35\". Same-day expiry counts as 1."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Option chain (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_strikes_monthly","title":"Option chain for one expiration (real time)","description":"Real-time chain for one ticker and one expiration date: quotes, smoothed IV and Greeks per strike. Get valid expirations from get_live_expirations. Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"expiry":{"type":"string","description":"Expiration date YYYY-MM-DD (list them with get_live_expirations)."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","expiry"],"additionalProperties":false},"annotations":{"title":"Option chain for one expiration (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_strikes_options","title":"Specific option contracts (real time)","description":"Real-time quote, smoothed IV and Greeks for specific contracts by OCC symbol, one row per contract (call or put as the symbol says). Greeks are one set per strike: gamma, vega, theta, rho and phi apply to the call and the put alike; only delta differs (put delta = call delta - 1).","inputSchema":{"type":"object","properties":{"tickers":{"type":"string","maxLength":2500,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"OCC option symbols, comma-separated (up to 100): ROOT + YYMMDD + C or P + strike x1000 padded to 8 digits, e.g. AAPL280121C00250000 (AAPL 2028-01-21 $250 call)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["tickers"],"additionalProperties":false},"annotations":{"title":"Specific option contracts (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_summaries","title":"Volatility summary (real time)","description":"Real-time constant-maturity volatility summary: IV at 10 days to 1 year (iv10d..iv1y), ex-earnings IV, delta-skew pillars (dlt25Iv30d etc.), term-structure contango, implied move, borrow and risk-free rates. IV and borrow values are decimals (0.288 = 28.8%). stockPrice is the ORATS underlying value derived from option prices (for indexes such as SPX: the implied value), not an exchange quote or index level.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":1000,"pattern":"^[^,]*(,[^,]*){0,99}$","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, up to 100, batched automatically). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Volatility summary (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_time_sales_option","title":"Option trade prints today (live)","description":"Today's OPRA option trades for a ticker (or one contract) as the session builds. Same filters as get_hist_time_sales_option. Outside market hours there is no live tape.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","maxLength":20,"description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"symbol":{"type":"string","description":"One OCC contract instead of a whole chain, e.g. SPY260821P00630000."},"expirDate":{"type":"string","description":"Expiration date YYYY-MM-DD."},"callPut":{"type":"string","enum":["C","P"],"description":"Calls (C) or puts (P) only."},"strike":{"type":"number","description":"Strike price, e.g. 225."},"from":{"type":"string","description":"Start of an Eastern-time window HH:MM, inclusive."},"to":{"type":"string","description":"End of an Eastern-time window HH:MM, inclusive."},"minSize":{"type":"integer","minimum":1,"description":"Only prints of at least this many contracts."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Option trade prints today (live)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_scanner_body_example","title":"Scanner request body template","description":"A complete, runnable scanner request body to adapt for scan_option_trades `body` (single-leg or multi-leg). No API call.","inputSchema":{"type":"object","properties":{"bodyExample":{"description":"Print an exact, runnable body template (no API call) — start multi-leg strategies from this","type":"string","enum":["single-leg","multi-leg"]},"kind":{"type":"string","enum":["single-leg","multi-leg"],"description":"Which template: single-leg (default) or multi-leg."}},"additionalProperties":false},"annotations":{"title":"Scanner request body template","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"lookup_field_definition","title":"Look up ORATS field definitions","description":"Definition, units (decimal vs percentage points, price, count, days) and endpoints for any ORATS field, by exact name or wildcard (e.g. \"iv30d\", \"exErn*\", \"*Hv20d\"). No API call.","inputSchema":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":100,"description":"Field name or wildcard pattern, e.g. \"orFcst20d\" or \"iv*\"."}},"required":["field"],"additionalProperties":false},"annotations":{"title":"Look up ORATS field definitions","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"match_backtest_finder_environment","title":"Backtests matching today's market","description":"Precomputed backtests whose entry conditions (VIX, SMA, RSI, IV percentile, slope) match the latest market environment, for the given strategies, across the environment ETF universe. Rank is global across every strategy and ticker requested, and rows are not sorted: pass several strategies in one call and sort by rank.","inputSchema":{"type":"object","properties":{"strategies":{"type":"string","description":"Comma-separated strategy names to include, e.g. IronCondor,ShortPutSpread. One or more of: IronButterfly, IronCondor, LongCall, LongCallCalendar, LongCallSpread, LongPut, LongPutCalendar, LongPutSpread, LongStraddle, ShortCall, ShortCallSpread, ShortPut, ShortPutSpread, ShortStraddle, ShortStrangle"},"sort":{"description":"Client-side re-sort of the returned rows by row field(s): '-stratWinRate' desc, comma for multi (applied before limit)","type":"string"},"limit":{"description":"Client-side cap on returned rows (after sort)","type":"number"}},"required":["strategies"],"additionalProperties":false},"annotations":{"title":"Backtests matching today's market","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"scan_option_trades","title":"Scan for option trade candidates","description":"Scan current option chains for trade candidates matching a strategy, ranked by closeness to the delta and DTE targets (not by value), with pricing, Greeks and probability of profit (and with distribution=true: risk, max gain/loss, breakevens). Pass sort (e.g. \"-distPct\") to rank by a result field instead; long results are trimmed from the end of that order. Arguments build a single-leg scan; pass `body` (see get_scanner_body_example) for multi-leg strategies. Rate limit: 10 scans per minute.","inputSchema":{"type":"object","properties":{"symbols":{"description":"Comma-separated underlyings to scan (e.g. AAPL,MSFT). Response time scales with symbol count.","type":"string"},"optionType":{"description":"Leg option type (single-leg builder) Default: call.","type":"string","enum":["call","put"]},"ratio":{"description":"Leg ratio; negative = short (single-leg builder) Default: 1.","type":"number"},"dte":{"description":"Days-to-expiration band 'min,max' (same-day expiry is dte 1, so 0,0 is widened to 0,1) Default: 20,45.","type":"string"},"dteTarget":{"description":"DTE target (defaults to the band midpoint, rounded half up: 30,45 targets 38)","type":"number"},"delta":{"description":"Absolute delta band 'min,max' Default: 0.2,0.5.","type":"string"},"deltaTarget":{"description":"Delta target (defaults to band midpoint)","type":"number"},"totalTrades":{"description":"Total cap across symbols — applied ONLY when tradesPerSymbol is 0/null; otherwise ignored Default: 20.","type":"number"},"tradesPerSymbol":{"description":"Max candidates per symbol (no cap; non-negative integer). Multi-leg bodies also use it to size EACH leg's candidate pool (tradesPerSymbol / leg count closest-to-target strikes) before pairing, so use 20+ for spreads and 40+ for 4-leg bodies or the width band may match nothing Default: 5.","type":"number"},"dataSource":{"description":"Quote feed to scan Default: delayed.","type":"string","enum":["real-time","delayed"]},"distribution":{"type":"boolean","description":"Include risk/maxGain/maxLoss/pop/breakevens (explicit value: distribution false) Default: true."},"drift":{"description":"Assumed stock drift %, changes pop (0 neutral, + bullish, - bearish; ±10 is already a strong view). Capped at ±50 here: the API accepts any number and pop saturates at 100 past roughly ±20 Default: 0.","type":"number"},"id":{"description":"Echoed label for bookkeeping","type":"string"},"body":{"type":"object","description":"Full scanner request body (multi-leg strategies). Overrides the single-leg arguments. Start from get_scanner_body_example."},"sort":{"type":"string","maxLength":50,"pattern":"^-?[A-Za-z]+$","description":"Order candidates by a numeric result field before the response is trimmed, \"-\" for descending: \"-distPct\", \"-smoothPct\" or \"-fcstPct\" (most value vs ORATS models first), \"-pop\" (highest probability of profit), \"-maxLoss\" (smallest loss first; losses are negative). Candidates the model could not value (risk -999) go last. Default: closeness to the targets."}},"additionalProperties":false},"annotations":{"title":"Scan for option trade candidates","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search_backtest_finder","title":"Search precomputed backtests","description":"Rank ORATS precomputed option-strategy backtests for a ticker and strategy (CamelCase, e.g. IronCondor) by a composite or metric, with an optional quality screen and metric filters. Returns up to 100 rows; each row id feeds get_backtest_finder_stats/trades/returns and rootBaseId feeds get_backtest_finder_input.","inputSchema":{"type":"object","properties":{"ticker":{"description":"Underlying to search (required unless id)","type":"string"},"strategy":{"description":"One of: IronButterfly, IronCondor, LongCall, LongCallCalendar, LongCallSpread, LongPut, LongPutCalendar, LongPutSpread, LongStraddle, ShortCall, ShortCallSpread, ShortPut, ShortPutSpread, ShortStraddle, ShortStrangle","type":"string"},"rank":{"description":"Ranking: a composite (bestReturnOnRisk, bestOverallPerformance, bestConservativeWinner) or a metric id (annualReturn, sharpe, sortino, maxDrawDown, ...) Default: bestReturnOnRisk.","type":"string"},"rankDir":{"description":"asc = best-ranked first Default: asc.","type":"string","enum":["asc","desc"]},"filters":{"type":"object","description":"Metric bands, e.g. {\"pctOfTimeInMarket\":{\"min\":40}}."},"screen":{"type":"boolean","description":"Server-side default quality screen (pctOfTimeInMarket >= 40, marginToStockPct <= 20, riskRewardAvg >= 0.07) that keeps degenerate single-trade rows out of the ranking; screen false returns the raw ranking Default: true."},"environment":{"type":"object","description":"Current-environment entry levels {entryVix, entrySma, entryRsi, entryIvPct, entrySlopePct}; omit to search all backtests."},"id":{"description":"Fetch a single performance row by its id instead of searching","type":"string"},"sort":{"description":"Client-side re-sort of the returned rows by row field(s): '-stratWinRate' desc, comma for multi (applied before limit; server ranking comes from rank)","type":"string"},"limit":{"description":"Client-side cap on returned rows (after sort). The ranked search returns at most 100 rows, so values above 100 still yield 100; narrow with filters or environment instead","type":"number"}},"additionalProperties":false},"annotations":{"title":"Search precomputed backtests","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"set_intraday_backtest_note","title":"Save a note on an intraday backtest","description":"Save a text note on an intraday backtest, replacing any existing note.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"},"text":{"type":"string","description":"Note text"}},"required":["id","text"],"additionalProperties":false},"annotations":{"title":"Save a note on an intraday backtest","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"submit_intraday_backtest","title":"Submit an intraday option backtest","description":"Start a custom one-minute option backtest on the ORATS Intraday backtester (data from October 2020). Returns a backtestId at once: poll get_intraday_backtest_status until status is completed (or timed_out, which still has partial results), then call get_intraday_backtest_results. Bad inputs fail within seconds with status error and the reason. Uses the account's backtest quota.","inputSchema":{"type":"object","properties":{"symbol":{"description":"Underlying to backtest (e.g. SPY)","type":"string"},"startDate":{"description":"First trade date YYYY-MM-DD (2020-10-01 or later)","type":"string"},"endDate":{"description":"Last trade date YYYY-MM-DD (default: the last completed session). Today or a future date is clamped to the last completed session by the engine; effectiveConfig.endDate in the results shows what ran","type":"string"},"entryTime":{"description":"Entry time HHMM ET, 0934-1600 (the engine rejects anything before 0934; 1600 enters on the closing bar) Default: 0934.","type":"string"},"exitTime":{"description":"Exit time HHMM ET, 0934-1600 (omit = hold to expiration). Fills at the first available bar at or after it; half days exit on the last bar of the session","type":"string"},"strategy":{"description":"One of: PUT_CREDIT_SPREAD, CALL_DEBIT_SPREAD, LONG_CALL, SHORT_PUT, CALL_CREDIT_SPREAD, PUT_DEBIT_SPREAD, SHORT_CALL, LONG_PUT, IRON_CONDOR, IRON_BUTTERFLY, LONG_STRADDLE, SHORT_STRADDLE, SHORT_STRANGLE, LONG_CALL_CALENDAR, LONG_PUT_CALENDAR, DOUBLE_CALENDAR, LONG_CALL_BUTTERFLY, LONG_PUT_BUTTERFLY","type":"string"},"legs":{"type":"array","items":{"type":"object"},"minItems":1,"description":"Leg objects, e.g. [{\"optionType\":\"put\",\"ratio\":-1,\"deltaTarget\":0.3,\"deltaMin\":0.2,\"deltaMax\":0.4,\"dteTarget\":5,\"dteMin\":3,\"dteMax\":9}]. Later legs can use legRelation."},"expiryTod":{"description":"Settlement-time filter: both (default, no filter), weekly/pm (PM-settled), monthly/am (AM-settled). AM settlement exists only on cash-settled index options (SPX, NDX, RUT...): on equities and ETFs, monthly/am matches NOTHING and weekly/pm includes every expiration, monthlies too Default: both.","type":"string","enum":["both","weekly","monthly","am","pm"]},"stopLossPct":{"description":"Stop loss % of entry cost (omit, 0 or 'none' = no stop; the engine applies no default and rejects negatives)","type":"string"},"profitTargetPct":{"description":"Profit target % of entry cost (omit or 0 = none; negatives are rejected)","type":"number"},"tradePct":{"description":"IGNORED by the engine (fills use a per-leg-count fraction of the bid-ask spread: 1 leg 0.75, 2 legs 0.66, 3 legs 0.56, 4+ legs 0.53); sending it only adds a warning to the results, so it is left out unless set","type":"number"},"commissionPerContract":{"description":"Commission $/contract/leg, entry and exit Default: 0.65.","type":"number"},"maxHoldDays":{"description":"Max trading days held before forced exit","type":"number"},"maxConcurrentTrades":{"description":"Cap on simultaneously open trades (0 = unlimited). Server default: 1 for daily entries, unlimited for signals; capital-weighted portfolio returns when > 1","type":"number"},"groups":{"type":"array","items":{"type":"object"},"description":"Per-group exit overrides {group, stopLossPct, profitTargetPct, exitTime, maxHoldDays} for legs tagged \"group\": N."},"signals":{"type":"array","items":{"type":"object"},"description":"Entry/exit signal pairs [{\"entry\":\"YYYYMMDDHHMM\",\"exit\":\"YYYYMMDDHHMM\"}]; omit to trade every day at entryTime."},"body":{"type":"object","description":"Full request body {inputs: {...}} (overrides the other arguments)."}},"additionalProperties":false},"annotations":{"title":"Submit an intraday option backtest","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}}]}