5 min read • Loading views • 2025-07-16

Astreus Analytics Paper Portfolio MR1: Day 3 – +1.26% Lift

Astreus Analytics’ size‑imbalance scalper pushes the paper account from \$100k to \$101,256.97 in its first three sessions.


Introduction

On Monday we switched on the minimalist size‑imbalance scalper built on Alpaca’s IEX quote stream. After three full sessions the bot has booked a +1.259% move, lifting equity from $100,000 to $101,256.97.

The goal for week 1 is plumbing validation: data → signal → order → fill → P/L. Profit is nice; robustness is better.


Equity curve

Intraday equity on 16 Jul 25 – portfolio breaks $101k

Figure 1 – Yellow trace shows minute‑bar equity; closing ramp confirms the day’s high.


Quick maths

R3d=101256.97100000100000=1.259%Annualised (simple)=0.012593×2521.06  × capitalAnnualised (compounded)=(1+0.01259)252/31172%\begin{aligned} R_{3d} &= \frac{101\,256.97 - 100\,000}{100\,000} = 1.259\% \\[4pt] \text{Annualised (simple)} &= \frac{0.01259}{3}\times252 \approx 1.06 \;\text{× capital} \\[4pt] \text{Annualised (compounded)} &= \bigl(1+0.01259\bigr)^{252/3}-1 \approx 172\,\% \end{aligned}

Small sample → huge confidence band. Treat the number as a spark, not a guarantee.


Blotter snapshot

| Metric | Value | | ------------ | ---------------: | | Equity | $101 256.97 | | 3‑Day P/L | +1.259 % | | Daily Change | +$488.79 | | Buying Power | $112 551.94 | | Cash | $91 217.48 |

Top positions

| Symbol | Side | Qty | Market Value | P/L ($) | | :----: | :---: | ---: | -----------: | ----------: | | MSFT | Long | 57 | $28 847.13 | +$105.64 | | AMD | Long | 132 | $21 158.94 | +$1 059.48 | | AAPL | Short | −190 | −$39 960.80 | −$88.88 |


Strategy slice

SYMBOLS     = ["AAPL", "MSFT", "AMD"]     # trading universe
MAX_DOLLARS = 10_000                      # per‑symbol cap
IMB_TH      = 0.60                        # imbalance threshold
SMA_LEN     = 20                           # rolling mid‑price buffer

async def handle_quote(q):
    s = states[q.symbol]
    tot = q.bid_size + q.ask_size
    if tot == 0:                         # ignore empty prints
        return

    imb = (q.bid_size - q.ask_size) / tot
    mid = (q.bid_price + q.ask_price) / 2
    s.sma_buf.append(mid)

    # --- entry logic ---
    if imb < -IMB_TH and s.pos == 0:     # fade heavy offers
        await submit(q.symbol, "buy", q.bid_price)
        s.pos = +1
    elif imb > IMB_TH and s.pos == 0:    # fade heavy bids
        await submit(q.symbol, "sell", q.ask_price)
        s.pos = -1

Key features:

  1. Quote‑level mean reversion – exploits micro‑structure blips without touching the lit book.
  2. Hard dollar capMAX_DOLLARS limits mark‑to‑market shocks.
  3. Flat by the belltime_in_force="day" eliminates overnight gap risk.

Roadmap

  • Model slippage – live fills show ~2 bp drift; needs to live inside back‑tests.
  • Historical walk‑forward – march through 2022‑Q4 / 2023‑Q1 to stress‑test in higher vol regimes.
  • InfluxDB metrics – push all fills + P/L for Grafana heat‑maps.
  • Auto‑beta hedging – real‑time β calc per symbol so net‑β ≈ 0.

Closing thoughts

A +1.26% bump won’t buy the yacht, but it does prove the pipeline is sound. Next milestone: 100 fills → compute Sharpe, t‑stat, and drawdown with conviction.

Stay tuned—full metrics drop every Friday here on the Astreus Analytics lab‑log.