Galle, LK--:--5/6 sites live

CryptoEdge: Explainable Market Signals Instead of a Black Box

Seven plain questions, 240 indicator readings, an order-flow lab and paper mode by default — plus the cleanest CI/CD pipeline in my portfolio.

20 Jul 20264 min read#FastAPI#Cloud Run#Market Data#Explainability

This is an engineering write-up of a software project, not financial advice. The app starts in paper-trading mode for a reason.

CryptoEdge began as two prototypes — binance/ for order execution and tradev1ml/ for ML-driven signals. A model whose output can't be explained is a bad fit for something that might press a buy button, so the combined app went the other way: every answer on the main pages is explicit, inspectable, weighted arithmetic over market data, and every component reports its own contribution.

It's a FastAPI + plain HTML/CSS/JS app for Binance spot trading: pick a coin, get one plain-language answer — BUY, BUY SMALL, WAIT or AVOID — with the numbers behind it.


Seven questions, one verdict

The home page reads every useful Binance data source for a coin and answers seven questions, each marked good ✓, bad ✗ or neutral –:

QuestionData behind it
Is the price going up?Candles on 15m, 1h, 4h and 1d
Is it a good price to buy now?1-hour candles (RSI, bottom score)
Are buyers or sellers stronger right now?Latest executed trades + order book
How busy is trading today?24-hour vs 7-day volume
What are other traders betting on?Futures funding, open interest, long/short ratios, taker volume
How is the whole market doing?Every USDT pair at once + Bitcoin + Fear & Greed
Have these signals worked on this coin lately?Backtest of the trend signal on 1-hour candles

The last question is the one I'm proudest of: the app checks whether its own signal has been right on this coin recently, and says so.

Depth when you want it

PageWhat it does
Executive /execOne decision from every page, from order flow over 30s → 4h
Dashboard /decide240 indicator readings across 8 timeframes, scalp check, simulations, backtests, news
Down points /microWhere price could dip to (EMAs, bands, book) and whether to wait
Order flow /flowlabCVD, whale trades, trade-size buckets, footprint, book walls
Buy now? /flowLive order-flow decision over a WebSocket, plus Binance Testnet
All data /allEvery value from every page, copyable as text or JSON

About 90 technical indicators, the daily Fear & Greed index, aggregated news sentiment, futures risk calculators and an LLM hand-off (Gemini, or copy-paste into any model) sit underneath. An optional ML lab lives under Advanced tools — no main-page answer depends on it.


Safety is a feature

  • Paper mode by default. Real orders need Live mode, your own API key, and typing LIVE to confirm.
  • Circuit breakers. Maximum drawdown limits per 24 hours act as a kill switch for flash crashes or exchange latency.
  • No keys needed to look. Market data, Fear & Greed and RSS news work with no API keys. Keys are only for Gemini analysis, balances and premium news.
  • Local by default. ./start.sh binds to 127.0.0.1 and picks a free port from 8001 so it never collides with another app.

Shipping it

CryptoEdge is the cleanest pipeline in my portfolio: GitHub Actions runs pytest and an import smoke test (from app.main import app + route count), authenticates to Google Cloud with Workload Identity Federation (no JSON key), builds and pushes to Artifact Registry, and deploys to Cloud Run. Secrets — session key, encryption key, admin password — come from Secret Manager at deploy time.

One unusual flag: --min-instances=1. The alert scheduler runs inside the web process every 300 seconds; scale-to-zero would silently stop alerts. A Cloud Build config does the same build with --cache-from the previous :latest image so dependency layers are reused. Both files are in How I Ship 23 Projects.

What I learned

Explainability isn't a UI layer you add later. It's a constraint on the model you choose. Weighted arithmetic I can print beat a classifier I couldn't.

See the CryptoEdge case study →