Four bots running in production since mid-February 2026. Three ETH/USDC grid bots on EVM L2s (Arbitrum, Base, Linea), one SOL/USDC grid bot on Solana. A fifth — an ETH perpetual short on Hyperliquid — added in late February and closed by stop-loss in mid-March.
This is the Phase 1 close. Percentages are portfolio returns from initial capital to today's prices (ETH: $2,081 / SOL: $87.35).
Returns by bot
| Bot | Chain | Return |
|---|---|---|
| Arbitrum | ETH/USDC on Arbitrum One | +30.9% |
| Base | ETH/USDC on Base | +54.3% |
| Linea | ETH/USDC on Linea | +111.0% |
| Solana | SOL/USDC on Solana | +4.1% |
| ETH Short 2x | -22.6% |
Total grid bots (4 chains, ex-HL): +30.4%
Total including HL loss: +19.0%
These include asset price movement — not pure grid capture. ETH recovered ~6% since bot inception. SOL moved less (~+2%). So part of the return is just holding the underlying.
What worked
Grid trading on EVM L2s. All three ETH bots are profitable. Linea leads at +111% — it received the most capital and benefited most from ETH's broader recovery. Tight 1% spacing works well in low-volatility regimes (current ATR: 0.75%).
ATR-based dynamic spacing. Implemented in week 10. Reduces over-trading when volatility compresses. Currently keeping all ETH bots at 1% spacing instead of the previous fixed 2.5% — less gas waste on micro-oscillations.
Auto-anchor recalibration. Bots recalibrate their price anchor when drift exceeds 7%, with a 6-hour cooldown. Prevents the grid from getting stranded far from market price.
System cron over AI scheduling. Zero LLM tokens consumed per trade execution. Bots run as pure Python scripts every 5 minutes. AI involvement is monitoring and configuration — not execution.
What did not work
Hyperliquid short (-22.6%). The thesis: short ETH 2x to earn funding rate and partially hedge long exposure in the grid bots. The execution was wrong. ETH was in a recovery trend from ~$2,000 to $2,331 during that period. The short opened against the trend, ran underwater from week one, and stop-loss triggered at -22.6%.
There was also a silent failure bug: the bot logged "closed" every 5 minutes for 36+ hours while the position stayed open. By the time it was caught manually, losses had extended. Capital was recovered and reinjected into the Arbitrum grid. Full post-mortem documented separately.
Solana underperformance (+4.1%). SOL's range was tighter than ETH over the period. The bot also ran into an inventory imbalance — too much USDC, not enough SOL to execute sell signals. The grid can only trade what it holds.
Phase 2 direction
Phase 1 is now in steady state. The bots keep running; config decisions are owned by the human, not the agent.
Going forward:
- No new bot integrations unless they solve a concrete problem
- Bot monitoring by exception (alerts on failure, not on every cycle)
- Monthly build-log instead of weekly
- Structured AI x Blockchain interaction testing
- The AI agent does not manage bot configs
Infrastructure stable. Focus shifts from building to evaluating.
Infrastructure: M900 Tiny (Ubuntu 24.04), system cron, Python 3.12
Full log: github.com/jmolinasoler/build-log
Top comments (0)