Welkom bij mijn blogpost over de NonLagMA indicator met ATR-banden en het bedieningselement voor MetaTrader 5! Hier bespreken we de belangrijkste kenmerken van het bedieningselement en hoe je het optimaal kunt gebruiken.
- Klik op "Trend Bar" om de indicator in of uit te schakelen.
- Sleep en plaats "Non-Lag-MA" om de informatieweergave opnieuw te positioneren.
- Als je op "Top Band" klikt, zie je de 'alfa' array en het gewicht van de nonLagMA. Dit is puur ter nieuwsgierigheid.
- Klik op een willekeurige plek in de grafiek om de waarden van de indicator op dat tijdstip weer te geven.

Een optie voor het definiëren van de indicatorbuffers (en plots) is om de gegevens van de code te scheiden en de gegevens voor elke buffer aan een enkele codeblok te voeren. Samen met de gegevensarrays wordt een enum gedefinieerd om toegang te krijgen tot de arrays met een menselijk leesbare index naar de juiste array-invoer.

Deze gegevens worden vervolgens geleverd door een for-lus die de arrays benadert en de gegevens aan de indexinstelfuncties geeft - waarvan er elke keer slechts één hoeft te worden ingevoerd:
- for(IndicatorBufferIdx idx=0; idx<k_end_indi_idx; idx++){ // verwerk elke buffer met behulp van de bufferindexenumeratie
Evenzo wordt een structuur gebruikt om een array van buffers te definiëren die kan worden benaderd met dezelfde "IndicatorBufferIdx" enum-waarden door het hele programma:
struct IndiStruct
{
double m_indi_buff[];
} indi_array[k_end_indi_idx]; // maak een indicatorbuffer voor het aantal gedefinieerde indicatorbuffers
zoals dit: indi_array[k_ATR_up_idx].m_indi_buff[shift];
Er zijn twee klassen gedefinieerd en gebruikt:
- class AlfaClass voert alle berekeningen uit voor de nonLagMA-waarden, met de alfa array-waarden en het gewicht die alleen worden berekend wanneer de constructor wordt uitgevoerd. Meerdere AlfaClass-instanties met verschillende periodes die aan de constructor worden doorgegeven, ondersteunen gemakkelijk een indicator met meerdere voortschrijdende gemiddelden die worden weergegeven.
- class InformationDisplayPanel implementeert alle functies die nodig zijn om het informatiescherm weer te geven, evenals de interacties van het informatiescherm met de OnChartEvent-verwerking. Het gebruikt ook een enumeratie om toegang te krijgen tot de gegevens voor de paneelobjecten met menselijk leesbare tekst in de code.

De OnChartEvent functie verwerkt drie verschillende gebeurtenissen:
- CHARTEVENT_CLICK om een tijd (grafiekbalk) te selecteren voor de weergave van indicatorgegevens.
- CHARTEVENT_OBJECT_CLICK om objectklikken te detecteren en het in- en uitschakelen van de indicator mogelijk te maken.
- CHARTEVENT_OBJECT_DRAG om het informatiescherm te verplaatsen.
OnCalculate omvat 6 functieaanroepen, waarvan er elke keer false retourneert als er een fout optreedt in de verwerking en de OnCalculate-functie beëindigt door het aantal balken dat eerder succesvol is verwerkt (de waarde in de statische integer last_prev_calculated) terug te geven:
- SetCalculateLimits stelt de oudste bar in die de indicator moet verwerken (starting_bar), evenals het aantal bars waarvan gegevens moeten worden opgehaald van de terminal (in to_copy). Ik heb de aanroep voor het instellen van de terminalgegevenshandelsfunctie (HandlesSet) verplaatst van de gebruikelijke OnInit-locatie naar binnen SetCalculateLimits bij de eerste uitvoering om automatische herhalingen te implementeren als er een fout zou optreden bij het verkrijgen van de handles.
- TerminalCalculationsAreComplete controleert of de terminal is gestopt met het berekenen van iMA en iATR-gegevens. Bij opstarten retourneert deze functie bijna altijd een fout, en de terminal voert automatisch OnCalculate opnieuw uit met succes bij de tweede poging. Controleer het tabblad Experts op de terminal voor indicatorfoutlogs zoals deze:
- "TerminalCalculationsAreComplete: Niet alle gegevens van de MA_handle zijn berekend (-1 balken berekend uit 66109). Fout: 4806, Gevraagde gegevens niet gevonden, 1 keer."
- PerformBufferCopies haalt terminalgegevens (voortschrijdend gemiddelde en atr) op voor de indicator om te gebruiken.
- het voortschrijdend gemiddelde van de terminal is een enkel balk voortschrijdend gemiddelde - het enige doel is om de ENUM_APPLIED_PRICE waarde voor elke bar te krijgen, PRICE_CLOSE standaard. Het werkelijke voortschrijdend gemiddelde wordt berekend door de indicator (standaard is 30 balken).
- RunTheIndicator voert de indicatorberekeningen en de daaropvolgende weergave uit. RunTheIndicator wordt ook aangeroepen vanuit de OnChartEvent-functie wanneer de indicator wordt uitgeschakeld en weer ingeschakeld om de indicator opnieuw weer te geven.
- ShowBarStatistics - tenslotte wordt het informatiescherm van de indicator weergegeven.
Ik heb een MQL4 'twin' van dit programma dat kan worden gebruikt om een zij-aan-zij vergelijking van de codeblokken en functies te maken, en dat ik graag aan iedereen wil aanbieden die nieuwsgierig is om het te zien.
Gerelateerde berichten
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Verbeter je Handelsstrategieën met de ColorXADX Indicator voor MetaTrader 5