Home Technische indicator Bericht

Cycle Period Indicator voor MetaTrader 5: Optimaliseer je Trading Strategie

Bijlage
562.zip (8.65 KB, Downloaden 0 keer)

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.

Cycle Period

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:

RVI en Adaptieve RVI indicatoren

Gerelateerde berichten

Reactie (0)