Architecture
The system flow at a glance — seven modules, three Step Functions, a weekly parameter feedback loop. For per-module deep dives, see the per-repo READMEs at github.com/cipher813 .
Diagrams are interactive — drag to pan, use the +/−/reset controls in the corner to zoom.
System
Seven modules communicating exclusively through S3 — research, predictor, executor, backtester, evaluator, dashboard, and the data layer that feeds them. The evaluator grades the others' raw artifacts into a weekly report card; its Director agent proposes — humans approve.
flowchart LR
Data[Data<br/>prices · macro · features<br/>RAG corpus]
Research[Research<br/>6 sector teams + CIO + macro<br/>incl. LLM-as-judge]
Predictor[Predictor<br/>L1 momentum/vol GBMs + research calibrator<br/>+ L2 Ridge meta-learner]
Executor[Executor<br/>risk-gated sizing + intraday daemon]
Backtester[Backtester<br/>eval + parity + 4 config optimizers]
Evaluator[Evaluator<br/>7-tile report card<br/>+ Director · advisory, approval-gated]
Dashboard[Dashboard<br/>live + console]
Data --> Research
Data --> Predictor
Research --> Predictor
Research --> Executor
Predictor --> Executor
Executor --> Backtester
Backtester -.config auto-apply.-> Research
Backtester -.config auto-apply.-> Predictor
Backtester -.config auto-apply.-> Executor
Research --> Evaluator
Predictor --> Evaluator
Executor --> Evaluator
Backtester --> Evaluator
Data -.read-only.-> Dashboard
Research -.read-only.-> Dashboard
Predictor -.read-only.-> Dashboard
Executor -.read-only.-> Dashboard
Backtester -.read-only.-> Dashboard
Evaluator -.read-only.-> Dashboard Step Function pipelines
Three orchestrated pipelines run on a fixed cadence. EventBridge fires the weekly + weekday triggers; daemon shutdown after the trading day fires the EOD pipeline (single authoritative path).
alpha-engine-saturday-pipeline
EventBridge cron(0 9 ? * SAT *) — Sat 09:00 UTC (Sat 02:00 AM PT)
flowchart LR
Trigger((Sat<br/>09:00 UTC)) --> Pin
Pin[LibPinDriftCheck<br/><i>pre-spend gate</i>] --> P1
P1[MorningEnrich<br/>+ DataPhase1<br/>EC2 spot] --> RAG
RAG[RAGIngestion<br/>EC2 spot · ~25 min] --> R
RAG --> Train
R[Research<br/>EC2 spot<br/><i>incl. LLM-as-judge</i>] --> P2
P2[DataPhase2<br/>Lambda] --> Zoo
Train[PredictorTraining<br/>EC2 spot<br/><i>parallel branch</i>] --> Zoo
Zoo[ModelZooRotation<br/><i>champion/challenger</i>] --> Drift
Drift[DriftDetection<br/><i>SF vs CFN</i>] --> BT
BT[Backtester + Parity<br/>EC2 spot<br/><i>4 optimizers</i>] --> Eval
Eval[Evaluator chain<br/><i>per-signal eval · judge rubric<br/>· rolling mean</i>] --> RC
RC[ReportCard<br/><i>7 graded tiles</i>] --> Dir
Dir[Director<br/><i>advisory plan ·<br/>approval-gated PR</i>] --> Notify((Health checks<br/>+ SNS)) alpha-engine-weekday-pipeline
EventBridge cron(45 12 ? * MON-FRI *) — 5:45 AM PT
flowchart LR
Trigger((Mon–Fri<br/>5:45 AM PT)) --> DD
DD[DeployDriftCheck<br/><i>block on drift</i>] --> Start
Start[StartExecutorEC2<br/>+ wait-ready] --> CTD
CTD[CheckTradingDay<br/><i>halt on NYSE holidays</i>] --> ME
ME[MorningEnrich<br/>EC2 SSM<br/><i>daily OHLCV</i>] --> Inf
Inf[PredictorInference<br/>Lambda<br/><i>+ coverage check</i>] --> Plan
Plan[MorningPlanner<br/><i>places no orders</i>] --> Daemon((Executor Daemon<br/><i>sole order executor</i>)) The daemon runs through the trading day, executing urgent exits at open and timing entries via intraday triggers (pullback, VWAP, support, time-expiry). Daemon shutdown after close (~1:15 PM PT) triggers the EOD pipeline.
alpha-engine-eod-pipeline Triggered by daemon shutdown — single authoritative path, no redundant cron
flowchart LR
Trigger((Daemon shutdown<br/>~1:15 PM PT)) --> Post
Post[PostMarketData<br/>SSM on ae-trading<br/><i>EOD OHLCV → ArcticDB</i>] --> EOD
EOD[EODReconcile<br/>NAV · α · positions<br/>trades.db + EOD email] --> Stop((StopTradingInstance)) S3 data contracts
The wires between modules — every output is a named S3 path; every consumer reads on cold-start. Schema changes are additive only; path changes dual-write for at least a week to preserve consumers.
flowchart TB
subgraph Producers
D[Data]
R[Research]
P[Predictor]
E[Executor]
B[Backtester]
end
subgraph S3 ["s3://alpha-engine-research/"]
Sig["signals/{date}/signals.json"]
Pred["predictor/predictions/{date}.json"]
Trades["trades/eod_pnl.csv<br/>trades/trades_full.csv"]
Cfg["config/scoring_weights.json<br/>config/executor_params.json<br/>config/predictor_params.json<br/>config/research_params.json"]
Card["evaluator/{date}/report_card.json"]
Arc["ArcticDB universe library<br/>predictor/price_cache_slim/<br/>predictor/daily_closes/"]
end
Ev[Evaluator]
D --> Arc
R --> Sig
P --> Pred
E --> Trades
B --> Cfg
Ev --> Card
Sig --> P
Sig --> E
Pred --> E
Cfg --> R
Cfg --> P
Cfg --> E
Arc --> P
Arc --> B
Arc --> E Feedback loop
What turns a static system into a learning one. The backtester evaluates the system's own outputs each week, runs parameter sweeps, validates on holdout, and writes four optimized configs back to S3 — Research / Predictor / Executor read on cold-start. The mechanism that makes Phase 3 alpha tuning a configuration flip rather than a code change.
flowchart LR
System[Live system outputs<br/>signals · predictions<br/>fills · P&L]
Eval[Backtester evaluator<br/>weekly]
Sweep[Parameter sweeps<br/>random search × Sharpe<br/>holdout validation]
Cfg[4 optimized configs → S3<br/>scoring weights<br/>executor params<br/>predictor veto<br/>research params]
Read[Research / Predictor / Executor<br/>read on cold-start]
System --> Eval
Eval --> Sweep
Sweep -- holdout pass --> Cfg
Cfg --> Read
Read -.next week's behavior delta.-> System