Vandaag wil ik het hebben over een interessante aanpak die ik heb geprobeerd met behulp van k-nearest neighbors voor mijn tradingstrategieën in MetaTrader 4. Hoewel het resultaat niet helemaal naar wens was, denk ik dat het bespreken van deze methode waardevol kan zijn voor ons als traders.
De Euclidean_Metric functie fungeert als een classifier. Aan de hand van een vectorbasis die onze trades of marktsituaties beschrijft, kan deze functie bepalen of een nieuwe vector tot een bepaalde groep behoort. In dit voorbeeld is het eenvoudig: als een trade met winst sluit, wordt het geclassificeerd als klasse 1, bij verlies als klasse 0. De dichtstbijzijnde buren worden gezocht met behulp van de Euclidische afstand. Vervolgens wordt gekeken hoeveel van die k-vectoren tot klasse 1 behoren. Dit aantal wordt gedeeld door k om de kans te berekenen dat de nieuwe vector ook tot klasse 1 behoort. Vanwege slecht gekozen coördinaten is deze classificatie niet altijd betrouwbaar (bijvoorbeeld als het resultaat net boven of onder 0,5 ligt). Daarom heb ik een drempelwaarde ingevoerd: als de kans dat een trade winstgevend is hoger is dan 0,7, dan gaan we de markt in. De verhoudingen van de moving averages dienen als coördinaten voor de vectoren, met de gedachte dat deze statisch zijn. Na de classificatie kunnen we deze informatie gebruiken in de forward tests. Maar dat is niet zo eenvoudig :)
Waarom kiezen voor k-nearest neighbors? Omdat de eerste buur die we beschouwen soms een abnormale piek is, wat kan leiden tot een verkeerde classificatie, zonder rekening te houden met andere relevante vectoren die in de buurt zijn. Voor een gedetailleerde uitleg kun je kijken naar S. Haykin’s boek Neural Networks: A Comprehensive Foundation.
Uitdagingen van de Classificatie
- 1) Het vinden van static data die de marktsituaties nauwkeurig beschrijven met het vereiste niveau van correcte classificatie.
- 2) Het grote volume van wiskundige bewerkingen, waardoor de berekeningen enige tijd in beslag nemen (overigens iets minder dan PNN).
Kortom, de problemen zijn vergelijkbaar met die van traditionele trading systemen. Het voordeel van de classifier is dat deze de voorwaarden kan formaliseren die een trader misschien niet kan zien, maar wel intuïtief aanvoelt dat bepaalde indicatorwaarden invloed hebben op de beslissing om een trade te openen.
Implementatie van de Classifier
Hier zijn enkele belangrijke parameters:
- Base - true: schrijf een bestand met de vectorbasis, false: trade met classificatie.
- buy_threshold = 0.6: drempel voor alle Buy posities.
- sell_threshold = 0.6: idem voor Sell.
- inverse_position_open = true: als de kans op een winstgevende trade klein is, waarom dan niet met een omgekeerde positie de markt betreden?
- invers_buy_threshold = 0.3: drempel voor wanneer de kans op een winstgevende Buy positie kleiner is, open dan een Sell trade.
- fast = 12: parameters van de MACD.
- slow = 34.
- tp = 40: Take Profit.
- sl = 30: Stop Loss.
- close_orders = false: sluit alleen als er een winst is bij een tegenovergesteld signaal.
Gebruik: Zet eerst Base op true, stel sl = tp in en voer een test uit op de geschiedenis (1 keer!). Het vectorbestand wordt geschreven. De volgende keer stel je Base in op false en is het aan te raden om de drempels te optimaliseren op basis van het eerste rapport (zonder classificatie). Als de kans op succes = 0,5, dan zijn de drempels 0,6 en 0,4 (voor het omkeren van de positie).
Dit is een voorbeeld; de classifier kan op dezelfde manier worden toegepast op andere trading systemen met andere inputdata.
Voor en Na Classificatie

Na optimalisatie van de drempels.



Gerelateerde berichten
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- MQL5 Wizard: Handelsignalen Geïnspireerd Door Morning/Evening Stars + MFI voor MetaTrader 5
- MQL5 Wizard: Handelsignalen Geïnspireerd door Morning/Evening Stars en RSI voor MetaTrader 5
- Efficiënt Trendvolgend Handelsysteem met Exp_X2MA_JFatl voor MetaTrader 5
- Close Cross MA: Efficiënt Orders Sluiten met MetaTrader 4