Auteur:
Witold Wozniak
Deze indicator is ontworpen om de periodiciteit van prijsveranderingen van financiële activa te meten.
De indicator slaat de huidige marktcycluswaarden op in zijn buffer, die om voor de hand liggende redenen nooit stabiel kunnen zijn. Deze indicator is bedoeld om samen met oscillatoren te worden gebruikt, zodat deze zich kan aanpassen aan de constant veranderende marktcycli en kan worden omgevormd tot adaptieve versies.
De indicator is geïnspireerd door het artikel van John Ehlers "Using The Fisher Transform", gepubliceerd in november 2002 in het "Technical Analysis Of Stock & Commodities" tijdschrift.

De CyclePeriod indicatorhandle moet op globaal niveau worden gedeclareerd, zodat de indicator in de code van een andere indicator (bijvoorbeeld in de RVI oscillator) kan worden gebruikt:
//---- declaratie van integer variabelen voor de indicatorhandles int CP_Handle;
Vervolgens moet de CyclePeriod indicatorhandle worden verkregen in het initialisatieblok van de RVI indicator:
//---- verkrijgen van de CyclePeriod indicatorhandle CP_Handle=iCustom(NULL,0,"CyclePeriod",Alpha); if(CP_Handle==INVALID_HANDLE) { Print("Het verkrijgen van de CyclePeriod indicatorhandle is mislukt"); return(1); }
Nu hebben we de nieuwe Alpha variabele, die het invoerparameter is van de gebruikte indicator en de periode-averaging ratio. Deze variabele moet worden omgevormd tot de invoerparameter van de ontwikkelde indicator.
//+----------------------------------------------+ //| Indicator invoerparameters | //+----------------------------------------------+ input double Alpha=0.07; // Indicator smoothingsratio
De vorige Length invoervariabele moet uit de lijst van invoerparameters worden verwijderd en omgevormd tot een lokale variabele binnen de OnCalculate() functie.
De grootte van de arrays die voor de indicator smoothing worden gebruikt, wordt vastgelegd door de waarde van de Length parameter:
//---- Geheugenverdeling voor de variabelen arrays ArrayResize(Count,Length); ArrayResize(Value1,Length); ArrayResize(Value2,Length);
De waarde van deze parameter verandert nu. Daarom is het beter om de grootte van deze arrays niet kleiner te maken dan de veronderstelde hoge waarde van deze variabele.
Bij het analyseren van de indicatorcharts kunnen we zien dat deze waarde niet boven de 100 uitkomt. Daarom zullen de groottes van de arrays dezelfde waarde hebben:
//---- Geheugenverdeling voor de variabelen arrays ArrayResize(Count,MAXPERIOD); ArrayResize(Value1,MAXPERIOD); ArrayResize(Value2,MAXPERIOD);
En verderop moeten de periodewaarden voor de huidige bar in het OnCalculate() blok worden gehaald uit de CyclePeriod custom indicatorbuffer, zodat ze in plaats van de waarde van de Length voormalige invoerparameter kunnen worden gebruikt.
//---- hoofdindicator berekenlus for(bar=first; bar<rates_total && !IsStopped(); bar++) { //---- kopieer nieuw verschenen gegevens naar de array if(CopyBuffer(CP_Handle,0,rates_total-1-bar,4,period)<=0) return(RESET); Length=int(MathFloor((4.0*period[0]+3.0*period[1]+2.0*period[2]+period[3])/20.0)); if(bar<Length) Length=bar; // snijd de smoothing terug tot het werkelijke aantal bars
In dit geval worden vier laatst waarden uit de CyclePeriod indicatorbuffer gehaald en hun lineair gewogen smoothing wordt uitgevoerd, waarna de verkregen waarde wordt gebruikt als de Length smoothing periode. En tot slot moet de regel aan het einde van de indicatorcode worden aangepast:
if(bar<rates_total-1) Recount_ArrayZeroPos(Count,MAXPERIOD);
Hierdoor hebben we de Adaptieve RVI oscillator ontvangen:

Gerelateerde berichten
- BykovTrend_HTF_Signal: Dé Indicator voor MetaTrader 5 voor Trendanalyse
- Open Range Breakout Indicator voor MetaTrader 5: Ontdek de Kracht van deze Tool
- Verbeter je Trading met de WeightOscillator_Alert Indicator voor MetaTrader 5
- ColorXdinMA_Alert: Een krachtige indicator voor MetaTrader 5
- Schaff Trend Cycle: Een Onmisbare Indicator voor MetaTrader 5