Wat te doen bij 'Insufficient Funds' errors in het midden van de nacht?
Een 'Insufficient Funds' error in het midden van de nacht voelt alsof je bot op een rots botst terwijl jij ligt te slapen.
Je Python-script draait, de markt beweegt, en opeens blokkeert je broker de order. Je wekt niet direct wakker, maar je wilt wel weten hoe je het morgen (of direct) oplost zonder je volledige strategie overhoop te halen.
Wat is een 'Insufficient Funds' error?
Een 'Insufficient Funds' error betekent dat je broker je order weigert omdat je niet genoeg saldo hebt. Dat saldo kan cash zijn of koopkracht via marge.
Bij algoritmische trading bots gaat het vaak om een mismatch tussen je ordergrootte en je beschikbare kapitaal. Je ziet deze error meestal via de API van je broker, bijvoorbeeld bij Interactive Brokers, Alpaca of een crypto-exchange als Binance. De bot probeert een positie in te nemen, maar de broker zegt: 'Niet genoeg geld'.
Dat kan overdag, maar juist 's nachts, als je niet kijkt, kan het flink oplopen.
Denk aan een Python-script dat met een hefboom van 5x werkt en een order van €10.000 plaatst. Je hebt €2.000 op je account, maar door een verkeerde margeberekening denkt de bot dat het kan. De broker blokkeert de order en je ontvangt de foutmelding.
Waarom dit belangrijk is (en waarom het 's nachts gebeurt)
Als je bot 's nachts een error krijgt, mis je kansen of loop je risico op verkeerde afwikkeling.
Een gemiste order kan een winstgevende entry kosten, vooral bij snelle markten zoals crypto of futures. Veel brokers passen margevereisten 's nachts aan. Voor aandelen kan de marge toenemen buiten openingstijden. Bij crypto blijven markten 24/7 open, maar liquiditeit kan dalen, waardoor grotere orders sneller tegen limieten aanlopen.
Een onopgeloste error kan leiden tot onvolledige posities of een cascade van fouten. Je bot probeert opnieuw, krijgt opnieuw een error, en verbruikt je API-limieten of betaalt onnodige transactiekosten.
Stel: je bot draait een mean-reversion strategie op S&P 500 futures via Interactive Brokers.
Je hebt €5.000 vrij en zet in op 2 contracten. Buiten handelstijden verhoogt IB de marge naar €3.000 per contract. Opeens is je benodigde marge €6.000 en blokkeert de broker je order.
Directe acties: wat je nú kunt doen
Check eerst je werkelijke koopkracht via de broker-API, niet alleen je cashsaldo.
Gebruik een endpoint als 'account' of 'margin' en print de waarden in je Python-logs. Zie je een verschil tussen 'available cash' en 'buying power'? Dat is vaak de oorzaak. Beperk je ordergrootte tijdelijk tot 50–70% van je available buying power.
Zo geef je margebuffer en voorkom je dat kleine schommelingen je order blokkeren. Pas dit aan in je risk management-module.
Log de error met context: timestamp, symbool, ordergrootte, koopkracht, en margevereisten. Stuur een alert naar je telefoon via een service als Telegram of Pushover.
Een simpel bericht als 'Funds error op BTCUSDT: €200 te weinig' helpt je snel schakelen. Als je live orders draait, zet je bot tijdelijk op 'paus' of schakel over naar een paper trading-modus. Zo voorkom je een reeks mislukte orders en houd je je API-limieten vrij voor echte kansen.
Oorzaken en oplossingen op maat
Verschillende oorzaken vereisen verschillende oplossingen. Hieronder vind je praktische stappen per scenario, specifiek voor algoritmische bots en brokers die je waarschijnlijk gebruikt. Voorkom fouten in je Python trading scripts door margeverhogingen na sluiting of bij futures tijdig op te vangen.
1. Margevereisten buiten handelstijden
Controleer het margebeleid van je broker en pas je bot aan: verminder positiegrootte of vermijd orders buiten piekmarge-uren.
Prijsindicatie: Interactive Brokers rekent soms 20–50% extra marge voor futures na sluiting. Een bot die €10.000 wil traden, kan opeens €12.000 nodig hebben.
2. Onjuiste berekening van beschikbaar kapitaal
Je Python-script berekent available funds verkeerd. Gebruik de broker-API om real-time buying power op te halen, niet een vaste schatting. Voor Alpaca: check de 'buying_power' veld.
Tip: voor een bot die €500 tot €2.000 per trade inzet, houd altijd een buffer van 20% aan.
3. Hefboom en positiegrootte
Zo voorkom je dat spread en fees je order blokkeren. Te grote posities voor je hefboom geven fouten. Stel: je hebt €1.000 en een hefboom van 10x, maar je bot probeert een positie van €15.000. De broker blokkeert omdat je marge ontoereikend is.
Los het op door je positie te limiteren tot hefboom × kapitaal minus buffer. Voor 10x en €1.000: max €8.000–€9.000 exposure, niet meer.
4. Valuta- of asset mismatch
Je bot handelt in USD, maar je account is in EUR. Koersverschillen en wisselkoersen veranderen je buying power.
Bij crypto-exchanges kunnen network fees ook meetellen. Zorg dat je bot rekening houdt met wisselkoersen en extra kosten. Voor Binance: houd rekening met 0,1% taker fee en eventuele netwerkkosten van €1–€5 bij opnames.
5. API-limieten en vertragingen
Sommige brokers blokkeren orders als je te vaak queryt. Je bot kan een 'Insufficient Funds' error krijgen omdat de API oude saldo-data toont. Los op door je polling-interval te verlagen en cache te gebruiken. Krijg je een JSONDecodeError bij broker API's? Voor IBKR via TWS API: gebruik een interval van 5–10 seconden en check 'accountSummary' voor real-time data.
Preventie: bouw een robuuste bot
Een goede bot voorkomt errors door vooraf te controleren. Voeg een pre-order check toe die je buying power vergelijkt met de ordergrootte plus fees.
Als het niet past, pas de order aan of sla over. Gebruik een risicomanagement-laag die per trade limieten stelt.
Bijvoorbeeld: max 2% van je account per trade, max hefboom 5x, en een buffer van 10% op je buying power. Test je bot met backtesting én paper trading voordat je live gaat. Gebruik Python-bibliotheken zoals Backtrader of Zipline om je strategie te simuleren. Zorg dat je backtests ook margeberekening meenemen.
Stel alerts in voor lage cash en hoge marge. Een simpel script dat je waarschuwt als je buying power onder €500 duikt, voorkomt nachtelijke verrassingen.
Log alles wat met je bot gebeurt: orders, errors, saldo, en marge. Gebruik een tool als Structlog of een JSON-log in Python. Zo kun je later analyseren waarom een error optrad en hoe je het oplost.
Praktische tips voor de nacht
- Zet een 'slaapstand' in je bot: beperk handel buiten 9:30–16:00 ET voor aandelen, of vermijd uren met lage liquiditeit bij crypto.
- Gebruik een apart account voor nachthandel met een kleiner kapitaal, bijvoorbeeld €1.000–€2.000, zodat errors minder impact hebben.
- Stel een noodstop in: als een error optreedt, pauzeer de bot en stuur een alert. Los het op voordat je weer live gaat.
- Check je broker-documentatie voor margebeleid. Bij Alpaca en Interactive Brokers vind je duidelijke uitleg over buying power en margevereisten.
- Onderhoud je code: update je API-clients, test regelmatig, en houd je dependencies bij. Een oude IBKR-API-versie kan verkeerde saldo-data geven.
Met deze aanpak houd je je bot stabiel, zelfs als je slaapt. Een 'Insufficient Funds' error is vervelend, maar als je weet hoe je de state herstelt na een crash, los je het snel op en blijf je focus houden op je strategie.
