A BTC/USDC grid bot you run yourself: desktop app, local Go engine, seven exchanges. No backend, no account. Your API keys stay in a config file on your disk. I have run it on my own money since December 2025: 2,954 closed cycles, +313.94 USDC net of fees.
Every grid bot I found was either a website that wanted my API keys or a subscription to a signal group. I wanted one that ran on my own machine and showed its arithmetic.
The arithmetic: it posts a limit buy below market. When that fills, the next update arms a sell above it. When the sell fills, the cycle closes and the spread is profit, after fees. It predicts nothing and follows no signals. Seven exchanges, one pair, BTC/USDC. Your keys stay in a file on your disk, there is no backend of mine in the middle, and the licence check goes straight to Stripe.
I ran it on my own money for eight months before telling anyone it works. Since 19 December 2025: 2,954 completed cycles, +313.94 USDC net of real exchange fees, on a 4,300 USDC base. That is 7.30% over the whole period and 0.99% over the last 30 days, and I do not annualize either one: a flat month pays close to nothing. 100% of completed cycles are profitable, and that number needs its catch attached: a cycle completes only when its sell fills above its buy, so a losing position stays open instead of being sold at a loss.
That open position is the risk. A grid earns from movement, not direction. When BTC falls out of the bottom of the range, the bot keeps buying down and runs out of sells to close. Cycles go quiet and you hold spot BTC you bought above market. There is no leverage, so nothing gets liquidated, but the money is stuck until price comes back. It will not save you from a bear market. I call that patience risk.
Nothing is code signed on any OS: SmartScreen on Windows, a blocked first launch on macOS until you allow it in System Settings. Auto-update runs on Windows and the AppImage only, macOS and .deb get a notification with a link. 5.99 a month, 90 day trial, no account needed to download.
For anyone who has run a grid through a real drawdown: what did you do with the open positions? Widen the range, add capital at the bottom, or wait? Eight months gave me one shape of market, and it is the call I have least data on.