Een Moving Average Crossover bot bouwen in 10 minuten
Stel je voor: je tikt een paar regels code in, drukt op enter, en je bot handelt automatisch op basis van simpele bewegende gemiddelden. Geen uren grafieken staren, geen emoties. Gewoon een strategie die werkt terwijl jij koffie drinkt.
In 10 minuten bouwen we samen een Moving Average Crossover bot in Python.
We gebruiken een backtesting-omgeving en koppelen die later aan een broker via een API. Simpel, concreet en direct toepasbaar.
Wat is een Moving Average Crossover?
Een Moving Average (MA) is een gemiddelde prijs over een bepaalde periode. Een crossover gebeurt wanneer de kortere MA de langere MA kruist.
Kruist de korte MA omhoog langs de lange MA? Dan is het een bullish signaal.
Kruist de korte MA omlaag? Dan is het een bearish signaal. Je bot koopt of verkoopt op basis van die kruising.
Waarom is dit handig? Omdat het simpel is en universeel werkt op aandelen, crypto en forex.
Je kunt het snel testen met een backtest en je risico beheren met stops en position sizing. Denk aan een 50-period MA versus een 200-period MA. De 50 is sneller, de 200 is trager. De crossover geeft een duidelijk, objectief signaal zonder twijfel.
Een crossover is een trendvolgende trigger. Het is geen magie, maar een meetbare regel die je consistent kunt uitvoeren.
Waarom deze bot bouwen in 10 minuten?
Je wilt resultaat zonder complexiteit. Deze bot is een stevig fundament voor je trading stack.
Je leert hoe een strategie ontstaat, hoe je die test, en hoe je risico’s beheerst. In 10 minuten heb je een werkend script en een duidelijk pad naar live trading. Je bespaart tijd.
Geen uren handmatig analyseren. Je bot draait, logt elke trade en houdt je portfolio bij.
Je kunt varianten makkelijk vergelijken. Je ziet direct welke settings passen bij jouw broker, jouw instrumenten en jouw risicotolerantie. Denk aan concrete getallen: een account van €1.000, een stop van 2%, een positie die past bij je risico. Je bot rekent het voor je uit. Zo blijf je weg bij emoties en houd je focus op execution.
De kern: hoe de bot werkt
We bouwen een script dat een dataset inlaadt, twee MA’s berekent en trades plaatst bij een kruising.
We backtesten met historische data en bekijken resultaten zoals winst, drawdown en aantal trades. Later koppelen we de bot aan een broker via een API voor live trading.
- Laad data in (bijvoorbeeld 1-uur candles van de afgelopen 2 jaar).
- Bereken de 50 en 200 MA’s op de closing price.
- Check elke candle: kruist de 50 MA de 200 MA omhoog? Koop. Kruist de 50 MA de 200 MA omlaag? Verkoop.
- Voeg risicomanagement toe: stop loss, take profit, en position sizing.
- Log elke trade en bereken performance.
Stappen: Je kunt dit in 10 minuten typen en draaien. Gebruik Python met libraries als pandas, numpy en matplotlib. Voor backtesting kun je een simpel script schrijven of een lichtgewicht library gebruiken.
Python-code in 10 minuten
Het doel is begrip, niet complexiteit. Open een notebook of een los script.
We gaan voor een minimalistische versie. Je kunt later uitbreiden met een broker-API en extra functies. import pandas as pd import numpy as np import yfinance as yf # Data laden (1-uur candles, 2 jaar) ticker = "EURUSD=X" data = yf.download(ticker, period="2y", interval="1h") data = data[['Open', 'High', 'Low', 'Close']].copy() data['returns'] = data['Close'].pct_change() # MA’s berekenen data['MA50'] = data['Close'].rolling(window=50).mean() data['MA200'] = data['Close'].rolling(window=200).mean() # Signalen: 1 = koop, -1 = verkoop, 0 = niets data['signal'] = 0 data['position'] = 0 data.loc[data['MA50'] > data['MA200'], 'position'] = 1 data.loc[data['MA50'] < data['MA200'], 'position'] = -1 data['signal'] = data['position'].diff() # Simpele backtest in_trade = False entry_price = 0.0 stop_loss = 0.02 # 2% take_profit = 0.04 # 4% equity = 1000 equity_curve = [] for i in range(len(data)): price = data['Close'].iloc[i] sig = data['signal'].iloc[i] if not in_trade and sig == 1: in_trade = True entry_price = price equity_curve.append(equity) elif not in_trade and sig == -1: in_trade = True entry_price = price equity_curve.append(equity) elif in_trade: change = (price - entry_price) / entry_price if change <= -stop_loss or change >= take_profit or sig != 0: # Sluit trade equity *= (1 + change) in_trade = False entry_price = 0.0 equity_curve.append(equity) else: equity_curve.append(equity) data['equity'] = equity_curve data['drawdown'] = data['equity'] / data['equity'].cummax() - 1 print("Laatste equity:", round(data['equity'].iloc[-1], 2)) print("Max drawdown:", round(data['drawdown'].min() * 100, 2), "%")
Deze code is bewust simpel. Je ziet de logica: signalen ontstaan uit kruisingen, posities openen en sluiten op basis van stop loss en take profit.
Je equity curve en drawdown geven inzicht. Pas stop loss en take profit aan op basis van je instrument en tijdframe.
Bij crypto kun je bredere stops nemen, bij forex vaak smaller.
Varianten en modellen met prijsindicaties
Je kunt variëren met MA-lengtes. Een 20/50-crossover is sneller, meer trades.
Een 50/200-crossover is trager, minder trades, sterker signaal. Een 10/30-crossover reageert snel, maar geeft meer vals signalen. Kies wat past bij je broker, je instrument en je risico.
Prijsindicaties voor live trading: Je kunt de bot uitbreiden met een derde MA voor extra bevestiging.
- Forex (EUR/USD): stop loss 10–20 pips, take profit 20–40 pips op 1-uur. Position sizing: risico €10–€20 per trade bij een account van €1.000.
- Crypto (BTC/USD): stop loss 2–4%, take profit 4–8% op 1-uur. Position sizing: risico 1–2% van je equity per trade.
- Aandelen (bijv. ASML): stop loss 2–3%, take profit 4–6% op daggrafiek. Position sizing: risico 1% van je equity per trade.
Of integreer een Heikin Ashi filter om ruis te filteren en te voorkomen dat je in extreme overbought/oversold situaties instapt.
Je kunt ook een trailing stop-loss toevoegen om winst te beschermen. Zo blijft de basis hetzelfde, maar verfijn je de entry en exit.
Risicomanagement en broker-API
Risicomanagement is het hart van elke bot. Gebruik altijd een stop loss.
Zet een maximum drawdown in, bijvoorbeeld 10%. Stop de bot als je die grens raakt. Splits je capital over meerdere instrumenten.
Test op verschillende tijdframes. Log elke trade in een CSV voor analyse.
Sluit je bot aan op een broker via een API. Kies een broker met een stabiele API, lage transactiekosten en snelle executie. Voorbeelden: Interactive Brokers, Alpaca, of een crypto-exchange zoals Binance of Kraken.
Gebruik een API-key met beperkte rechten. Test eerst op een paper trading account.
- Open een rekening bij je broker en activeer API-toegang.
- Gebruik een library die bij je broker past (bijv. ib_insync voor IB, python-binance voor Binance).
- Verifieer order types: market, limit, stop loss. Test executie op een demo.
- Implementeer error handling: time-out, rate limits, herstel bij disconnect.
- Monitor live: equity, open posities, slippage, kosten.
Stappen voor live trading: Voorbeeld: je bot op EUR/USD met 1-uur candles, stop loss 15 pips, take profit 30 pips.
Bij een account van €1.000 riskeer je €10 per trade (1%). Je positie is dan ongeveer 0.1 lot (10.000 eenheden). Pas je positie aan op basis van hefboom en margin. Houd rekening met overnight fees bij forex en funding rates bij crypto.
Praktische tips om direct te starten
Begin klein. Gebruik een account van €500–€1.000 voor je eerste live run.
Test eerst op een demo. Draai je bot 2–4 weken op historical data en 1 week paper trading.
Kijk naar winst, drawdown en aantal trades. Pas je parameters aan zonder te overfit. Organiseer je workflow. Sla je data lokaal op in een map ‘data’.
Log trades in een map ‘logs’. Gebruik een env-file voor je API-keys.
Schrijf een simpele README met hoe je de bot start. Zo blijft het overzichtelijk en herhaalbaar. Wil je meer data-input? Een eenvoudige sentiment bot bouwen is een goede volgende stap. Checklijst voor de eerste 10 minuten:
Als je een fout ziet, fix hem meteen. Een verkeerde datafeed, een verkeerde MA-berekening, of een verkeerde order.
- Installeer Python, pandas, numpy, matplotlib, yfinance.
- Kopieer de code hierboven en draai de backtest.
- Wijzig de MA-lengtes en kijk hoe trades veranderen.
- Pas stop loss en take profit aan op je instrument.
- Plan je volgende stap: broker-API en paper trading.
Houd het simpel, maar nauwkeurig. Jouw bot is een machine die consistentie biedt.
Jij bent de bediener die slimme keuzes maakt.
