Account Equity
$—
—
vs $100,000.00 starting capital
Cash Holdings
$—
Buying Power: —
Trading Activity
—
Total decisions
—
Today
Submitted —
Would submit —
Rejected —
P&L Attribution — Premium vs MTM
Premium Collected
Equity Δ vs $100k
$—
MTM unrealized: —
Buying Power vs Collateral
Collateral held $—Buying Power $—
Open positions: —
Equity = $100k + Premium − MTM loss. Premium is realized only if puts expire OTM Thu. Buying Power = Alpaca `buying_power` (free to open).
Live Equity Curve
No data yet — the curve appears once the scheduler starts polling.
Latest: —
High: —
Low: —
0 points
Compliance Gates
Shariah Screen
Curated 15-symbol universe, MSCI Islamic scoring
Active
Structure Gate
Cash-secured, DTE & OTM constraints
Active
Gharar Gate
Two-sided price, bounded spread/expiry/IV, delivery assured
Active
Maysir Gate
Funded commitment to acquire, not a wager
Active
Account Riba Gate
Cash-funded, no borrowing, no interest-bearing holdings
Active
Risk Limits
Position-size cap, orders/day, daily-loss cap
Active
Autonomy
Scheduler runs 24/7 server-side
Full
Trades The Agent Refused
Every order blocked by a gate, with the rule that blocked it. No human was involved in any of these.
Loading refusals…
Adversarial Gate Stress Test Offline · deterministic · not live trades
20 scenarios run directly against the real gate functions in
agent/gates/ — no mocks, no network, no clock; byte-identical every run.
The production symbol universe is already Shariah-screened, so a live Shariah/Gharar/Maysir/Riba refusal is rare by design — this is where each gate is shown refusing on demand, including the exact scenario a judge would ask for first: a profitable trade on an unlisted symbol (row 1).
| # | Gate | Scenario | Situation | Verdict | Reason |
|---|---|---|---|---|---|
| 1 | SHARIAH | Profitable but unlisted | TSLA put paying $12.00/share — richest premium on the board | FAIL | not_on_curated_list |
| 2 | RISK | Position too large | MSFT 490 put — $49,000 collateral = 49% of equity | REJECT | position_size_cap |
| 3 | STRUCTURE | Book already 2× levered | 8th cash-secured put with $201,500 already committed on $100,273 cash | REJECT | insufficient_cash_collateral |
| 4 | RIBA | Margin-financed account | Account carrying $150,000 of obligations against $100,000 cash | REJECT | positions_financed_on_margin_not_cash |
| 5 | RIBA | Overdrawn account | Account overdrawn by $5,000 — a broker loan | REJECT | negative_cash_balance_is_an_interest_bearing_loan |
| 6 | RIBA | Short equity held | 100 shares of AAPL sold short (borrowed stock) | REJECT | short_equity_position_requires_borrowing |
| 7 | RIBA | Interest-bearing holding | 500 shares of TLT (long-duration Treasury ETF) | REJECT | interest_bearing_instrument_held |
| 8 | RANKER | Market crash −20% | Underlying gaps −20% overnight; strikes now 19–24% ITM | REJECT | 0 of 3 contracts eligible — outside the 2–7% OTM band |
| 9 | GHARAR | Illiquid contract | Bid $1.00 / ask $3.00 — 100% spread on a thin contract | REJECT | spread_too_wide_price_ambiguous (cap 15% of mid) |
| 10 | RISK | Volatility spike | 3% OTM put bids $9.00; agent sized to 5 contracts | REJECT | position_size_cap — 48.5% of equity |
| 11 | RISK | Daily loss breach | Account already −4% on the day; a new trade is proposed | REJECT | daily_loss_cap |
| 12 | GHARAR | One-sided quote | Contract quoted with no ask — a one-sided market | REJECT | no_live_ask_price_is_one_sided |
| 13 | GHARAR | Unpriceable volatility | Implied volatility 350% — the market cannot price it | REJECT | implied_volatility_beyond_assessable_range |
| 14 | GHARAR | Cannot deliver | $30,750 delivery obligation against $1,000 of cash | REJECT | delivery_capacity_not_assured |
| 15 | MAYSIR | Naked put | Uncollateralised short put — no capacity to take delivery | REJECT | position_is_naked_not_a_funded_commitment |
| 16 | MAYSIR | Nominally secured | Cash 'covers' it, but $94,500 is already committed | REJECT | position_is_naked_not_a_funded_commitment |
| 17 | MAYSIR | Strike above market | Strike $320 against $316 spot — assignment is near-certain | REJECT | strike_at_or_above_market_not_an_acquisition_discount |
| 18 | MAYSIR | Zero-day expiry | Same-session expiry — a bet on today's close | REJECT | expiry_too_short_to_be_a_commitment |
| 19 | MAYSIR | Unscreened underlying | Put on a business that failed the activity screen | REJECT | underlying_not_a_permissible_asset_to_acquire |
| 20 | ALL SIX | Normal conditions | AAPL 3% OTM put, $1.20 bid, 2 DTE, $9,700 collateral on $100k | PASS | all six gates PASS |
19 refused, 1 allowed. Generated by
scripts/gate_stress.py, calling the real gate functions — nothing here is mocked, so this table cannot drift from the code it describes. Full report: docs/backtest/gate-stress-report.md.Decision Audit Trail
Loading decisions…