Inspiration
Every trading bot demo shows a rising equity curve. Almost none show what happened when it didn't work.
We started building a normal one — indicators, signals, a nice dashboard. Then we ran a scalping strategy properly and got a result that changed the whole project: 31 winning trades out of 31, and the account still lost 6.16%. Every single trade was profitable. Fees came to four times the gross profit.
We had built something that looked like it worked and lost money. That's when the goal changed from "make a bot that wins" to "make a bot that can tell you whether it wins."
What it does
Venture DAO is a trading agent that runs a full decision cycle over live markets — and usually decides not to trade.
- Live market data. Prices stream from Binance over WebSocket; equities and nine world indices come from public market APIs. Nothing on screen is a stale snapshot pretending to be live.
- A four-stage decision pipeline. Find a setup → challenge it → check hard risk limits → place it. Each stage can only make a position smaller, never larger, so doubling down after a loss is structurally impossible rather than discouraged.
- A trained model that reports its own failure. Logistic regression on ten scale-free features, walk-forward validated. It only gets a vote if it beats a majority-class baseline on data it never saw. It currently doesn't — so it appears in the UI as a visible zero-weight row explaining why.
- Gemini reads the news. It scores sentiment from live market headlines — deliberately not price prediction, because a language model has no access to a price series except as text.
- Sentiment on probation. We can't backtest news, so each directional read is recorded with the price at that moment and scored four hours later against what actually happened. It votes with weight zero until 30 scored readings clear a 55% hit rate.
- Real safety. Server-side order caps, a kill switch, and live trading that requires two separate environment switches — one alone silently falls back to testnet, so a typo can't move real money.
How we built it
Frontend — React 19, Vite, Tailwind, Recharts. Routes are lazy-loaded, and first-paint bundle came down from 238 KB to 124 KB gzipped.
Backend — Express and MongoDB, grouped by responsibility: identity,
storage, trading, market. Exchange keys are HMAC-signed server-side and
never reach the browser.
Testing — 324 tests. Several caught real bugs before they shipped.
Challenges we ran into
Costs, not signals, decide short-horizon trading. We measured 5,000 real 5-minute bars: the median move is 0.040% against a 0.30% round-trip cost. The cost is 7.5× the typical move. We tested all 16 markets in the app — not one is tradeable on a 5-minute hold. So we built a cost gate that finds the shortest horizon that does work per market, which ranges from 2 hours to "none within a day."
Our own cost model was wrong. The bot's risk gate counted fees but not slippage, understating a round trip by a third. Existing tests passed either way because they used extreme values — we added tests that pin the exact band the old model let through.
Positions showed $0.00 profit forever. Marks were only fed while one specific page was open. Viewed from anywhere else, every position reported zero no matter how far price moved.
A model that learns but doesn't transfer. In-sample lift +4.7pp, out-of-sample −10.2pp. The base rate itself drifts — 44.7% of training bars cleared costs versus 30.5% in the test window.
What we learned
Measuring honestly is harder than building. It's easy to produce a backtest that looks brilliant; it's work to make one you can trust. Walk-forward validation, cost-aware labels, and refusing to let a single future bar into a feature window are the difference between a real result and a fiction.
And the honest result is the useful one. Knowing this strategy has a profit factor of 0.94 is worth more than a demo that shows a line going up.
What's next for Venture DAO
Better features — order-book depth and funding rates. The constraint looks like information, not model capacity. Meanwhile the sentiment tracker keeps accumulating evidence, and if it earns its vote, it starts voting automatically.
Built With
- binance-api
- ccxt
- delta-exchange
- docker
- express.js
- gemini
- javascript
- layered-risk-gates
- machine-learning
- mongodb
- node.js
- react
- recharts
- render
- tailwindcss
- vercel
- vite
- vitest
- websockets