Skip to main content

Astralchemist

Technical founder and full-stack engineer. Quant verification systems and local-first developer tooling. · @Astralchemist

Infrastructure that decideswhether a strategy is real.

Quant developer who builds trading verification and backtesting systems end to end, now extending the same discipline into local-first tooling for AI agents.

Now
Four fixes merged into ffn and credited in its v1.3.0 release notes, one into skfolio v1.4.1; quantstats and Databento fixed what I reported. PRs are open at Goldman Sachs, Microsoft Qlib, barter-rs, and Alpaca.
Next
A 90-day pre-registered paper-trading track, kill conditions committed on day 0.
Read
Plain one-page version, two minutes, no motion.

▶ Every signal replayed against real bars, then judged on stop discipline

Signly · FX Signals Pro
report · public link
Channel feedtelegram
  • FX Signals Pro05:30
    GOLD BUY @4326.6 SL 4299.3 TP1 4353.8 TP2 4390.0
  • FX Signals Pro11:05
    EURUSD SELL 1.0842 SL 1.0870 TP 1.0800
  • FX Signals Pro14:22
    GBPJPY BUY 191.20 SL 190.40 TP 192.60
  • FX Signals Pro15:10
    Close half GOLD, move SL to entry
Waiting for a signal
Monitors poll the channel on a schedule.

Risklimitsinatradingbotanda10%bufferinacreditmonitorarethesameinstinct.

One builder, two tracks. Read it in whichever order fits what you are evaluating.

Who I am, in two tracks

What I build

Local-first tooling

I ship local-first tools with hard guarantees and small surfaces.

Headline projects
RigCreditWatchStickyInc
Proof of rigour
Live-verification findings
Scoped release claims
CI on three platforms
Stack
TypeScript · Rust · Kotlin · MCP · Docker · SQLite · Keychain

Seven projects carry the evidence

Featured work

Each one states what it does, what was hard, what I would do differently, and where the proof is.

  1. 01SignlyForex signal verification
  2. 02Liquidity EngineBTC order-book research, pre-registered
  3. 03Trading Strategy LibraryPublic quant work
  4. 04Backtest APITrading infrastructure
  5. 05RigSemantic codebase graph over MCP
  6. 06CreditWatchCloud-credit runway from the menu bar
  7. 07StickyIncCommitment pane fed by MCP
01

Forex signal verification

Signly

Live

Verify Telegram trading signal channels before trusting them.

5
iterations
11 mo
to product
5
what-if exits
What it does
  • LLM extraction turns free-text signals into structured entries, stops, and targets.
  • Polygon OHLCV backtest replays each signal against real bars.
  • Five what-if take-profit strategies are scored side by side.
  • A verdict of GOOD, BAD, UGLY, or RISK_MANAGED is issued per channel.
  • Scheduled monitors and public shareable reports keep the verdict current.
What was hard
Parsing free-text signals reliably, and defining a verdict that penalises stop-loss indiscipline instead of rewarding win rate.
What I would do differently
Write the verdict definition first and the parser second. The first three iterations did it the other way round.
Fifth iteration in 11 months, after telegram_bot, fx-bot, fx-dash, and TGX-bot. The product was found, not guessed. Pre-revenue.

Python · FastAPI · Polygon · PostgreSQL

Signly · channel report
signlyanalytics.com
FX Signals Pro214 signals
GOLD BUY @2385 SL 2370 TP1 2400 TP2 2420
EURUSD SELL 1.0842 SL 1.0870 TP 1.0800
GBPJPY BUY 191.20 SL 190.40 TP 192.60
VerdictBAD
SL discipline 41%. Win rate 63% does not survive the stops.
TP1 only+2.1%
TP2+3.4%
Trailing+1.8%
Half at TP1+2.7%
Risk managed+4.9%
02

BTC order-book research, pre-registered

Liquidity Engine

Public · negative result

A deterministic Rust engine that records BTC perpetual order books on three venues, replays them exactly, and tested a market-making strategy that does not work at retail fees.

47–67%
variance from OFI
41–66
ticks drift at 1 s
3
venues, exact replay
What it does
  • Records public L2 depth and trades from Binance, Bybit, and OKX, and replays every session exactly.
  • Replicates Cont, Kukanov and Stoikov: order-flow imbalance explains 47–67% of short-interval price variance.
  • Partly replicates Farmer et al.: book flow, not order size, drives large moves.
  • Simulates passive fills in an L2 queue model under three cancellation assumptions, with retail fees and funding.
  • Ran a strategy test whose hypotheses were committed before the holdout was replayed. It failed, and the README leads with that.
What was hard
Measuring what a fill costs. Probes resting at the touch saw 41 to 66 ticks of adverse drift within one second on every venue, in every session, under every fill model.
What I would do differently
Run the fill study first. It found the adverse drift that sank the strategy, and it came in phase 9 of 10.
One lead remains: skipping a venue's stale side halves adverse selection. It is still negative at retail fees and would need its own pre-registered test.

Rust · WebSocket feeds · L2 queue model · Python figures

liquidity-recycling-engine
no order sent
$ cli fill-study sessions/A..D 1 200 50
drift at 1 s, ticks (share adverse)

     binance       bybit         okx
A  −55.8 (0.84)  −59.0 (0.64)  −45.4 (0.78)
B  −62.5 (0.71)  −66.0 (0.63)  −50.1 (0.78)
C  −55.3 (0.69)  −56.9 (0.69)  −53.6 (0.76)
D  −48.0 (0.80)  −51.8 (0.79)  −41.3 (0.71)

with the 173-tick maker fee: ≈ −280 ppm a fill
tag prereg-session-E
hypotheses committed
before the holdout ran

gated round trips
  ≈ −46 USDT/BTC
ungated, same exits
  ≈ −46 USDT/BTC

verdict  no edge
Binance · Bybit · OKXreplay · exactOFI · R² 0.47–0.67L2 queue · 3 cancel models
03

Public quant work

Trading Strategy Library

Open source

A strategy catalogue plus research tools, from indicator to execution to statistics.

4
strategy families
5%
max risk per trade
1:1
breakeven move
What it does
  • Quant-Algos: mean reversion, momentum, trend following, and stat arb, each folder self-contained with a backtest.
  • Expert-Advisor v0.5.1: Hill estimator regime detection, EVT, Hurst, Hawkes, and a St. Petersburg wealth simulation.
  • MQL5 Expert Advisor with 5% max risk, a daily loss halt, and breakeven at 1:1.
What was hard
Keeping research honest. The research suite is labelled research-only in its own README, and that label stays.
What I would do differently
Run every backtest in CI so the catalogue cannot rot quietly. That is the two-day cleanup on the readiness plan.

Python · MQL5 · NumPy · QuantConnect Lean

Trading Strategy Library
README.md
strategycategoryruns
mean_reversion/bollinger_rsimean reversionyes
momentum/breakout_atrmomentumyes
trend/sma_cross_filteredtrend followingyes
statarb/pairs_cointstat arbno
research/hill_regimeresearch onlyyes
Hill estimator · α = 2.31
04

Trading infrastructure

Backtest API

Private, described architecturally

Backtest as a service: the boring parts, built so the same strategy is never computed twice.

5×3
pairs × timeframes
60/min
rate limit
hash
cache key
What it does
  • REST API on FastAPI with TimescaleDB storage and a Redis cache keyed on the strategy hash.
  • API keys and per-key rate limits.
  • Five pairs, three timeframes, and three indicators.
What was hard
Cache keys that survive strategy edits. The same strategy is asked for a hundred ways, so the key is the strategy hash, not the request.
What I would do differently
Make the backtest service public from the first commit. Private repos prove nothing to anyone reading this.

Python · FastAPI · TimescaleDB · Redis · Docker

backtest-api
docker compose up
POST /v1/backtest
  pair: EURUSD  tf: 1h
  strategy: sma_cross(20, 50)
  from: 2025-01-01  to: 2025-06-30

200 OK  1.9 s
  cache: MISS  key: 9f3a1c…
  trades: 87  sharpe: 1.12
  max_dd: -4.8%  win: 54%
  rate: 60/min  remaining: 59
POST /v1/backtest
  strategy: sma_cross(slow=50, fast=20)
  tf: 60m  pair: eur/usd
  from: 2025-01-01  to: 2025-06-30

200 OK  41 ms
  cache: HIT  key: 9f3a1c…
  trades: 87  sharpe: 1.12
  max_dd: -4.8%  win: 54%
  rate: 60/min  remaining: 58
client · api keyFastAPI · rate limitRedis · strategy hashTimescaleDB · OHLCV
05

Semantic codebase graph over MCP

Rig

npm v0.1.5 · Show HN

npx rig-constellation gives a coding agent a map of the codebase instead of grep. Local-first, no key, nothing uploaded.

~100
commits, 4 days
6
index stages
3
agents wired
What it does
  • Six-stage index pipeline from source files to a typed graph.
  • MCP tool surface: search, callers and callees, impact, hubs, dependencies.
  • A live map assembles in the browser while indexing runs.
  • Auto-wiring for Claude Code, Cursor, and Codex.
  • Published to npm as rig-constellation and launched publicly as a Show HN.
What was hard
About 100 commits in four days to v0.1.5, stable per-project ports, and keeping the map live during indexing.
What I would do differently
Plan the 0.2 release before the launch push. A package with one burst of commits reads as abandoned, not finished.
No commits since 2026-05-26. Rig 0.2 is the third build on the readiness plan.

TypeScript · MCP · Node · SQLite

rig-constellation
localhost:4173
tools
searchmcp
callersmcp
calleesmcp
impactmcp
hubsmcp
depsmcp
1,284 nodes · 3,910 edges · 2.3 s
06

Cloud-credit runway from the menu bar

CreditWatch

1.0.0 released 2026-09-21

Answers one question: how long does the prepaid GPU credit last at the current burn.

10%
runway buffer
72 h
history kept
1.0.0
not 0.1.0
What it does
  • Kotlin and Compose Desktop across ten Gradle modules.
  • API keys held in Keychain; SQLite history pruned at 72 hours.
  • Safe runway carries a 10% buffer.
  • Alerts at 12h, 6h, and 1h refuse to arm below the current runway.
  • ntfy phone alerts paired by QR code.
What was hard
The account schema documented balance. A live account proved the spendable figure is credit. Windows and Linux were built and unit tested but not claimed, because no human had run the installed binary.
What I would do differently
Run against the live account on day one. The schema cost a week of trust in the wrong field.
Version 1.0.0, not 0.1.0, because the software works and is in use.

Kotlin · Compose Desktop · SQLite · Keychain

CreditWatchvast.ai · 4 min ago
Spendable credit
$41.20
Burn
$0.86 / h
Runway
47h 54m
Safe runway, 10% buffer
43h 08m
Alerts
12h6h1h
07

Commitment pane fed by MCP

StickyInc

v0.5.1 · v0.6 in review

Tell an LLM to call the dentist Friday, an MCP tool call fires, and a checkbox appears on screen. No backend, ever.

0
backends
4
agent CLIs detected
every
tag released
What it does
  • Tauri pane in TypeScript and Rust.
  • Zero-key auto-detect via claude -p, codex exec, gemini -p, and Ollama.
  • Releases cut from every tag.
What was hard
Detecting whichever agent CLI is installed without asking for a key or a config file.
What I would do differently
Record the 30-second demo before the release, not after. The GIF is the README.

TypeScript · Rust · Tauri · MCP

Commitmentsvia MCP
  • Call the dentistFri
  • Re-run Kalshi capture, durable storageMon
  • Write Rig 0.2 changelogToday
claude -p detected · no key · no backend

Also on the account

  • ZoetropeRust, deterministic HTML-to-video, pre-alpha
  • Cernosstrategy research in Rust, gauntlet tests and verdicts against the market's drift, pre-alpha
  • Trading-System-CIQuantConnect Lean in Docker with an Optuna rebate optimizer
  • Meridian, Ledgerlyclient and SaaS platforms, Docker-first Next.js and Postgres

Fixes in other people's libraries

Upstream

Bugs found by reference-value tests and benchmarks, reproduced with failing tests, and reported with a fix. 4 of 8 libraries have shipped the fix; the links go to the release notes or the thread.

  1. ffnThe ulcer performance index was not annualised, rounding residue counted as tracking error, short lookbacks missed month-end anchors, and 3y, 5y and 10y returns were reported without enough history.Merged, creditedFour PRs merged, credited by name in the v1.3.0 release notes.
  2. skfolioDrawdown measures ignored a loss on the first observation, so they disagreed with the optimizer.Merged, creditedPR merged the same day, listed in the v1.4.1 release notes.
  3. quantstatsThe probabilistic Sharpe ratio used the wrong kurtosis and could return a probability above 1.Fixed upstreamAll three bugs confirmed by the maintainer, fixed in v0.0.82.
  4. Databento dbnThe symbol map stored one entry per day per mapping, 1.73 GB at 20,000 instruments, and the test suite failed without a feature flag.Fixed upstreamBoth fixed by the maintainers, released in 0.71.0 and 0.72.0.
  5. gs-quantGoldman Sachs' toolkit: a correlation crash, Sortino computed over losing days only, Sharpe on two clocks, an RSI seed, and backtest P&L that counts the starting capital.OpenSix issues and five fix PRs open; the first was reproduced independently by another contributor.
  6. QlibMicrosoft's risk_analysis max drawdown ignored a loss in the first period, the same bug as skfolio's.OpenPR open.
  7. barter-rsThe tear sheet showed the loss rate as the win rate, and got profit factor and Sortino wrong.OpenPR open.
  8. Alpaca MCPGenerated trading tools carried no read-only or destructive hints, so a client could not tell a quote from an order.OpenPR open.

Findings from live verification

Scope the promise, not the code

CreditWatch 1.0.0 was built and unit tested on Windows and Linux. It claims macOS only, because no human had run the installed binary on the other two. The code shipped. The claim waited.

CreditWatch 1.0.0, 2026-09-21

CreditWatch 1.0.0 · release notes
platformbuiltunit testshuman ran itclaimed
macOS
Windows
Linux
Supported: macOS. Windows and Linux binaries ship unclaimed until a human watches one record a reading.

Attempts, in the order they happened

How it grew

Sorting work by what shipped hides the attempts that taught the most. This is every attempt, what it tried, what it taught, and what it turned into. The skills panel fills as you read.

TRADINGTOOLINGClient EAs2020MQL5 Expert Advisor2024 Q4Quant-Algos catalogue2025 Q1EA research suite2025 Q1telegram_bot2025 Q2fx-bot and fx-dash2025 Q3Backtest API2025 Q3TGX-bot2025 Q4Signly, live2026 Q1Kalshi orderflow2026 Q1Rig v0.1.52026 Q2StickyInc2026 Q2CreditWatch 1.0.02026 Q3Liquidity engine2026 Q4Paper-trading track2026 Q4
Skills picked up so far3 / 41
  • MQL5
  • MT5
  • Client delivery

attempt 01 of 15 · 2020

  1. 2020

    Client Expert Advisors, Upwork

    shipped

    MQL5 and MT5 bots built to client specifications on short contracts, alongside full-stack work.

    The client's risk rules are the real specification. The entry logic is only what they think they are paying for.

    The habit of writing the risk limits first.

    • MQL5
    • MT5
    • Client delivery
  2. 2024 Q4

    MQL5 Expert Advisor

    shipped

    A live Expert Advisor with 5% max risk, a daily loss halt, and breakeven at 1:1.

    The risk rules were the product. The entries were not.

    The risk vocabulary every later system reuses.

    • Position sizing
    • Risk halts
    • Breakeven rules
  3. 2025 Q1

    Quant-Algos catalogue

    shipped

    Four strategy families, mean reversion, momentum, trend following, and stat arb, each folder self-contained with a backtest.

    A catalogue rots unless every backtest runs on a schedule. One broken clone URL costs more credibility than a missing strategy.

    The Trading Strategy Library.

    • Backtesting
    • Python
    • pandas
  4. 2025 Q1

    Expert-Advisor v0.5.1 research suite

    research only

    Hill estimator regime detection, EVT, Hurst, Hawkes, and a St. Petersburg wealth simulation.

    Research that is not a strategy must say so in its own README. It does.

    • Power laws
    • EVT
    • Hurst and Hawkes
  5. 2025 Q2

    telegram_bot

    Read a signal channel and mirror its trades.

    The signals were the unreliable part, not the execution.

    fx-bot.

    • Telegram API
    • Signal parsing
  6. 2025 Q3

    fx-bot and fx-dash

    An execution bot, then a dashboard on top of it.

    Nobody wanted to run a bot. They wanted to know whether to trust the channel first.

    TGX-bot.

    • FastAPI
    • Dashboards

Grouped by what they were used for

Skills

Nothing appears here that a featured project does not demonstrate.

Trading and research
Backtesting enginesSignal extractionL2 order books, markouts, and adverse selectionPower laws and EVTMQL5, MT5, and Pine ScriptQuantConnect Lean
Data and backend
PythonFastAPIPostgreSQL and pgvectorTimescaleDBRedisRabbitMQ
Web and product
TypeScriptReactNext.jsTailwind CSSNode.jsSupabase
Tooling and desktop
Rust (Tauri, research engines)Kotlin (Compose Desktop)MCP serversnpm publishingSQLiteLinux and VPS ops
Delivery
Docker ComposeGitHub Actions CICross-platform credential storesRelease engineeringLatency and build-performance passesUpstream PRs to quant libraries
AI and GPU inference
vLLM on CUDA GPUs (Modal L4)PyTorch, Hugging Face Transformers, AccelerateKV-cache and GPU memory tuningLlama 3.1 8B fine-tuning and servingClaude, OpenRouter, Ollama fallbackTool-calling loops, embeddings, and RAG

The questions a reviewer asks

Common questions

Answered directly, including the ones with an awkward answer. Anything else, write to me.

  • No verified live track record. Verification systems are the product. A 90-day pre-registered paper track, with kill conditions committed on day 0 and logs written by script, is the first build on the readiness plan. It missed its 2026-10-06 start.

Ready to talk?

The code is public, the findings are dated, and the gaps are on the changelog with target dates. Email is the fastest way to reach me.