Home Systeemhandel Bericht

Zelfoptimaliserende RSI of MFI Trader - Expert voor MetaTrader 4

Bijlage
19392.zip (4.86 KB, Downloaden 2 keer)

Het is altijd een droom van me geweest om een robot te hebben die zichzelf optimaliseert. Zo weet je zeker dat hij altijd werkt met de beste waarden. Dit is mijn bescheiden poging om een stukje van mijn droom werkelijkheid te maken. De bijgevoegde expert advisor optimaliseert de overbought en oversold niveaus die hij gebruikt om trades te maken. Ik hoop dat anderen dit concept kunnen oppakken en er iets nog beters van kunnen maken. Laat het me weten als je dat doet! Vergeet ook niet om mijn robot een beoordeling te geven met de sterren hierboven. Deze strategie is toepasbaar op elk valutapaar en in elke tijdsframe, mits je de juiste instellingen gebruikt.

Er zijn een aantal invoerparameters voor deze robot. Ik heb extra functies toegevoegd die ik leuk vind om mee te experimenteren, veel plezier!

Invoerparameters

  • magic = 4376 - Uniek nummer voor deze EA.
  • optimizingPeriods = 144 - Optimalisatieperiodes (bars). Dit is het aantal bars waarop je de optimalisatie wilt laten draaien. Als je bijvoorbeeld een uurgrafiek gebruikt en kiest voor 144, dan kijkt de robot terug naar 144 uur, wat gelijkstaat aan zes dagen.
  • inAggressive = false - Maak de expert agressief? Risicovol. In de agressieve modus zal de expert advisor trades nemen op een meer agressieve manier. In plaats van te wachten op een kruising van het overbought of oversold niveau, neemt de robot een kooptrade als de kooporders recentelijk winstgevender zijn dan de verkooporders, en vice versa.
  • inTradeReverse = false - Omgekeerd handelen. Omgekeerd handelen zal de richting van je trades omdraaien.
  • inOneOrderAtATime = true - Slechts één order tegelijk open? Als waar, dan heeft de robot slechts één order tegelijk, als onwaar, opent hij onbeperkt aantal orders volgens de instapvoorwaarden.
  • Lot_sizing_dynamic_invalidates_static - Gewoon een scheiding om de lotgrootte mechanica van de andere invoerparameters te scheiden.
  • Lots = 0.01 - Statische lotgrootte van orders. Geef de lotgrootte voor je orders op met een statisch nummer.
  • inUseDynamicLotSize = true - Gebruik dynamische lotgrootte. Zet dynamische lotgrootte aan die in plaats van statische lotgrootte zal worden gebruikt. Als de dynamische lotgrootte ongeldig blijkt te zijn, zal de robot terugvallen op de statische lotgrootte.
  • inPercentageOfRisk = 2 - Percentage van het saldo dat je op elke trade wilt riskeren (2 = 2%). Bij het gebruik van dynamische lotgrootte geef je je lotgrootte op als percentage van je saldo. 2 is gelijk aan 2 procent. Geen nood om 0.02 in te voeren, als je het zo invoert, zou het percentage dat gebruikt wordt inderdaad heel klein zijn. Het maximale percentage dat kan worden gebruikt is 10 procent.
  • Index_Indicator_Values - Gewoon een scheiding om index indicatorparameters van andere invoerparameters te scheiden.
  • indicator index = _RSI_ - Kies welke indexindicator je wilt gebruiken. Je kunt kiezen welke indicator je wilt gebruiken, de huidige keuzes zijn de Relative Strength Index (RSI) of de Money Flow Index (MFI).
  • IndicatorTopValue = 100 - Bovenste waarde waarop je zou handelen. Dit is de hoogste waarde waarop je een trade zou plaatsen met je indicator. Laat het op 100 staan om alle index indicatorwaarden in overweging te nemen.
  • IndicatorBottomValue = 0 - Onderste waarde waarop je zou handelen. Dit is de laagste waarde waarop je een trade zou plaatsen met je indicator. Laat het op 0 staan om alle index indicatorwaarden in overweging te nemen.
  • IndyTimeframe = PERIOD_CURRENT - Tijdframe voor index. Kies welk tijdframe je wilt gebruiken voor de indicator tijdens optimalisatie en trading. PERIOD_CURRENT betekent simpelweg dat het het tijdframe van de grafiek gebruikt waaraan je de expert advisor bevestigt. Je zou theoretisch een tijdframe voor je berekeningen kunnen gebruiken dat verschilt van de grafiek waaraan je de robot bevestigt; hier kun je die instelling wijzigen.
  • inIndyPeriods = 14 - Gemiddelde periode voor index en ATR-berekeningen. De Average True Range (ATR) wordt gebruikt bij het instellen van een dynamische stop-loss of take-profit in verdere invoeropties hieronder.
  • IndyAppPrice = PRICE_CLOSE - Toegepaste prijs voor index indien nodig.
  • SL_TP_Dynamic_invalidates_static_values - Gewoon een scheiding om stop loss en take profit parameters van andere invoerparameters te scheiden.
  • iStoploss = 1000 - Statische stoplosswaarde in punten. Stop loss waarden zijn in punten, wat de kleinste eenheid van beweging in je terminal is.
  • iTakeprofit = 2000 - Statische takeprofitwaarde in punten. Take profit waarden zijn in punten, wat de kleinste eenheid van beweging in je terminal is.
  • input inDynamic = true - Gebruik dynamische stop loss & take profit op basis van ATR-meervoud? Als je de dynamische stop loss en take profit inschakelt, worden deze gebruikt in plaats van de statische stop loss of take profit. Dynamische instellingen kunnen aantrekkelijk zijn omdat ze zich kunnen aanpassen aan marktafspraken. Aangezien de ATR groter is wanneer er meer beweging is, zou het gebruik van dynamische instellingen resulteren in grotere stop losses en take profits wanneer de markt snel beweegt en dichter bij elkaar wanneer de markt is vertraagd.
  • inStoplossMultiple = 2 - Dynamische SL = X * ATR (Gemiddelde Periode). De stop loss zal de waarde zijn die je hier plaatst vermenigvuldigd met de Average True Range (ATR) met de periodes die zijn opgegeven in de inIndyPeriods - invoerinstelling.
  • inTakeProfitMultiple = 7 - Dynamische TP = X * ATR (Gemiddelde Periode). De take profit zal de waarde zijn die je hier plaatst vermenigvuldigd met de Average True Range (ATR) met de periodes die zijn opgegeven in de inIndyPeriods - invoerinstelling.
  • Break_Even_Settings - Padding moet lager zijn dan Trigger. Een scheiding voor Break even instellingen. Het werkt als volgt: wanneer punten in de winst boven het triggerbedrag komen, wordt de stop loss verplaatst naar break even. Als je een padding-instelling hebt, dan wordt de stop loss verplaatst naar break even + padding om het paddingbedrag van de winst vast te leggen.
  • bUseBreakEven = true - Gebruik Break Even (BE). Zet het gebruik van break even aan of uit.
  • inTrigger = 200 - Als BE = [waar] stel dan Punten in de winst in om te triggeren. Als de trade deze veel punten in de winst bereikt, wordt de stop loss verplaatst naar break even.
  • inPadding = 100 - Padding punten om toe te voegen aan BE moet lager zijn dan trigger. Dit is een aantal punten winst dat je wilt vastleggen bij het verplaatsen naar break even; dit bedrag moet lager zijn dan de trigger.

Hoe optimaliseert deze robot zichzelf? Hier is het geheim: de robot test elke variabele in de indexindicator twee keer. Dus als een indicator honderd mogelijke waarden heeft, neemt hij elke waarde en probeert hij een trade uit te voeren op die waarde door terug te kijken over een bepaald aantal bars (optimizingPeriods). Vervolgens beoordeelt hij die waarde op basis van hoeveel geld hij zou hebben gewonnen of verloren door te handelen op die waarde. Het is iets complexer dan dat, maar je leest dit om meer details te krijgen, dus hier zijn ze als volgt.

De uitgangspunten zijn dat wanneer een indicator de overbought waarde van bovenaf kruist, een verkooporder wordt uitgegeven, en een kooporder wordt uitgegeven wanneer een indicator van onder een oversold waarde naar boven een oversold waarde kruist. Bijvoorbeeld, als overbought is ingesteld op 80 en de waarde van je indicator was 85 op de bar voor de laatste en de waarde van de indicator op de laatste bar was 79, dan zou er een verkooporder worden uitgegeven. 85 → 79 kruist 80 naar beneden, verkooporder uitgegeven. Als oversold = 23, dan zou 19 → 27 omhoog een kooporder creëren.

Dus, deze robot neemt elke waarde voor de indicator van de IndicatorTopValue - en IndicatorBottomValue - en voert een test uit, twee tests om precies te zijn. Het voert een koop- en verkooptest uit op elke waarde. Bijvoorbeeld, als de bovenste waarde 100 is, neemt hij de bovenste waarde en backtest het op de optimizingPeriods, laten we zeggen dat dat 144 periodes is. Het zou dus kijken of kopen op 100 en verkopen op 100 winstgevend zou zijn geweest in de laatste 144 periodes. Als het winstgevend is, behoudt het dat dollarbedrag.

Gelet op het aantal periodes dat je aan het backtesten bent, kan het zijn dat hij meerdere keren heeft kunnen kopen tijdens de backtest. Als het de take profit bereikt voordat het de stop loss bereikt, zou het een winstgevend resultaat hebben, als het de stop loss eerder bereikt dan de take profit, heeft het een negatief resultaat. Na het testen van alle periodes in de optimizingPeriods - voegt het alle winstgevende resultaten samen met alle verliezen om een ​​monetair bedrag te behouden. Vervolgens gaat de indicator naar de volgende lagere indicatorwaarde en test deze op winstgevendheid.

Wanneer het alle waarden heeft getest, selecteert het de waarde met het hoogste monetaire bedrag en kiest deze als de optimale koopwaarde. Vervolgens voert het vergelijkbare controles uit voor de verkoopwaarde. Als dit is voltooid, vergelijkt het de beste koopwaarde met de beste verkoopwaarde en zoekt het naar een trade die de beste van de beste is. Stel dat na het uitvoeren van deze optimalisatie het bepaalt dat de beste koop zou zijn bij 65 omdat een koop bij 65 de meeste winst genereerde, laten we zeggen $329 in backtesting, dan zou het de waarde die het heeft voor de beste verkoop controleren, en als de beste verkoop 32 was met een winst van $530, zou de robot op zoek gaan naar een verkooptrade met de indicator die de 32-niveau kruist omdat verkopen beter is dan kopen volgens de gegenereerde winsten in de backtest.

Toekomstige Uitbreidingsideeën

  • Handelen in meerdere valutaparen tegelijk, mogelijk gefilterd op de spreads.
  • Zelflerend, waarbij het leert van zijn eigen trades wat het beste is.
  • Backtesting kan ook een forward testing-component bevatten.
  • Meer indicatoren om uit te kiezen.

Laat alstublieft je suggesties en opmerkingen achter, en vergeet niet om te beoordelen!

Nu beschikbaar in de MetaTrader-marktplaats: https://www.mql5.com/en/market/product/26332

Bijgewerkt met ontbrekende haakjes in regels 137-142 om de fout uit de opmerkingen op te lossen.

Gerelateerde berichten

Reactie (0)