De MetaTrader 5 terminal besturen vanuit een Python script
Stel je voor: je MetaTrader 5 terminal draait, maar jij zit lekker achter je eigen Python-script te sleutelen. Je wilt niet elke keer handmatig klikken voor een trade of een alert instellen.
Je wilt gewoon code schrijven, logica bouwen en laten draaien. Dat kan.
Je kunt MT5 volledig besturen vanuit Python. Geen magie, gewoon een API die luistert naar commando’s. Handig voor algoritmische trading bots, backtesting of simpelweg automatiseren van repetitieve taken.
Wat is het en waarom zou je het doen?
MetaTrader 5 is een terminal voor traders. Standaard gebruik je de interface of MQL5-scripts.
Maar met de MetaTrader 5 Python package koppel je de terminal direct aan je Python-code.
Je kunt posities openen, sluiten, data ophalen, rekeningen uitlezen en alerts triggeren, allemaal vanuit je script. Waarom zou je dat doen? Omdat je dan je eigen risk management kunt programmeren, je eigen backtests kunt bouwen met echte of historische data, en je trading bots naadloos kunt integreren met brokers die MT5 ondersteunen.
Denk aan automatische position sizing, trailing stops op maat, of een dashboard dat je portefeuille realtime volgt. Het scheelt tijd, vermindert emotie en maakt je setup schaalbaarder. Je kunt meerdere accounts of symbolen tegelijk managen, zonder constant in de interface te klikken. En je kunt makkelijker debuggen, loggen en testen. Kortom: controle en flexibiliteit.
De kern: hoe werkt het?
De MetaTrader 5 Python package is een wrapper rond de MT5 terminal. Je installeert hem met pip, start MT5 op je computer, en verbindt je script via localhost.
De terminal luistert op een poort en voert commando’s uit die je script stuurt. Het voelt als een afstandsbediening voor je broker-account. Eerst installeer je de package: pip install MetaTrader5.
Daarna importeer je de module en initialiseer je de verbinding. Zorg dat MT5 draait en ingelogd is op je broker-account.
Je kunt meerdere accounts beheren door aparte terminals of configuraties te gebruiken. Je haalt data op met symbolen zoals EURUSD of DE30. Vraag bijvoorbeeld de laatste 1000 candles op de M5-graaf op.
Die data kun je direct in een DataFrame stoppen voor analyse. Je kunt ook rekeninginformatie ophalen: saldo, equity, margin en free margin. Handig voor risicomanagement.
Orders plaatsen doe je met order_send. Je geeft een symbool, volume, direction (buy/sell), stop loss en take profit mee.
Je kunt ook een ticketnummer gebruiken om bestaande posities te sluiten of aanpassen. De terminal geeft een resultaat terug met een code en bericht. Fouten kun je direct afvangen en loggen. Een voorbeeldje: open een long op EURUSD met 0.1 lot, stop loss op 50 pips en take profit op 100 pips.
De code stuurt een request, MT5 verwerkt het, en je krijgt een bevestiging. Wil je een trailing stop? Dan bouw je een lus die de stop loss periodiek bijwerkt op basis van de prijs.
Praktijkvoorbeeld: een simpele bot met risicomanagement
Stel je wilt een bot die op basis van een eenvoudige moving average crossover trades plaatst. Je haalt de data op, berekent de gemiddelden en bepaalt een signaal.
Je voegt risicomanagement toe door het volume dynamisch te berekenen op basis van je account equity en een vaste risicopercentage. Je kunt een voorbeeld bouwen als volgt: pak de laatste 200 candles op H1, bereken de 20 en 50 SMA. Als de 20 boven de 50 komt en je hebt geen longpositie, open dan een long.
Stel je risico in op 1% van je equity. Op EURUSD bij een stop van 40 pips en een rekening van €10.000, betekent dit volume: (€10.000 × 1%) / (40 × €10 per pip) = 0,25 lot.
Pas aan naar je broker-ticksize en -contractgrootte. Je script controleert elke minuut of er een nieuw signaal is. Als er al een positie loopt, doe je niets of je past de stop loss aan.
Je kunt ook een maximale drawdown instellen: als je equity onder de 5% drawdown zakt, sluit je alle posities en pauzeer je de bot. Dit soort logica bouw je eenvoudig met Python en de MT5 API.
Loggen is essentieel. Schrijf elke trade, elk signaal en elke fout weg naar een JSON- of CSV-bestand.
Zo kun je later je performance analyseren en je backtest verbeteren. Je kunt ook een live dashboard bouwen met Streamlit of Plotly, zodat je realtime ziet wat er gebeurt. Let op: de MT5 terminal draait lokaal. Als je computer uitgaat, stopt je bot.
Wil je 24/7 draaien? Zet de bot op een VPS bij je broker of een cloud-dienst.
Kies een VPS dichtbij je broker voor lage latency, bijvoorbeeld 10–20 ms. Kosten liggen vaak rond €10–€25 per maand.
Verschillende aanpakken: backtesting, live en hybrid
Je kunt op drie manieren werken: backtesten, live traden, of een hybride aanpak.
Backtesten met Python en MT5 data geeft je een realistisch beeld van spreads en slippage. Je kunt historische data ophalen en je strategie draaien op een DataFrame. Gebruik libraries zoals pandas en numpy voor snelle berekeningen. Voor een backtest bouw je een eenvoudige loop: voor elke candle bepaal je een signaal, bereken je volume op basis van risico, en simuleer je de uitvoer met de slippage en kosten van de broker met de beste Python-documentatie.
Bij een retail-broker op EURUSD kun je rekenen op 0,1–0,3 pips spread en €6–€7 commissie per lot roundtrip. Neem dit mee in je resultaten.
Live traden vraagt extra aandacht voor fouten en netwerk. MT5 kan tijdelijk onbereikbaar zijn.
Bouw herstellogica: probeer opnieuw te verbinden, beperk het aantal retries, en zet een timeout op je requests. Voorkom dat je dubbel uitvoert of oneindig blijft proberen. Een hybride aanpak combineert live data met een paper trading-account.
- Vast percentage per trade: bijvoorbeeld 1% risico op equity.
- Volatiliteit-gestuurd: volume lager bij hoge volatiliteit, hoger bij lage.
- Kelly-criterium: wiskundige formule voor optimale positie, maar pas op met overdrijven.
- Maximale drawdown: stoppen bij een vooraf bepaalde drawdown.
Je draait je bot op een demo-rekening om te valideren voordat je echt geld inzet. Je kunt ook een small live-account gebruiken, bijvoorbeeld €500–€1000, om de bot in de echte markt te testen met kleine volumes.
Er zijn verschillende modellen voor risicomanagement: Kies een model dat bij je broker, symbool en handelsstijl past. Voor snelle scalping op DE30 bijvoorbeeld kleinere volumes en strakkere stops, voor swingtraden op EURUSD kun je meer ruimte nemen.
Praktische tips voor soepele integratie
Begin klein. Test je script op een demo-account met een enkele trade.
Controleer of de order correct wordt geplaatst, of de stop loss en take profit kloppen, en of de logging werkt. Pas daarna schaal je op naar meerdere symbolen of strategieën.
Gebruik sterke foutafhandeling. MT5 geeft codes terug; log ze en reageer erop. Bij een error zoals ‘trade context busy’ kun je even wachten en opnieuw proberen. Zorg dat je bot nooit onbedoeld honderden orders stuurt.
Bouw een kill-switch: een commando dat alle open posities direct sluit. Beveilig je credentials.
Gebruik aparte accounts voor testen en live. Sla wachtwoorden op in environment variables of een password manager, niet in je code. Zorg dat je terminal beveiligd is en dat je VPS regelmatig updates krijgt.
Pas op met market events. Tijdens nieuws of extreem lage liquiditeit kunnen spreads oplopen en uitvoering minder betrouwbaar zijn.
Je bot moet hierop reageren: vermijd trades of vergroot de stop margins tijdelijk.
Test dit in je backtest door periodes van hoge volatiliteit mee te nemen. Denk aan performance. Als je meerdere symbolen tegelijk volgt, beperk het aantal API-aanroepen.
Haal data op in batches en cache resultaten. Gebruik Alpaca voor je Python trading, gebruik pandas voor snelle berekeningen en vermijd overbodige loops.
Zo blijft je bot responsief en stabiel. Sluit af met een controlelijst: MT5 draait, verbinding actief, logging aan, risico ingesteld, kill-switch paraat.
Met deze stappen en de MetaTrader 5 Python integratie bestuur je het platform soepel, bouw je robuuste trading bots en hou je grip op risicomanagement. Aan de slag en experimenteer, de terminal luistert naar jouw code.
