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.
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 –:
| Question | Data 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
| Page | What it does |
|---|---|
Executive /exec | One decision from every page, from order flow over 30s → 4h |
Dashboard /decide | 240 indicator readings across 8 timeframes, scalp check, simulations, backtests, news |
Down points /micro | Where price could dip to (EMAs, bands, book) and whether to wait |
Order flow /flowlab | CVD, whale trades, trade-size buckets, footprint, book walls |
Buy now? /flow | Live order-flow decision over a WebSocket, plus Binance Testnet |
All data /all | Every 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
LIVEto 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.shbinds to127.0.0.1and 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.
Finished this one?
Progress is saved in this browser.

