A trelic strategy is written in plain English, but it drives a fixed set of tools. This is all of them: 27 tools, what each returns, and the exact values they accept. The same list appears inside the app under the strategy editor, where each entry has a + button that inserts it for you.
get_candidate_symbols computed locallyAsk whether a candidate list is configured for this cycle. Call this FIRST, before any market-data tool. BY DEFAULT no list is configured: it returns configured=false and you pick candidates yourself as normal, which is the expected case -- treat it as confirmation, not as an error. If the user HAS configured a source it returns symbols chosen by code (a ranked screen, or a fixed list); screen exactly those, in the order given, adding nothing and skipping nothing. A configured list exists so a cycle can be replayed: when you choose names yourself, "no trade" is ambiguous (nothing qualified, or the qualifying name was never looked at?) and the cycle cannot be backtested.
No parameters.
get_watchlists Robinhood onlyList the account's watchlists (user-created and followed curated lists). Use to find a list_id, then fetch its members with get_watchlist_items. Good starting point for hunting candidates the user already cares about.
No parameters.
get_watchlist_items Robinhood onlyList the symbols in a watchlist by its list_id (from get_watchlists or get_popular_watchlists). Does not include live prices -- follow up with get_equity_quotes on the symbols.
list_id*
list_id - UUID of the watchlist.get_popular_watchlists Robinhood onlyDiscover Robinhood-curated lists like "100 Most Popular" or "Daily Movers". Returns list_ids usable with get_watchlist_items -- a fast way to find names moving today instead of guessing tickers.
No parameters.
get_scans Robinhood onlyList the user's saved market scanners/screeners (sets of filters like "RSI > 70 and Volume > 1M"). Returns each scan's id and title. Run one with run_scan to hunt candidates matching its criteria.
No parameters.
run_scan Robinhood onlyExecute a saved scanner by scan_id (from get_scans) against LIVE market data. Returns matching instruments with tickers -- use this to find candidates systematically instead of checking a fixed list of names.
scan_id*
scan_id - The scan identifier from get_scans.search Robinhood onlyFind a ticker symbol from a company name or partial name.
query*
query - Company name or partial name to search for.get_equity_quotes Robinhood + PublicGet real-time quotes and prior close for one or more equity symbols.
symbols*
symbols - Up to 20 ticker symbols.get_equity_historicals Robinhood + PublicGet historical OHLCV price bars for a symbol over a time range. Bars return compacted as {t,o,h,l,c,v} (time, open, high, low, close, volume), and only the newest ~200 bars arrive per call, split across symbols -- so request 1-2 symbols per call when you need depth, and make a separate call per symbol for full windows. IMPORTANT: compute start_time carefully to avoid exceeding 5000 bars. For 5minute bars, a safe range is 2 trading days -- set start_time to exactly 48 hours ago in RFC3339 UTC (e.g. if now is 2026-06-29T21:00:00Z, use 2026-06-27T21:00:00Z). For hourly bars, up to 3 weeks is safe. For daily bars, up to 1 year. Do not use vague offsets like "1 month ago at 5min" -- that exceeds the cap. If unsure, use interval="hour" and 2 weeks, which always fits.
symbols*, start_time*, end_time, interval minute | 5minute | 10minute | 30minute | hour | 4hour | day | week | month
symbols - One or more stock ticker symbols (up to 10).start_time - Start of the range, RFC3339 UTC -- MUST end in 'Z' (UTC). A local-offset timestamp such as 2026-08-06T09:35:00-04:00 is REJECTED by the broker (start_time must be RFC3339 UTC, use a Z suffix) -- this failed 16 times in one session on 2026-08-06. Convert to UTC and append Z; do not send an offset. Compute this as an exact timestamp, not a vague offset.end_time - End of the range, RFC3339 UTC. Defaults to now if omitted.interval - Bar interval. For intraday analysis use '5minute' with a 48-hour window. For trend context use 'hour' or 'day'.get_relative_volume computed locallyTWO volume measures for a symbol, both computed from the newest COMPLETE bar (never the one still forming). (1) relative_volume: this bar versus the SAME CLOCK MINUTE on previous sessions -- 1.0 means typical for this time of day. Answers "is this name in play today". (2) volume_acceleration: this bar versus the recent PRIOR BARS IN THE SAME SESSION -- answers "is the move happening right now being fed". The window length and whether it is a mean or a median are configured by the user; the response reports both as acceleration_lookback_used and acceleration_baseline, so read the reading against those rather than assuming a fixed window. 1.0 means the current bar matches its recent same-session neighbours. Which one to gate on: relative_volume. It is the participation measure and it predicts MAGNITUDE (measured on this app's own captured bars, names at 3x their normal volume for the time of day moved nearly twice as far over the next half hour as the average bar). volume_acceleration is a second derivative: on a SUSTAINED surge it reads near 1.0 or below, because the bars it compares against are already large. A name up 5% on 3x volume routinely scores 1.1 on acceleration. Gating on acceleration therefore REJECTS the strongest, most sustained moves and accepts only the first bar of a surge. Use acceleration as a tiebreaker between names that already pass on relative_volume, never as the sole gate, and never reject a name for low acceleration while relative_volume is high. Neither measure predicts DIRECTION; that has to come from price structure. The response also carries volume_state, which combines the two -- prefer it over re-deriving the combination yourself. Do NOT compute either from raw bars: a rolling window that spans into the previous session pulls in its closing ramp and reads far below 1 for a structural reason. Either field can be null with a reason (too little history, or too early in the session for the configured lookback) -- treat null as unknown, never as a pass.
symbol*, interval minute | 5minute | 10minute | 30minute | hour, lookback_days, acceleration_lookback
symbol - One stock ticker, uppercase.interval - Bar interval to measure. Defaults to '5minute'.lookback_days - Calendar days of history to sample prior sessions from. Defaults to 10, which is usually 6-7 trading sessions.acceleration_lookback - How many prior SAME-SESSION bars volume_acceleration is measured against. OMIT THIS unless you have a specific reason to widen or narrow one call: the default comes from the user's Signal Tuning setting, and overriding it puts that call on a different scale than every other reading in the cycle. The value actually used is echoed back as acceleration_lookback_used.get_equity_technical_indicators Robinhood onlyCompute a technical indicator over one symbol's bars, broker-side. PREFER THIS over get_equity_historicals whenever you want a trend/momentum read rather than the raw price path -- it returns the computed value instead of hundreds of bars. Types: rsi, macd, ema, sma, bollinger_bands, atr, vwap, obv, adx, cci, williams_r, momentum, roc, mfi, supertrend, keltner_channels, donchian_channels, pivot_points. Use output='latest' for the current reading (cheapest) or 'last:N' for a short series. interval is required. Indicators emitting multiple fields (macd, bollinger_bands) must be read together, not in isolation. TUNING PARAMETERS ARE TYPE-SPECIFIC and passing one the chosen type does not accept is REJECTED, so send only the parameter listed for your type, and omit it entirely to use the default: period -> ema, sma, rsi, momentum, roc, cci, williams_r, atr, mfi, adx, donchian_channels; period + num_std -> bollinger_bands; period + multiplier -> keltner_channels, supertrend; fast_period, slow_period, signal_period -> macd (never period); method -> pivot_points; NO parameters at all -> vwap, obv.
symbol*, type*, interval* minute | 5minute | 10minute | 30minute | hour | 4hour | day | week, start_time*, end_time, period, num_std, multiplier, fast_period, slow_period, signal_period, method, output
symbol - One stock ticker, uppercase. Exactly one symbol per call.type - Indicator to compute, e.g. "rsi", "macd", "vwap", "bollinger_bands", "atr".interval - Bar interval the indicator is computed on. Periods are counted in bars, so this is required.start_time - Start of the range, RFC3339 UTC -- MUST end in 'Z' (UTC). A local-offset timestamp such as 2026-08-06T09:35:00-04:00 is REJECTED by the broker (start_time must be RFC3339 UTC, use a Z suffix) -- this failed 16 times in one session on 2026-08-06. Convert to UTC and append Z; do not send an offset. Allow enough history for the indicator to warm up (e.g. at least 2x the period).end_time - End of the range, RFC3339 UTC. Defaults to now.period - Lookback in bars. Omit to use the indicator's default (rsi/atr/cci/mfi/roc 14, ema/sma 9, williams_r/adx 10, momentum 12, bollinger/keltner/donchian 20, supertrend 10). NOT accepted by vwap, obv, macd or pivot_points.num_std - Standard deviations for the bands. bollinger_bands ONLY (default 2).multiplier - Band/offset multiplier. keltner_channels (default 2) and supertrend (default 3) ONLY.fast_period - Fast EMA period. macd ONLY (default 12). macd does not accept period.slow_period - Slow EMA period. macd ONLY (default 26). macd does not accept period.signal_period - Signal EMA period. macd ONLY (default 9). macd does not accept period.method - Calculation method. pivot_points ONLY; 'classic' is the only accepted value.output - How much of the series to return. 'latest' is the most recent value only and is by far the cheapest -- use it unless you need the shape of the series. 'last:N' returns the most recent N values (e.g. 'last:5'). 'series' returns the full range and is the default if omitted, so pass 'latest' explicitly when you only need the current reading.get_equity_price_book Robinhood onlyLevel 2 order book for a stock: the resting bid and ask sizes at each price, not just the best quote. Use it to tell a tight spread WITH SIZE behind it from a tight spread on a handful of shares -- the two look identical on get_equity_quotes and behave completely differently when you try to get filled. Worth a call before committing to a name whose liquidity you are unsure of; not worth one on a mega-cap where depth is never the question.
symbols*
symbols - Stock symbols, uppercase. MAX 4 PER CALL.get_indexes Robinhood onlyList the market indexes available, with their instrument IDs. Call this FIRST if you want index data: get_index_quotes and get_index_historicals both take instrument UUIDs, not symbols, and this is the only place to get them. Returns every index, so one call per cycle is enough -- the IDs are stable.
No parameters.
get_index_quotes Robinhood onlyCurrent level for one or more market indexes (S&P 500, Nasdaq 100, VIX and similar). This is the cheapest way to answer "what is the broad tape doing right now" before committing to a directional trade -- the same setup is a different trade into a rising market than a falling one. Takes instrument IDs from get_indexes, NOT symbols.
instrument_ids*
instrument_ids - Index instrument UUIDs from get_indexes.get_index_historicals Robinhood onlyOHLC bars for market indexes -- the trend of the broad tape rather than its current level. Use when the direction of the market over the session matters to the entry, not just where it is now. Takes instrument IDs from get_indexes, NOT symbols. interval is REQUIRED here (unlike the equity and option historicals, there is no server auto-select).
instrument_ids*, start_time*, end_time, interval* 5second | 15second | 30second | minute | 5minute | 10minute | 30minute | hour | 4hour | day | week | month | 3month | 6month | year
instrument_ids - Index instrument UUIDs from get_indexes. Up to 10 per call.start_time - Start of the range, RFC3339 UTC -- MUST end in 'Z'. A local-offset timestamp is rejected.end_time - End of the range, RFC3339 UTC. Defaults to now.interval - REQUIRED -- there is no auto-select for indexes. Note the one-minute bar is named minute, with no digit prefix.get_equity_fundamentals Robinhood onlyToday's fundamentals for stock symbols: valuation ratios (PE, P/B), market cap, session OHLCV, trailing volume averages, 52-week range, dividend schedule, company profile. Use to judge liquidity and context on a candidate before proposing a trade.
symbols*
symbols - Up to 10 ticker symbols.get_earnings_calendar Robinhood onlyGet earnings reports scheduled across the whole market over a date window (up to 31 days). Use for "what large-caps report this week?" style questions. Filter with filter="high_market_cap" to limit to large caps.
start_date, days, filter
start_date - Window start date YYYY-MM-DD. Defaults to today.days - Window length in days (1-31). Positive = forward, negative = lookback.filter - Optional: "high_market_cap" to limit to large caps only.get_earnings_results Robinhood onlyGet upcoming and recent earnings dates for a specific stock. Use this before proposing any options play to check whether earnings fall before the option expires -- earnings can cause large unexpected moves and IV crush. Returns EPS estimates, actual EPS, report date, and timing (before/after market).
symbol*
symbol - Stock ticker symbol (e.g. "AAPL").get_equity_tradability Robinhood onlyCheck whether a symbol can be traded on this account, and whether fractional shares are supported.
symbols*
symbols - Up to 10 ticker symbols to check.get_option_chains Robinhood + PublicLoad the option chain for an underlying symbol. Returns available expiration dates, strikes, and chain metadata. Pass "underlying_symbol" with a single ticker (e.g. "AAPL").
underlying_symbol*
underlying_symbol - A single underlying ticker symbol (e.g. "AAPL"). Note: the parameter is "underlying_symbol", not "symbol".get_option_instruments Robinhood + PublicLoad specific option contracts for an underlying symbol, optionally filtered by expiry date and/or strike price. Returns contract details including the instrument UUID needed to place an order. Pass one expiration_date as a string (YYYY-MM-DD). strike_price as a string (e.g. "150.0000"). After receiving results, filter by call/put yourself -- the server does not support option_type as a filter.
chain_symbol*, expiration_dates, strike_price
chain_symbol - A single underlying ticker symbol (e.g. "AAPL"). Note: the parameter is "chain_symbol", not "symbol".expiration_dates - A single expiry date as a string in YYYY-MM-DD format (e.g. "2026-07-18").strike_price - Strike price as a string (e.g. "150.0000"). Optional.get_option_quotes Robinhood + PublicGet real-time bid/ask quotes for specific option contracts by their instrument UUID. Use this to check current premium and bid/ask spread after identifying contracts via get_option_instruments.
instrument_ids*
instrument_ids - Robinhood option instrument UUIDs (from get_option_instruments).get_option_historicals Robinhood onlyOHLC bars for specific option CONTRACTS -- how the premium itself has traded, which is not the same shape as the underlying's chart. Use it to judge whether a contract is already extended before paying for it: an underlying up 2% on the day can have a call that has already tripled, and the entry risk lives in the premium, not the stock. Takes contract instrument UUIDs from get_option_instruments.
instrument_ids*, start_time*, end_time, interval 15second | 30second | minute | 5minute | 10minute | 30minute | hour | 4hour | day | week | month, bounds regular | 24_5 | 24_7
instrument_ids - Option contract UUIDs from get_option_instruments. Up to 10 per call.start_time - Start of the range, RFC3339 UTC -- MUST end in 'Z'.end_time - End of the range, RFC3339 UTC. Defaults to now.interval - Optional -- omitted, the server picks an interval bounded to the range. Note the one-minute bar is named minute, with no digit prefix.bounds - Session bounds. Defaults to 'regular'. Only use the extended values when overnight option activity is specifically what you are asking about.get_option_positions Robinhood + PublicView currently open options positions on the account, including contract details, quantity, and cost basis.
No parameters.
get_option_orders Robinhood onlyPast options orders on the account, newest first, including fills, cancellations and rejections. Use to see what was actually traded and when. NOTE: to judge how long a CURRENT position has been held, read held_minutes on get_option_positions instead -- it is already computed for you and needs no date arithmetic.
state filled | queued | confirmed | partially_filled | rejected | cancelled, created_at_gte, placed_agent user | agentic
state - Filter to one order state. Use "filled" for orders that actually executed.created_at_gte - Only orders at or after this time (RFC3339 UTC or YYYY-MM-DD). Narrow this -- the per-page cap is fixed.placed_agent - Filter by who placed it: "agentic" is this app, "user" is a manual order in the Robinhood app.get_realized_pnl Robinhood onlyThe account's realized profit & loss over a window (aggregate daily buckets: realized gain and trade count per day, plus totals). Use span: day|week|month|3month. Helpful for judging how recent closes have actually performed before proposing more of the same.
span day | week | month | 3month
span - Preset window. Defaults to 3month.propose_trade Robinhood onlyPropose one hypothetical trade based on your analysis, or indicate no action is warranted. Call this once you are done using any market data tools. Supports both equity and options trades. NOTE: all options orders are placed as LIMIT orders -- option_limit_price is mandatory and market options orders are not possible.
no_action, symbol, side buy | sell, amount, limit_price, trade_type equity | option, option_instrument_id, option_type call | put, option_strike, option_expiry, option_contracts, option_limit_price, reasoning*
no_action - True if no trade should be proposed right now.symbol - Stock ticker symbol (equity trades, or underlying for options).side - Buy or sell.amount - Dollar amount for equity trades. REQUIRED for equity. For options this is computed automatically as contracts x 100 x option_limit_price.limit_price - Optional limit price per share for equity orders. Omit for market orders.trade_type - Whether this is an equity or options trade. Defaults to "equity" if omitted.option_instrument_id - Robinhood UUID for the specific options contract. For NEW positions: get this from get_option_instruments. For CLOSING existing positions: use the option_id field from get_option_positions -- copy it directly into this field. REQUIRED -- never omit this, the order cannot be placed without it.option_type - Call or put. Required for options trades -- include even when closing an existing position.option_strike - Strike price of the contract. Required for options trades -- include even when closing an existing position.option_expiry - Expiration date (YYYY-MM-DD). Required for options trades -- include even when closing an existing position.option_contracts - Number of contracts. Required for options trades.option_limit_price - Limit price per share (the option premium). REQUIRED for all options trades including closes -- use the bid price when selling to close, the ask or mid when buying. All options orders are limit orders; there is no market-order fallback.reasoning - Brief explanation of the proposal or why no action is proposed. For options, include the full contract details: underlying, type, strike, expiry, premium, and the thesis.These are not tools. They arrive on the account snapshot or on a tool result, and a strategy can refer to them directly. The tag says what has to be true for the field to exist at all - a strategy keyed off a field that is not being published gets no error. The agent simply reasons around it, which is very hard to spot from the outside.
held_minutes - Minutes since the position was opened. Use to avoid judging a fill on the spread it just crossed.
each positionoption_id - Copy into propose_trade.option_instrument_id to CLOSE that exact contract.
each option positiontrailing_stop_hit - True once the peak-based trail is breached. Publishing it does nothing on its own -- the strategy must act on it.
Trailing Exit Data ONtrailing_stop_pnl_percent - The P/L % at which the trail would trigger, so a strategy can act before it is hit.
Trailing Exit Data ONrelative_volume - This bar vs the SAME CLOCK MINUTE on prior sessions. 1.0 is typical for this time of day. Answers "is this name in play today".
get_relative_volumevolume_acceleration - This bar vs recent prior bars in the same session. Answers "is the move still being fed". Read it against acceleration_baseline and acceleration_lookback_used, which are user-configurable.
get_relative_volumevolume_state - The two volume numbers combined in code: elevated_and_building | elevated_but_cooling | quiet_but_picking_up | quiet_and_flat. Prefer this over composing them yourself. Both elevated_* states mean the name is in play; elevated_but_cooling is the normal reading on a SUSTAINED surge and is not a rejection.
get_relative_volumeacceleration_bars_rejected - Count of corrupt bars excluded from the baseline. Above 0, treat the reading as lower confidence.
get_relative_volumeacceleration_baseline - Whether volume_acceleration used a mean or a median, per the user's Signal Tuning setting.
get_relative_volumeacceleration_lookback_used - How many prior same-session bars the baseline actually covered.
get_relative_volumeClosed sets, enforced upstream. Guessing one is the most common cause of a condition that never matches.
minute, 5minute, 10minute, 30minute, hour, 4hour, day, weekrsi, macd, ema, sma, bollinger_bands, atr, vwap, obv, adx, cci, williams_r, momentum, roc, mfi, supertrend, keltner_channels, donchian_channels, pivot_pointselevated_and_building, elevated_but_cooling, quiet_but_picking_up, quiet_and_flatbuy, sellequity, optioncall, putNaming tools and fields explicitly is what separates a strategy that behaves predictably from one that drifts:
EXITS FIRST. Call get_option_positions before anything else.
Close when unrealized P/L <= -1% and held_minutes >= 3.
ENTRIES. Call get_relative_volume on each candidate.
Require volume_acceleration >= 1.4, and read volume_state
rather than combining the two numbers yourself.
Then RSI(14) on 5minute via get_equity_technical_indicators.
Every name in that example is on this page. If a name is not on this page, the agent has no way to act on it.
This page is generated directly from the tool definitions in the application, so it cannot describe a tool that does not exist or omit one that does.