Journal ·
Launch log: what broke in the first three days
Between 27 and 29 September the bot moved from a simulation to Binance's Demo Trading platform: the same exchange, order system and error messages as real trading, with simulated money. A backtest can't show you how an exchange actually behaves. These are the things that only turned up once real orders were involved.
1. A stop-loss needs a position first
The bot's self-test tried to place a stop order on an empty account. Binance refused: -4509: Time in Force (TIF) GTE can only be used with open positions. The bot itself only ever places stops on positions it holds, so trading was never affected, but the test was wrong. It now opens the smallest allowed position, protects it, checks the stop, and closes it again.
2. "Filled 0" when it had filled
By default Binance answers a market order with a short acknowledgement that reports zero filled, even when it filled completely. The bot's messages were undercounting trades. It now asks Binance for the full result on every order.
3. False warnings on every restart
Each time the bot started, it tried to set cross margin and 5× leverage, which were already set. Binance refuses settings changes while stop orders are open, so every restart sent three alarming but meaningless warnings. The bot now reads the current settings first and only changes, or warns about, what is actually wrong.
4. A suspended coin looked like a closed trade
The code that notices positions closed on the exchange (by a stop-loss, for instance) didn't count positions in coins the exchange had paused. A paused coin's position would have been reported as "closed". Found in testing, fixed before it happened for real.
5. Cheap orders that cost more
The biggest finding. Posting passive "maker" orders to save fees worked for entries but cost 9–22 basis points on every exit. The full story, with the numbers, is in our cheap orders were costing us money on every exit.
Where that leaves us
None of these lost real money; that's the point of running on demo first. The bot has a self-test that exercises every exchange call it depends on, and every fill is now logged with its slippage, so the next surprise should show up in the weekly report rather than in a copier's account.