Building in Public

Follow along as I build an AI-powered trading research system from scratch. Every pivot, every failure, every breakthrough โ€” documented in real time. Built by a human and his AI assistant, powered by OpenClaw.

๐Ÿ“ก Updated daily โ€” bookmark this page
March 26, 2026 (evening)

Evolution Meets the Real World

Until today, the Evolution Lab and the Calls page lived in two different worlds. The evolution engine had been breeding strategies for 90,000+ generations โ€” real genetic algorithms producing real winners. But the calls page? Still using a hardcoded MACD strategy from Day 2. The smartest part of the system was disconnected from the part people actually use.

Today I connected them.

Champion Selection

Built a champion picker that scans all 537 strategies โ€” 395 originals scraped from TradingView plus 142 bred by the evolution engine โ€” and finds the best performer for each asset. Not "best overall," but best for THAT specific market.

The results were eye-opening. Silver's champion is an evolved strategy (EVO_1133) with a 3.85 Sharpe ratio and +99.5% backtest return. It was literally bred by the evolution engine โ€” it didn't exist in the original library. Three of nine asset champion slots are held by evolved strategies. The computer is creating strategies better than the humans who published the originals.

The Pipeline

Now when you visit the calls page, every call tells you exactly which strategy made it and how it performed in backtesting. "Champion strategy EVO_1144 signals SELL for SOL-USD. Sharpe ratio: 2.52." No black boxes. No "trust me." Full attribution.

The daily pipeline: Evolution breeds strategies โ†’ Champion picker selects winners โ†’ Winners generate live calls โ†’ Page translates to plain English โ†’ Track record grades them. Fully autonomous.

Two Audiences, One Page

This raised a design question: who is this for? Traders want Sharpe ratios and generation numbers. Normal people want "should I buy Bitcoin?"

The answer: progressive disclosure. The surface is friendly โ€” BUY/SELL/WAIT with one-line reasoning. But click deeper and you get strategy IDs, backtest metrics, parent lineage, and per-asset performance tables. The quants can nerd out. Everyone else gets the signal.

Also unified the navigation across all six pages (it was a mess โ€” every page had different HTML) and rebuilt the homepage to focus on action: Today's Calls, Live Signals, Evolution Lab. Three doors in. Everything else is one click away.

๐Ÿ’ก What I Learned
  • The pipeline IS the product โ€” connecting evolution to calls to public page created something no individual component could
  • Progressive disclosure solves "technical vs accessible" โ€” don't dumb it down, layer it
  • Champion selection is trivially simple โ€” the hard part was evolution. Picking the winner is just sorting a JSON file. But it's what makes everything actionable.
  • Attribution builds trust โ€” "BUY Gold" is a claim. "Strategy with 3.05 Sharpe on 2 years of data" is evidence.
537
Strategies Evaluated
90K+
Generations
3/9
Champions Are Evolved
3.85
Best Sharpe (Silver)
March 26, 2026

From Research Tool to Public Product

The system has been generating trading calls since Day 2 โ€” entries, targets, stops, confidence levels. But they lived in a JSON file on my machine. Today I turned that into something anyone can use, not just traders.

Built autotrader.remotebb.com/calls/ โ€” a public page that takes the AI's analysis and translates it into plain English. "LONG BTC with MACD bullish crossover above 200-day SMA" becomes "BUY Bitcoin โ€” Multiple signs point to a rise." Your mom should be able to read it.

The Jargon Purge

Every piece of trading jargon had to die. I wrote a translation layer with ~40 string replacements that runs on every call before it hits the page. "MACD" โ†’ gone. "Bearish crossover" โ†’ gone. "SMA200" โ†’ "long-term average." "Don't try to catch the bottom" โ†’ "Don't buy just because the price looks low."

Three full passes through the codebase before zero jargon terms survived. The rule was simple: if your friend who doesn't trade wouldn't understand it, rewrite it.

Honest Numbers

The track record right now is 2 wins, 5 losses โ€” 29% win rate. I show that number in red, not green, with "(7 calls)" next to it. Early days, small sample. The system earns trust by being transparent about bad numbers, not by hiding them. If we can't be honest about a 29% win rate, why would anyone trust a 70% one later?

Each of the 9 tracked assets gets its own card: a big colored BUY/SELL/WAIT/STAY OUT/HOLD badge, a visual progress bar showing where price sits between target and exit, confidence dots, and a one-line explanation that expands into full details. Plus a "Market Mood" section with fear levels and trend direction โ€” context that helps people understand why the calls are what they are.

๐Ÿ’ก What I Learned
  • The gap between "working" and "usable" is massive โ€” the calls system worked on Day 2, making it accessible took a full dedicated session
  • Honesty builds more trust than performance โ€” showing a bad win rate in red is more credible than hiding it
  • Translation is a feature โ€” the AI doing the analysis doesn't need to speak English, but the page showing results does
5
Pages Live
40+
Jargon Replacements
0
Trading Terms Left
9
Assets Tracked
March 24, 2026

Polish and Scale

Today was about doing the unsexy work that makes everything feel professional. The Evolution Lab had earned its place โ€” it went from a section buried in the results page to a full standalone page at /evolution/. That might sound trivial, but it's a design philosophy I keep coming back to: build things as sections first, then graduate them to pages when they earn it.

The real work was in the connective tissue. I wired up proper navigation across all four pages โ€” Home, Live Feed, Evolution Lab, and How It Works โ€” with 16+ cross-reference links so readers can jump between related concepts without getting lost. When someone reads about a champion strategy in the Evolution Lab, they can click through to see it running live.

Mobile Was Broken (Of Course)

Found a nasty bug: interactive tooltips were getting clipped on mobile. The culprit? Parent containers with overflow: hidden silently eating any popup that tried to extend beyond its bounds. Classic CSS gotcha. Fixed it, and now champion strategy names are always visible on mobile โ€” no more "what strategy is this card even showing?" confusion.

I also polished the benchmark section to show exact price ranges and date ranges per asset. When someone sees a +1.94 Sharpe ratio on Bitcoin, they should be able to see exactly what price window that covers. Transparency isn't optional when you're publishing trading signals.

The system now runs a continuous evolution daemon โ€” strategies are breeding and competing 24/7 โ€” with 3-hour rebuild crons keeping the public site fresh. It's starting to feel like a real product instead of a weekend experiment.

๐Ÿ’ก What I Learned
  • Build sections first, graduate to pages when they earn it โ€” premature pages create maintenance burden with no audience
  • Cross-linking between pages is the difference between "a website" and "a product"
  • overflow: hidden is a tooltip assassin on mobile โ€” always check interactive elements in constrained containers
4
Pages Live
16+
Cross-Links
24/7
Evolution Running
3h
Rebuild Cycle
๐Ÿ“ Git commits from this session
d5a33c2 feat: Evolution Lab on its own page, benchmark dates, mobile fixes
4b9a246 fix: show champion strategy name prominently
March 23, 2026

Evolution Engine Goes Live

Today I built something that genuinely surprised me. I created a genetic algorithm that breeds trading strategies โ€” and it works far better than I expected.

The concept is borrowed from biology: take winning strategies, mutate their parameters randomly, backtest the offspring, keep the survivors, breed the top performers together, repeat. It's 440 lines of Python with 39 tests, all green on the first serious run. The code felt clean going in, which is usually a sign something interesting is about to happen.

First 15 Minutes

I hit run and watched. Within 15 minutes: 21 generations completed, 8 genuine improvements found (27.6% survival rate), and the best average Sharpe ratio jumped from 0.7302 to 0.8708. Strategies were evolving in front of me. The RSI Divergence strategy that scored +0.638 yesterday? Its mutated offspring was already beating it.

Then It Went Turbo

The first version worked, but each generation took minutes. That's fine for a demo, unacceptable for serious research. So my AI assistant and I rewrote the evolution engine for raw speed โ€” and hit an 872x speedup. Generations that previously took minutes now complete in fractions of a second. The research loop went from "run overnight" to "run while you make coffee."

The Evolution Lab Became the Star

Raw numbers are boring. I wanted people to understand what was evolving and why. So I built:

I also expanded the asset universe: added Gold, Silver, and Solana. Nine assets total. More diversity means the evolution engine has more environments to test against, which produces more robust strategies.

๐Ÿ’ก What I Learned
  • Genetic algorithms work shockingly well for parameter optimization โ€” nature figured this out billions of years ago
  • Speed changes everything: 872x faster isn't just "faster," it's a qualitatively different research capability
  • Presenting results well is as hard as getting the results โ€” family trees and playbooks took as long as the engine itself
  • More assets = more robust strategies (strategies that only work on one asset are overfitted noise)
280+
Generations
56
Survivors
~1,500
Backtests
872ร—
Speedup
9
Assets

Best per-asset Sharpe ratios: BTC +1.94 ยท ETH +2.48 ยท SPY +1.55 ยท QQQ +2.22 ยท AAPL +1.66 ยท TSLA +1.72

๐Ÿ“ Git commits from this session
e8fdc18 feat: Evolution Engine โ€” genetic strategy optimization
7cc67fd feat: turbo evolution engine (872x speedup)
dca2308 feat: per-asset champion system
5d99eb0 feat: expand to 9-asset universe โ€” Gold, Silver, Solana
March 22, 2026

The Great Translation Crisis

I almost shipped garbage today. And the worst part? I wouldn't have known.

I casually asked my AI assistant "are the translations working?" โ€” a simple sanity check. What I found was devastating: the #1 ranked strategy, showing a beautiful +2.612 Sharpe ratio, was completely fake.

What Went Wrong

When translating TradingView Pine Script strategies to Python, the AI translation prompt had a subtle bug. It added a blanket forward-fill to the signal data that effectively overrode all exit signals. Every strategy looked like it was saying "buy and hold forever" โ€” which, during a period when most assets went up, produced amazing-looking backtests. Every. Single. Score. Was. Inflated.

This is the nightmare scenario in quantitative finance: a pipeline bug that makes your backtest look better than reality. If I'd shipped live signals based on these numbers, people would have traded on fiction.

The Reckoning

I reset everything. All 410 strategies โ€” back to untested. Cleared every cached translation except 8 that I'd hand-verified line by line. Then I ran the full tournament again with the fixed prompt.

The result? Only 27 out of 410 strategies were genuinely positive. That's a 93% failure rate. The leaderboard went from "look at all these winners!" to a sobering reality check.

The Grind

AI-assisted translation was clearly unreliable for something this critical. So I did what any responsible builder would do: I sat down and translated every strategy natively. Reading the Pine Script, understanding the logic, writing Python from comprehension rather than pattern-matching.

337 strategies. Batch by batch. 104 done by end of day. It was tedious, honest work โ€” and the results were trustworthy.

Honest Survivors

After the cleanup, only 8 genuinely positive strategies remained:

  1. +0.638 RSI Divergence (2% stop-loss / 4% take-profit)
  2. +0.481 MACD vs Bollinger Bands
  3. +0.467 Mean Reversion (KrisWaters variant)
  4. +0.394 Zero-lag EMA Trend
  5. +0.343 FVG Donchian Channel

Plus 3 more marginal positives. Not glamorous. But real.

I also made a critical architectural decision: per-asset scoring. Averaging a strategy's performance across BTC, ETH, SPY, QQQ, AAPL, and TSLA was hiding the signal. A Bitcoin champion is not a Tesla champion. From now on, each asset gets its own leaderboard.

๐Ÿ’ก What I Learned
  • Trust but verify โ€” ALWAYS validate your pipeline end-to-end, especially when results look "too good"
  • An inflated backtest is worse than no backtest โ€” false confidence leads to real losses
  • Per-asset scoring beats one-size-fits-all โ€” markets have different personalities
  • When AI translation isn't reliable enough, go native โ€” hand-understanding beats pattern-matching
  • The most important commit is the one that deletes the lie
395
Strategies Translated
2,370
Individual Scores
27
Genuine Positives
93%
Failure Rate
๐Ÿ“ Git commits from this session
6ee1988 fix: remove broken forward-fill, reset all strategies for honest re-test
89c4395 feat: full honest re-run โ€” 410 strategies, 27 genuine positives
0be26df ALL 337 STRATEGIES TRANSLATED โ€” translation grind complete
a1b5260 feat: per-asset scoring โ€” 395 strategies ร— 6 assets = 2,370 scores
March 21, 2026

From Zero to Live Signals

It started with a YouTube video. Someone showed an automated TradingView setup โ€” indicators firing, alerts triggering, positions opening. I thought: I could build something better. Something that actually learns.

Famous last words, right? But here we are.

The First Pivot (Hour 2)

I started where everyone starts: Pine Script on TradingView. Wrote a basic EMA crossover, watched it draw lines on a chart. Looked great. Then I tried to iterate programmatically โ€” modify parameters, backtest, score, repeat โ€” and hit a wall. Pine Script lives inside TradingView's visual sandbox. You can't loop over it. You can't automate experiments. It's a visualization tool pretending to be a research platform.

So I pivoted to Python. Programmatic data beats visual signals every time.

The Second Pivot (Hour 4)

Tried to pull data from Binance. Got HTTP 451 โ€” geo-blocked. Lovely. Switched to yfinance: free, no API key, works everywhere. Sometimes the best tool is the one that actually works.

The Research Machine

With data flowing, I built what I'm calling the autoresearch loop โ€” inspired by Andrej Karpathy's approach to neural architecture search, but for trading strategies. The loop is simple: modify a strategy โ†’ backtest it โ†’ score it โ†’ keep or discard โ†’ repeat. Let the computer grind through thousands of variations while I focus on architecture.

Then I added fuel:

First Real Results

Ran 10 experiments. The baseline EMA crossover scored -2.192 Sharpe โ€” actively destructive. That's the floor to beat. The best experiment โ€” MACD + SMA200 with a macro overlay โ€” hit +0.349 Sharpe with 4 out of 6 assets profitable. Not amazing, but a real signal emerging from real data.

By end of day I had a live signal page, a "How It Works" transparency page, a command center dashboard, and a daily 6 AM cron job keeping everything fresh. From zero to live in one day. Twenty-two git commits.

๐Ÿ’ก What I Learned
  • Position persistence beats frequent trading โ€” fees and slippage kill returns faster than bad signals
  • Community wisdom has merit โ€” the most-liked TradingView strategy turned out to be our best scorer
  • Complexity kills โ€” more indicators โ‰  better returns. The simplest combinations often win.
  • Multiple free data sources > one paid source โ€” diversify your inputs like you diversify your portfolio
  • Ship something live on Day 1 โ€” it changes your relationship to the project entirely
6
Assets
46
Signals
254
Community Strategies
10
Experiments
22
Commits
๐Ÿ“ Git commits from this session
839d4c7 baseline: EMA crossover strategy (score: -2.192)
a882029 feat: strategy scout + 254 community strategies
d91819c feat: external signals layer โ€” 27 data series
4ada41c feat: public results page with auto-publish
bb5352b feat: command center dashboard โ€” the premium view
2257785 feat: How It Works page โ€” full transparency
85eea6a feat: live price ticker โ€” updates every 60s