The VIX Signal Worker runs every 30 minutes during market hours. It collects multi-source market data, routes it through 6 specialist LLM agents, synthesizes a directional trade signal, and executes limit orders on Robinhood via UVXY as a VIX proxy.
Related pages:
Data Collection
│
├── VIX/VVIX/SKEW (yfinance)
├── Reddit Sentiment (reddit.duckdb)
├── News Headlines (LLM-classified)
├── Historical Backtest (regime stats)
├── Underwriter Flow (cached 5min)
└── Robinhood Portfolio + Greeks
│
▼
6 Specialist Agents (parallel)
│
├── Technical Agent
├── Sentiment Agent
├── Risk Agent
├── Quant Agent
├── Bull Agent
└── Bear Agent
│
▼
Trader Synthesis Agent
│
▼
Signal: BUY / SELL / HOLD + confidence + size
│
▼
Robinhood Execution (limit orders, UVXY)
│
▼
trade_journal.duckdb + #market-signals Slack
| Source | Provider | Refresh |
|---|---|---|
| VIX spot, VVIX, SKEW | yfinance |
Per run |
| Reddit sentiment (ticker mentions, VADER scores) | reddit.duckdb via reddit_flow module |
5min (poller) |
| News headlines | LLM-classified via vix_news_llm module |
Per run |
| Historical regime backtest stats | vix_enriched module |
Cached |
| Underwriter/dealer options flow | vix_options module |
Cached 5min |
| Robinhood portfolio state + Greeks | robin_stocks |
Per run |
Each agent receives the full data payload and returns a structured opinion with a directional bias and confidence score.
| Agent | Focus | Key Inputs |
|---|---|---|
| Technical | Price action, term structure, VIX futures curve | VIX/VVIX/SKEW levels, contango/backwardation |
| Sentiment | Social + news signal | Reddit VADER scores, ticker mentions, news LLM scores |
| Risk | Tail risk, regime identification | SKEW, VVIX, historical vol-of-vol |
| Quant | Statistical edge, mean reversion | Regime stats, backtest win rates, z-scores |
| Bull | Constructive case for vol selling | Low-risk narratives, complacency indicators |
| Bear | Constructive case for vol buying | Stress indicators, macro tail risks |
The Trader Synthesis Agent receives all 6 opinions and produces the final signal. It weights agent confidence, checks for consensus vs. disagreement, and applies position sizing rules.
Current production config as of April 2026:
| Parameter | Value |
|---|---|
| Model | Gemma 4 26B (llama3 alias) |
| Prompt version | v29_minimal |
| Win rate | 69.3% |
| Cumulative P&L (paper) | +$22,247 |
| Eval set | 5,475 signals |
Previous experiments: finance-domain models (Palmyra-fin) and deep reasoning models (DeepSeek-R1) were both anti-patterns for this task — they overfit to narrative and underperform on speed-accuracy tradeoff.
robin_stocksBUY / SELL / HOLD + confidence % + suggested position size# Simplified execution flow
signal = trader_synthesis(agent_opinions)
if signal.action in ("BUY", "SELL") and signal.confidence >= THRESHOLD:
place_limit_order(
symbol="UVXY",
side=signal.action,
quantity=signal.size,
limit_price=signal.entry_price,
)
Every signal run is logged to trade_journal.duckdb regardless of whether a trade is placed:
-- Key columns in trade_journal
signal_ts, vix_spot, vvix, skew,
action, confidence, size, entry_price,
agent_opinions (JSON), model, prompt_version,
trade_placed (bool), fill_price, pnl
The pipeline depends on stock_automation v0.2.0 (PyPI via Gitea). Key modules used:
| Module | Purpose |
|---|---|
vix_enriched |
VIX term structure, regime classification |
vix_options |
Dealer/underwriter flow, open interest |
vix_news_llm |
News headline fetching + LLM sentiment scoring |
reddit_flow |
Reddit sentiment context from reddit.duckdb |
Install: pip install stock-automation==0.2.0 --index-url https://gitea.k3s.internal.strommen.systems/api/packages/k3s-homelab/pypi/simple