Strategy reference

Everything a strategy
can actually call.

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.

Before you write anything

Choosing what to look at

get_candidate_symbols computed locally

Ask 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 only

List 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 only

List 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*

get_popular_watchlists Robinhood only

Discover 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 only

List 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 only

Execute 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*

search Robinhood only

Find a ticker symbol from a company name or partial name.

query*

Price & volume

get_equity_quotes Robinhood + Public

Get real-time quotes and prior close for one or more equity symbols.

symbols*

get_equity_historicals Robinhood + Public

Get 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

get_relative_volume computed locally

TWO 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

get_equity_technical_indicators Robinhood only

Compute 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

get_equity_price_book Robinhood only

Level 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*

Market context

get_indexes Robinhood only

List 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 only

Current 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*

get_index_historicals Robinhood only

OHLC 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

Context & fundamentals

get_equity_fundamentals Robinhood only

Today'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*

get_earnings_calendar Robinhood only

Get 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

get_earnings_results Robinhood only

Get 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*

get_equity_tradability Robinhood only

Check whether a symbol can be traded on this account, and whether fractional shares are supported.

symbols*

Options research

get_option_chains Robinhood + Public

Load 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*

get_option_instruments Robinhood + Public

Load 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

get_option_quotes Robinhood + Public

Get 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*

get_option_historicals Robinhood only

OHLC 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

Account state

get_option_positions Robinhood + Public

View currently open options positions on the account, including contract details, quantity, and cost basis.

No parameters.

get_option_orders Robinhood only

Past 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

get_realized_pnl Robinhood only

The 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

Proposing a trade

propose_trade Robinhood only

Propose 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*

Fields you can reference by name

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.

Accepted values

Closed sets, enforced upstream. Guessing one is the most common cause of a condition that never matches.

A worked example

Naming 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.