Condition Scanner (cs)
Het idee achter deze codefragmenten is als volgt:
Je bedenkt een (set) van voorwaarden en schrijft code om deze te testen. Je plaatst je code binnen deze codefragmenten en maakt een paar eenvoudige aanpassingen.
Uiteindelijk krijg je een paar indicatoren. Eén indicator geeft historisch aan op de huidige grafiek waar je voorwaarden zich hebben voorgedaan. Een andere indicator toont in een paneel of de voorwaarden zich momenteel voordoen voor alle instrumenten en tijdframes waarin je geïnteresseerd bent. Dit bespaart je de tijd van handmatig zoeken naar je voorwaarden over verschillende paren en tijdframes.
Installatie:
Kopieer de inhoud van de vier mappen (Indicators, Include, Templates, Profiles) naar de overeenkomstige mappen van je installatie. Er is niets wat je kwaad kan doen - alleen indicatoren, enzovoorts.
Sluit het MetaQuotes-programma af en start het opnieuw op.
Wat de scanner kan doen:
Dit voorbeeld is gebaseerd op Power Pro (setup identifier = "PP"), dat veel besproken werd door Russ Horn. Het is een banddoorbraakstrategie waarbij de bovenste band een EMA van de toppen is en de onderste band een EMA van de bodems. Dit is geen goedkeuring van deze strategieën van mijn kant - het dient puur als voorbeeld van wat je kunt ontwikkelen.
Verander op jouw systeem naar profiel cspp. Dit kan enkele seconden duren voor de eerste weergave, maar daarna verbruikt het niet veel computerbronnen.
Je zou een scherm moeten zien dat lijkt op dit:
Het bovenstaande voorbeeld bestaat uit:
- Een indicator op de grafiek met 4 plots;
- Een indicator in een apart venster die de EMA van de RSI toont;
- Een indicator in een apart venster die aangeeft waar voorwaarden voor long of short trades zich historisch hebben voorgedaan;
- Een paneelindicator die toont waar dezelfde voorwaarden zich net hebben voorgedaan of momenteel plaatsvinden over een reeks paren en tijdframes.
Algemene code voor alle scans:
Utils.mqh bevat enkele hulpfuncties die in elke indicator, expert advisor, enz. kunnen worden gebruikt.
cs_Chart.mqh bevat bijna alle code voor de indicator op de huidige grafiek.
cs_Panel.mqh bevat bijna alle code voor de paneeldisplayindicator.
Code specifiek voor de PP (Power Pro) strategie:
csPP_0.mq4 toont de relevante "grafiekvenster" indicatoren.
csPP_1.mq4 toont de relevante "apart venster" indicatoren.
csPP_Chart.mq4 is de indicator die weergeeft wat er historisch op de huidige grafiek is gebeurd.
csPP_Panel.mq4 is de indicator die de huidige situatie toont voor alle paren en tijdframes waarin je geïnteresseerd bent.
csPP_GetBarFlag.mqh is de code die "ingevoegd" is in zowel de Chart- als de Panel-indicatoren. Dit is de code die beslist of er een voorwaarde van belang is op een bepaalde bar.
Code specifiek voor de MAX (moving average crossover) strategie:
csMAX_0.mq4 is een aangepaste indicator die twee voortschrijdende gemiddelden toont. Het is volledig zelfvoorzienend.
Er is geen equivalente csMAX_1 omdat, in tegenstelling tot PP, er geen apart venster nodig is.
csMAX_Chart.mq4, csMAX_Panel.mq4 en csMAX_GetBarFlag.mqh doen hetzelfde als voor de PP-strategie hierboven.
Hoe ik ga coderen voor een nieuwe voorwaarde:
Ik kies een strategie-identificator (bijvoorbeeld PB voor pinbars).
Ik zet mijn venster op zoals hierboven beschreven onder "Wat de scanner kan doen", en verwijder alle bestaande indicatoren.
Als mijn nieuwe scan afhankelijk is van indicatoren op de grafiek, bouw ik ze met behulp van csXXXX_0.mq4 als patroon. Ik zorg ervoor dat ik het opsla als csPB_0.mq4 en pas mijn aangepaste indicator toe op de linkergrafiek.
Als ik een aparte vensterindicator nodig heb, bouw ik die ook. Ik sla het op als csPB_1.mq4 en pas het toe op de linkergrafiek.
Ik bouw aangepaste indicatoren in plaats van standaardindicatoren, zodat ik er elders naar kan verwijzen met de iCustom-functie. Op deze manier, als ik mijn gedachten wijzig over de basisparameters van mijn strategie (bijv. methode van het voortschrijdend gemiddelde), hoef ik alleen mijn aangepaste indicatoren te wijzigen.
Ik pak csXXXX_Chart.mq4, vervang alle instanties van 'XXXX' door mijn strategie-identificator 'PB', en sla de code op als csPB_Chart.mq4. Het zal nog niet compileren omdat er nog wat "invoegen"-code geschreven moet worden.
Nu om de "invoegen"-code te geven. Als de voorwaarden waarvoor ik wil testen heel eenvoudig zijn, gebruik ik gewoon het "invoegen"-bestand csXXXX_GetBarFlag.mqh, programmeer wat ik wil, en sla het op als csPB_GetBarFlag.mqh. Maar als de codering lastig is, ga ik terug naar de csPB_Chart.mq4 die ik eerder heb gemaakt, commentarieer de regel die nu luidt "#include <csPB_GetBarFlag.mqh>" en bouw de code die ik wil rechtstreeks binnen het csPB_Chart.mq4-bestand. Wanneer het schoon is, verplaats ik de code voor het vinden van de voorwaarde naar het "invoegen"-bestand 'csPB_GetBarFlag.mqh' en uncomment de #include-instructie in het 'csPB_Chart.mq4-bestand.
Nu kan het 'csPB_Chart.mq4'-bestand gecompileerd en toegepast worden op de linkergrafiek.
Op dit punt sla ik de template voor de linkergrafiek op als csPB-CHART.tpl. Het bevat alle indicatoren op de grafiek, aparte vensterindicatoren en de plot van resultaten die van toepassing zijn op de huidige grafiek.
Ik laad het bestand 'csXXXX_Panel.mq4', vervang alle instanties van "XXXX" door "PB", en sla het op als "csPB_Panel.mq4". Dit laatste bestand wordt gecompileerd en toegepast op de rechtergrafiek. Het kan een beetje traag zijn om te draaien bij de eerste toepassing, maar verbruikt verder niet veel bronnen.
Ik sla csPB_panel.tpl op als een template voor de rechtergrafiek.
Meestal sla ik csPB op als een profiel.
LET OP: Bij het bouwen van aangepaste indicatoren en ze vervolgens met de iCustom-functie aanroepen, zorg ik ervoor dat de namen exact juist zijn. Je krijgt geen waarschuwing als iCustom naar een indicator verwijst die niet bestaat.
LET OP: Er kan een bug zijn waardoor de paneelindicator bij de eerste keer laden resultaten produceert die niet consistent zijn met die op de specifieke grafiek die wordt weergegeven. Ik merk dat als ik de tijdschaal op het paneelvenster verander (waardoor een herberekening wordt afgedwongen), alles goed komt. Ik zou dankbaar zijn als iemand me hierbij kan helpen.
LET OP: In de ...GetBarFlag.mqh-code die je zelf ontwikkelt, kun je elke integer retourneren naar het aanroepende programma om weer te geven. Zoals de code nu staat, betekent nul 'geen resultaat' en veroorzaakt het de weergave van een grijze wingding die aangeeft welke bar is getest. Het retourneren van een negatieve integer resulteert in een rode weergave, terwijl een positieve integer resulteert in een groene weergave.
Enkele aspecten van de software:
De code is geschreven als indicatoren, zodat wanneer een paneel wordt weergegeven en je naar een bepaald paar en tijdframe wilt kijken, je gewoon het paar uit het Market Watch-venster kiest, het op de huidige grafiek sleept en het tijdframe aanpast zoals nodig. De template zorgt voor de rest.
Om de computerbelasting te verminderen heb ik twee dingen gedaan.
Ten eerste, bij het omgaan met tijdreeksarrays, kijk ik meestal maar 200 bars terug.
Ten tweede test de paneeldisplayssoftware niet de voorwaarden van de gebruiker bij elke tick. Het gebruikt een timermechanisme, zodat testen alleen wordt toegepast op bar[0] als bar[0] voor 90% is gevormd, anders wordt getest op bar[1]. Als bar[1] de focus heeft (d.w.z. bar[0] is minder dan 90% gevormd), wordt deze slechts één keer getest en wordt een wisseling naar bar[0]-tijd berekend. Voor elke volgende tick die binnenkomt totdat de wisseltijd is bereikt, gebeurt er niets. Ik ben er niet 100% zeker van dat ik dit correct heb gecodeerd, maar het lijkt goed te werken.
Verder laat de bovenste regel van het paneel de datum en tijd zien waarop de meest recente voorwaarde-test is uitgevoerd. Ook in de voorbeelden die hier zijn geleverd, zullen de neutrale wingdings een nul tonen als bar[0] in focus is en een '1' als bar[1] in focus is.
Gerelateerde berichten
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- Correlatiecoëfficiënt: Een Onmisbare Indicator voor MetaTrader 5