A steady emerald growth path crossing calm and turbulent market regimes above a modular containerized decision system

Running on Alpaca paper

Income engineering,
not market guessing.

Stable Income Generator turns a technology conviction into bounded, auditable options decisions—backtested over 644 sessions, containerized by role, and operating against a real Alpaca paper account.

  • Paper only
  • Deterministic execution
  • Fail closed
Frozen backtest return+30.29%Jan 2024 – Aug 2026
Booked-equity drawdown−7.15%vs −22.84% QQQ
Sharpe / Sortino1.14 / 2.4464 completed cycles
Paper account P&LLoading…30-minute broker snapshot

Evidence, not theatre

Three proof layers.
Never blended.

A serious trading system should make it easy to see where every claim comes from. We separate historical research, deterministic system verification, and broker-reported paper behavior.

01 · BACKTEST

Frozen and reproducible

V13.5 was selected by a predeclared net-return rule from five QQQ wheel variants. The result is bound to immutable input and output hashes and independently reproduced byte for byte.

Inspect run manifest ↗
02 · AUTOMATION

Executing the lifecycle

The paper scheduler wakes every 60 seconds. A protected release pipeline publishes immutable Linux images from main and deploys to an always-on Vultr host only after approval, preflight, and arm verification.

Read the deployment runbook ↗
03 · PAPER ACCOUNT

Near-live broker evidence

Running since Tuesday, September 1, 2026. Cloudflare Durable Object alarms trigger broker snapshots every 30 minutes on weekdays, 9:00 AM–5:00 PM ET. Equity, P&L history, and filled V13.5 orders come from Alpaca paper—not a backtest.

Open paper account performance →

From merge to always-on runtime

Automatic publishing.
Controlled deployment.

Execution-relevant changes pass credential-free tests before a merge to main publishes an immutable Linux image. Deployment is queued automatically, then waits for operator approval and broker safety gates.

  1. 01 · VERIFYPull requestNative ARM tests and a Linux AMD64 image build run without paper credentials.
  2. 02 · PUBLISHGHCR digestA merge to main automatically publishes the exact commit with provenance and an SBOM.
  3. 03 · APPROVEProtected environmentThe main-only Vultr deployment waits for an operator review; deployments cannot overlap.
  4. 04 · GATEBroker preflightThe server verifies the paper account, newest state, configuration-bound arm, and exact image digest.
  5. 05 · RUNVultr containerOne hardened scheduler uses durable host state and continues while the laptop is offline.
Delivery authority stays narrow

GitHub exposes the protected forced-command deployment key and an ephemeral registry token only to an approved job. Alpaca paper credentials, the hash-chained journal, and the arm token stay on Vultr. During migration, the absent enable file makes delivery stage-only; after cutover, a model or configuration change cannot deploy through a stale arm.

From broker to browser

Fresh evidence.
A visible update path.

A persistent Cloudflare Durable Object alarm starts each scheduled refresh—no open browser or running laptop required. GitHub Actions reads the paper account, then publishes the latest evidence to this website.

  1. 01 · SCHEDULECloudflare alarmStored timer targets :00 and :30, Monday–Friday, 9 AM–5 PM Eastern.
  2. 02 · TRIGGERGitHub ActionsAuthenticated dispatch starts the Pages workflow. A GitHub schedule remains as fallback.
  3. 03 · READAlpaca paperRead-only account, daily P&L history, and the ten most recent system fills.
  4. 04 · PUBLISHGitHub PagesSanitized, timestamped JSON ships with the dashboard. API credentials stay private.
  5. 05 · DISPLAYYour dashboardThe browser checks the published snapshot every 60 seconds and shows its age.

Scheduled snapshots, not a tick-by-tick stream. Build and deployment time adds latency. Eastern daylight saving time is handled automatically; the weekday schedule does not exclude market holidays. Data over 90 minutes old is marked stale during the refresh window, or off hours outside it.

Refresh ≠ trading

The paper trading loop operates separately. This publishing pipeline reads results; it never starts trading, submits orders, or cancels them. Real-market paper evidence is observable performance—not a promise of future returns.

V13.5 benchmark study

A steadier path—not a beta race.

On the same frozen dates, SPY and QQQ earned more total return. V13.5’s case is different: premium income with a materially shallower booked-equity drawdown and a stronger downside-adjusted Sortino ratio.

Growth of $100,000 chart comparing V13.5 booked equity with SPY and QQQ price-only buy-and-hold benchmarks
Frozen Alpaca IEX sample · 644 sessions · Jan 29, 2024–Aug 24, 2026 Data, method & hashes ↓
Growth and risk metrics from a $100,000 starting value
SeriesEnding valueReturnCAGRSharpeSortinoMax drawdown
V13.5$130,285.80+30.29%+10.81%1.142.44−7.15%
SPY$156,629.13+56.63%+19.03%1.211.78−18.98%
QQQ$166,709.15+66.71%+21.94%1.051.55−22.84%
Downside lens3.2×

QQQ’s deepest price drawdown was 3.2 times V13.5’s booked-equity drawdown in this sample.

Income lens2.44

V13.5 delivered the strongest Sortino ratio—return earned per unit of downside variation.

Honest trade-off−36 pts

V13.5 trailed QQQ’s total return by 36.42 percentage points. Income stability, not maximum upside, is the product objective.

Bull and bear evidence

Adaptive by design.
Resilient in observed stress.

V13.5 changes strike distance using only information available before each decision. It remained positive over the full sample and absorbed the four largest observed QQQ drawdowns above 5% with materially smaller booked-equity moves.

Why we do not say “proven forever.” Downtrend-labeled sessions were negative for V13.5, and the research uses historical option-bar proxies without continuous mark-to-market. A credible income system reports that boundary.

Feb–Apr 2025QQQ −22.84%V13.5 −6.97%
Jul–Aug 2024QQQ −13.54%V13.5 +4.14%
Oct 2025–Mar 2026QQQ −12.20%V13.5 +0.14%
Jun–Jul 2026QQQ −11.33%V13.5 −1.87%

Inside V13.5

One wheel.
Two market postures.

We run QQQ because technology compounds human productivity—and because a liquid index gives the strategy a focused, repeatable operating surface. The expression stays conservative: fully cash-secured puts and share-covered calls only.

Prior close above prior 50-session SMA

Uptrend posture

1%OTM put3%OTM call

Collect more put premium near the rising market while leaving more upside room on covered calls.

Prior close at or below prior 50-session SMA

Defensive posture

3%OTM put1%OTM call

Move cash-secured puts farther away while bringing calls closer to monetize a more cautious regime.

UniverseQQQ only
Expiry7–14 DTE
Position1 contract
Take profit>15% credit
Daily stop2% drawdown

Determinism + intelligence

The model can stop a trade. It cannot invent one.

The platform’s pinned Gemini 3.6 Flash profile receives sanitized economic context and a semantic proposal. Its output is structurally limited to ALLOW_UNCHANGED or VETO. Missing context, model failure, timeout, or invalid output becomes NO_TRADE.

  1. 01
    Daily contextImmutable Alpaca market and news proxies, captured once
  2. 02
    Deterministic signalFrozen features and registered strategy logic
  3. 03
    Gemini 3.6 FlashSupport unchanged or veto—nothing executable
  4. 04
    Exact order planContract, quantity, limit and canonical hash
  5. 05
    Independent riskSnapshot-bound approval and execution preflight
  6. 06
    Paper executionIdempotent submission, reconciliation and audit
Current-paper boundary

The active V13.5 wheel canary is intentionally deterministic-only while its equity-assignment lifecycle remains separate from the general strategy API. The combined economic/LLM gate is implemented in the broader platform and fixture path; we do not attribute today’s paper P&L to Gemini.

Config-driven infrastructure

Ship the control plane, not a snowflake machine.

Each role has one job, one dependency set, and only the minimum network and secret access it needs. YAML selects strategy and risk behavior; canonical hashes invalidate stale approvals when configuration changes.

PublicAPIGET-only replay
DecideDecisionNo broker key
ReasonAgentNo order tools
ContextEconomicData-only key
ExecuteExecutionPaper key only
PersistPostgresOutbox + audit
configs/paper/v13_5_qqq.yaml
strategy:
  strategy_id: v13.5
  symbols: [QQQ]
  minimum_dte: 7
  maximum_dte: 14
  take_profit_fraction: 0.15

risk:
  max_contracts_per_symbol: 1
  maximum_daily_drawdown_fraction: 0.02
  allow_unmanaged_positions: false
Portable where it matters.

Local development is verified on native Apple Silicon ARM64, while the always-on Vultr production image is built and verified separately for native Linux AMD64. Moving the scheduler across those hosts is controlled packaging and operations work, not a strategy rewrite; the contracts, risk logic, broker adapter, hashes, and paper-only boundary remain the portable core.

Judge reproduction

Clone. Verify. Replay.

The default judge path needs no Alpaca or Gemini credentials and cannot place an order. It replays frozen inputs, exposes the read-only API, and proves the deterministic control flow.

1 · Get the exact release
git clone https://github.com/lipengyuan1994/alpaca-hackathon.git
cd alpaca-hackathon
git rev-parse HEAD
2 · Install and verify
uv sync --frozen
uv run pytest -q
3 · Replay both outcomes
uv run paper-decision-worker
uv run paper-decision-worker --approved
4 · Open the read-only API
docker compose -f infra/compose.yaml up --build api
curl http://127.0.0.1:8000/v1/status

Why Stable Income Generator

Most demos stop at an idea.
Ours closes the loop.

We built the automated system, froze and reproduced the strategy evidence, put V13.5 behind real risk controls, scheduled it against a fresh Alpaca paper account, and published the result—even where the benchmarks win.

  • 01 Backtested strategy
  • 02 Active paper automation
  • 03 Positive dated paper P&L
  • 04 Containerized control plane
  • 05 Constrained economic intelligence