# Orus > Orus runs autonomous memecoin trading agents on Robinhood Chain (an Arbitrum Nitro L2, chain id 4663). A user defines a strategy — volume floors, dip depth, take profit, stop loss, holding time — and an agent scans the chain, buys the dip when every rule is met, and manages the position until a target, a stop or a time limit closes it. Everything the agents decide is published, refusals included. Orus lives at orusagent.xyz. `mickie` is the internal name and the database schema. This file is generated from the same table and constants as the documentation page, in the same build, so it cannot say something the page does not. ## What it is - An autonomous desk: strategies (rulebooks) and agents (one copy of a strategy, on a clock, in simulation or trading real ETH from the user's own wallet). - The desk's own agents run in the open at /live; users copy the desk's strategies or write their own, run them in simulation, then fund an embedded wallet and go live. - Every decision — every candidate looked at, every rejection with the measurement behind it, every entry and exit — is written to an event log the public desk reads. ## The chain - Robinhood Chain, an Arbitrum Nitro L2, chain id 4663, gas paid in ETH, ~100 ms blocks with first-come-first-served sequencing (no priority-fee auction). - Every price is in USD. USDG (0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168) is the dominant quote asset, not WETH; a "price in native" is meaningless across venues. - WETH (0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73) is the trading base: ETH is wrapped before a buy, and a sale returns WETH. Selling an ERC-20 needs an approval first. - Venues: Pons is the launchpad the desk trades; Uniswap, NOXA Fun and fomopad also exist. A strategy's venue list matches the venue key, its name or the launchpad, so "pons" admits a Pons token before and after graduation. - Volumes outside a handful of majors are an order of magnitude below Solana's; thresholds transposed from elsewhere return zero candidates. - Explorer: https://robinhoodchain.blockscout.com. ## The pipeline 1. **Scan** — The Orus screener narrows the chain to tokens above the strategy's volume, liquidity, market-cap and trade-count floors; the native coin and the two quote assets (WETH, USDG) are dropped. Each survivor gets one token-details read — price, market cap, launch date, pool, all-time high, holder concentration, bundler and sniper shares, launchpad state, security flags. Up to 200 candidates per run. 2. **Filter** — Every threshold is re-checked locally, including the ones the screener applied. Three checks are fixed: no pool, a honeypot, or a buy or sell tax above 10% is out. Then venue, bonding state, activity, holder concentration and the wash-trading floor. Missing data fails the check it is missing from — a token with no sniper figure fails a sniper ceiling — and the rejection carries a missing_* code; a threshold left unset asks nothing. 3. **Launch market cap** — The market cap one second after the token's first trade, with supply read from the token. Above the strategy's ceiling the token is excluded permanently: a launch at a high cap is usually sniped or bundled. Cached, so it costs one request per token, once. 4. **Radar** — Survivors are tracked across runs with their all-time high, the instant of that high, the current dip and the liquidity behind it. A token leaves the radar when it drops out of the scan, when its entry window expires, or on a launch-cap exclusion; it comes back when it reappears or, after an expired window, on a new all-time high. A blind scan (an outage, a rate limit) evicts nothing. 5. **Dip detection** — Five-minute candles, read only when the high moved. The analyser walks forward from the high to the first close below the threshold; that instant is the first dip, and with a window set it starts the clock. Depth, timing since the high and since launch, liquidity at entry and the high's market cap all have bounds. 6. **Signal** — One entry per dip regime: an agent's latest signal on a token blocks a new one only while it was raised at or after the high this dip is measured from; a held position blocks regardless. A pending signal expires on the strategy's window and on a ceiling of 60 minutes, and it is executed only while the dip still exists at execution time. 7. **Execution** — The guard rails first (stake above zero, the open-position cap, the rolling 24-hour spend cap). Then the token is quoted both ways — a buy of the strategy's size and the sale of what it returns — and rehearsed on-chain; no buy route, no sell route, or an immediate round trip losing more than 25% refuses the entry in every mode. The dip is measured once more on the price the buy quote implies, and the buy's own price impact is held under the strategy's cap: a dip the pool does not show, or an entry that would move the pool past the cap, retires the signal. The swap the quote built is the swap that is sent: ETH is wrapped, the router approved for the exact amount, the fill read from the transfer logs. The position row is written before the broadcast, and the entry records when it was decided, sent and included. 8. **Monitoring** — Every held position is re-marked each run; a quote more than 100× the entry is a bad print and the tick is skipped. Exits in order, first match wins: stop loss (confirmed by a second feed at 80% of the way to the stop), maximum hold (a clock, fires with or without a quote), take profit (for a real position, only if the router's fill delivers at least half of the promised gain and never less than the stake). A failed exit marks the position sell-failed and is retried up to 3 times; it never closes on paper what the wallet still holds. ## Strategy fields Every field of a strategy, with its type, its unit, its default and, for a user's strategy, its bounds: - name (string): What the strategy is called on your console and, for the house's, on the public desk. - description (string, optional): One line on what the strategy is for. Shown on the strategy card. - allowed_dexes (string[], optional) — default pons: Venue whitelist, e.g. pons, noxafun, uniswap-v3. Each entry is matched, case-insensitively and as a substring, against the venue key (uniswap-v4), the venue name (Uniswap) and the launchpad the token came from (pons-v2), so a launchpad name admits its graduated tokens on whichever DEX they now trade. Empty accepts any venue. - require_bonded (boolean, optional) — default unset: true admits graduated tokens only, false admits tokens still on their bonding curve only, unset admits both. - min_volume (number, $) — default 100,000 $ · ≥ 0: Minimum 24-hour volume in USD. A rolling 24 hours, not volume since launch. Passed to the screener and re-checked locally. - min_market_cap (number, $) — default 20,000 $ · ≥ 0: Minimum market cap in USD. Passed to the screener and re-checked locally. - max_launch_mcap (number, optional, $) — default 50,000 $ · ≥ 0: Ceiling on the market cap one second after the token's first trade. A launch at a high cap is usually sniped or bundled, and the dip pattern is unreliable on it; the exclusion is permanent. Supply is read from the token. Unset skips the check. - max_age_hours (number, hours) — default 168 hours · ≥ 0, ≤ 8760: Maximum token age, in hours since creation. A token with no creation date fails an age-bounded strategy. - min_age_hours (number, hours) — default 0.083 hours · ≥ 0, ≤ 8760: Minimum token age, in hours since creation. 0.083 is five minutes. - min_transactions_24h (int) — default 200 · ≥ 0: Minimum 24-hour trade count. Passed to the screener and re-checked locally. - min_volume_liquidity_ratio (number, optional) — default unset · ≥ 0: Floor on 24-hour volume divided by liquidity. High turnover on thin liquidity is a token being traded rather than parked. - max_volume_fees_ratio (number, optional) — default 2,000 · ≥ 1: Ceiling on 24-hour volume divided by the fees that volume paid. On an AMM the two are proportional — fees are a fixed share of every trade — so the ratio is one over the fee rate and sits near 220 on this chain whatever the token's size — measured as the median of 1,000 signalled tokens. That is the normal value, not a target: a ceiling belongs well above it, and at 2,000 it refuses about one token in twenty where 220 would refuse half. A far higher ratio is volume that reached no pool: wash trading, or an accounting that has lost track. Both figures are the same 24-hour window; dividing by the fees a pool has earned since launch would measure its age instead. A pool under three hours old can read high because the provider's fee counter lags its volume counter, and a token with no fee figure fails this check when it is set. - min_buys (int) — default 100 · ≥ 0: Minimum 24-hour buy count. - min_sells (int) — default 100 · ≥ 0: Minimum 24-hour sell count. A token that is only bought has nobody able to sell it. - min_total_fees (number, optional, $) — default unset · ≥ 0: Floor on the cumulative fees the pool has earned, in USD. A proxy for how much real trading the pool has seen. - max_bundled_buy_pct (number, %) — default 40 % · ≥ 0, ≤ 100: Ceiling on the share of supply held by bundler wallets — buys bundled into the launch transaction. - max_snipers_pct (number, optional, %) — default unset · ≥ 0, ≤ 100: Ceiling on the share of supply held by wallets that sniped the launch. A token with no sniper figure fails this check when it is set. - max_insiders_pct (number, optional, %) — default unset · ≥ 0, ≤ 100: Ceiling on the share of supply held by insider wallets. - max_dev_holdings_pct (number, optional, %) — default unset · ≥ 0, ≤ 100: Ceiling on the deployer's own holdings. - max_top10_holdings_pct (number, optional, %) — default unset · ≥ 0, ≤ 100: Ceiling on the top ten holders combined. - min_organic_volume_ratio (number, optional) — default unset · ≥ 0, ≤ 1: Floor on organic volume over reported volume, from 0 to 1 — the wash-trading floor. - min_holders (int, optional) — default unset · ≥ 0: Minimum holder count. A token with no holder figure fails this check when it is set. - dip_threshold_pct (number, %) — default 75 % · ≥ 1, ≤ 99: Minimum fall from the all-time high before an entry is considered. The analyser walks candles forward from the high to the first close below ATH × (1 − threshold/100); that instant is the first dip. - max_dip_pct (number, optional, %) — default unset · ≥ 1, ≤ 100: Ceiling on the dip at entry. A token down more than this from its high is treated as dead rather than dipped. Unset means no ceiling. - min_dip_timing_minutes (number, min) — default 5 min · ≥ 0: Floor on the time from the all-time high to the dip — the flash-crash guard. A dip that took ninety seconds is not a dip. - max_dip_timing_minutes (number, min) — default 600 min · ≥ 0: Ceiling on the time from the all-time high to the dip — the dead-token guard. 600 is ten hours. - min_dip_timing_launch_minutes (number, optional, min) — default unset · ≥ 0: Floor on the time from launch to the dip. - max_dip_timing_launch_minutes (number, optional, min) — default unset · ≥ 0: Ceiling on the time from launch to the dip. - max_first_dip_minutes (number, optional, min) — default 60 min · ≥ 1: How long the entry stays valid after the first crossing of the threshold. The crossing opens a window; past it the entry is written off, which is why a token can be rejected for being too late on a dip that is still deep. A pending signal expires on it too. This is the only bound on the AGE of a crossing — max_dip_timing_minutes bounds the ATH-to-crossing duration, which is a different quantity. Left empty the window never closes, and one all-time high keeps producing entries as the price falls away beneath it. - min_liquidity_at_dip (number, $) — default 5,000 $ · ≥ 0 · users: ≥ 1,000 $: Minimum USD liquidity in the pool at entry. Also passed to the screener as its liquidity floor. What decides whether you can get back out. - min_ath_market_cap (number, optional, $) — default unset · ≥ 0: Minimum market cap at the all-time high, in USD. A dip from a high that never meant anything is not a dip worth buying. - buy_amount_native (number, ETH) — default 0 ETH · ≥ 0 · users: ≤ 0.05 ETH: ETH to spend per entry. 0 means the strategy produces signals and never spends. The engine wraps it to WETH before the buy and keeps a gas reserve aside. - slippage_pct (number, %) — default 5 % · ≥ 0.1, ≤ 50 · users: ≤ 15 %: Slippage tolerance passed to the router, on both legs. - max_price_impact_pct (number, optional, %) — default 5 % · ≥ 0.1, ≤ 50 · users: ≤ 10 %: Ceiling on the price impact the router estimates for the entry itself. A buy whose own size would move the pool more than this is refused and its signal retired: the round trip would start from a hole no dip pays for. Unset disables the check. - max_open_positions (int, optional) — default unset · ≥ 1 · users: ≤ 25: Cap on positions held at once. Open, simulated-open and sell-failed positions all count, so a stuck exit occupies a slot rather than freeing one. Unset means no cap — the wallet becomes the limit. - max_daily_spend_native (number, optional, ETH) — default unset · ≥ 0: Cap on ETH committed to entries per rolling 24 hours, not per calendar day. Unset means no cap. - min_sell_multiplier (number, x) — default 2 x · ≥ 1.01, ≤ 100: Take profit at this multiple of the fill price. For a real position the router is asked what the exit would return first, and the sell proceeds only if it delivers at least half the promised gain and never less than the stake. - stop_loss_pct (number, optional, %) — default unset · ≥ 1, ≤ 99: Sell when the position is down this much from the fill — once a second price feed agrees the drawdown is real. Unset disables it. - stop_loss_max_hours (number, optional, hours) — default unset · ≥ 0.1, ≤ 720: Sell after holding this long, at whatever the market pays — quote or no quote. A clock, not a price, and the most common exit on the desk by a wide margin. Unset disables it. - website_regex (string, optional) — users: not available: A regular expression matched against the token's socials and description. Evaluated inside the cron, so it is reserved for the house: a pathological pattern would stall every agent's tick. - jev_entry_instructions (string, optional): Additional condition for Jev's Premium-only contextual entry review in simulation or live trading. Jev evaluates observed transactions and participant histories after the quantitative filters; missing evidence means waiting, never automatic approval. Enable Jev on the agent. - jev_exit_instructions (string, optional): Additional condition for Jev's Premium-only take-profit review in simulation or live trading. Jev may approve an exit or defer it for another observation; deferred exits are reviewed even below the original target. Stop loss, maximum hold and explicit manual exits remain outside Jev's veto. ## Limits the engine holds itself to - Round trip: an immediate buy-and-sell may lose at most 25% of the stake, or the token is refused as untradeable (no route, unsellable, round-trip loss). - Transfer tax: a buy or sell tax above 10% is refused outright. - Bad prints: a quote more than 100× the entry is ignored for the tick. - Stop loss: fires once a second price feed shows at least 80% of the way to the stop; proceeds if the second feed cannot answer. - Take profit: a real exit proceeds only if the router's fill delivers at least 50% of the promised gain, and never less than the stake. - Failed exits: retried up to 3 times; a position is never closed on paper while the wallet holds the tokens. - Pending signals: expire after 60 minutes at most, and are executed only while the dip still holds — on the screener's print and on the router's own price. - Price impact: an entry whose own size would move the pool past the strategy's max_price_impact_pct is refused and its signal retired. - Rehearsal: the exit is rehearsed on-chain before every entry; with the operator's rehearsal_fail_closed switch on, a real entry whose exit could not be rehearsed waits for the next cycle instead of proceeding. - Gas reserve: 0.0015 ETH is kept unwrapped so an exit can always pay for itself; going live needs the stake plus this margin. - Delegated wallets: Orus may wrap at most 0.05 ETH per transaction, approve only the listed routers for an exact amount, and call those routers — nothing else, on this chain only. - Performance fee: 3% of the realised profit of a winning real trade, net of gas; nothing on a losing one. - Accounts: 3 reports and 30 report-chat messages a day. Agents, strategies and the assistant are tiers, below. A user's strategy is bounded: min_liquidity_at_dip at least 1,000 $; buy_amount_native at most 0.05 ETH; slippage_pct at most 15 %; max_price_impact_pct at most 10 %; max_open_positions at most 25; website_regex is not available. - Cadence: not a setting. A user's agent runs at their tier's cadence — Free 60s, 1 agent, 1 strategy, Pro 30s, 3 agents, 10 strategies and the assistant on 1M $ORUS, Premium 10s, 20 agents, unlimited strategies and the assistant on 3M $ORUS — and never slower than every 60 seconds. The balance is read from the chain every few hours and the agent follows it up and down. The cron fires once a minute and ticks inside it at the fastest cadence running; an agent runs at each tick its own frequency has elapsed for. - AI reports: the agent report and the token report need Pro or above. ## What does not exist - No public trading API: strategies and agents are created in the console at /app, behind a sign-in. - No promise of returns: results on the desk are forward-tested and published as they come, losses included. - No other chain: agents trade Robinhood Chain only, and a delegated wallet's policy refuses anything else. ## Links - [Documentation](https://www.orusagent.xyz/docs): the reference, for people. - [Jev validation guide](https://www.orusagent.xyz/docs#what-is-jev): Premium entry and take-profit decisions, optional conditions, evidence and comparisons, in simulation or live trading. - [Partner scan API](https://www.orusagent.xyz/docs#partner-api): whitelist access through @Orus_agent on X; read-only token scans. - [Partner OpenAPI](https://www.orusagent.xyz/openapi/partner-v1.json): the v1 request and response contract. - [Partner guide for AI agents](https://www.orusagent.xyz/partner-api-agents.txt): auth, units, unknown data and integration rules. - [Full reference for machines](https://www.orusagent.xyz/llms-full.txt): this index plus every section of the documentation. - [The desk, live](https://www.orusagent.xyz/live): what the agents are doing right now, in real numbers. - [Leaderboard](https://www.orusagent.xyz/leaderboard): every wallet and strategy on Orus, ranked.