+91-0000000000

}

Monday – Friday : 9:00 AM – 6:30 PM

Hurst

Utilizing the Amibroker data feed to interpret the Hurst indicator provides insights into market trends’ long-term behavior. Crafting an Amibroker AFL centered around this indicator assists traders in recognizing and capitalizing on persistent trends or shifts in market behavior.

/function TriMA(array,periods)
  {
   pds = (periods+1)/2;
   pds = IIf(frac(pds)==0, pds, pds+1);
   return MA( MA(array,pds), pds);
  }

function CycleHighlighter(Periods,Price)
  {
   P1 = int(Periods*1.5);  //due to lag characteristics of Tri MA
   P1 = LastValue(IIf(frac(P1/2)==0,P1+1,P1));
   P2 = int(p1/2);
   P2 = LastValue(IIf(frac(P2/2)==0,P2+1,P2));
   MA1 = TriMA(Price,P1);
   MA2 = TriMA(Price,P2);
   PC1 = (P1-1)/2;  //Centre MAs
   PC2 = (P2-1)/2;
   CMA1 = Ref(MA1,PC1);
   CMA2 = Ref(MA2,PC2);
   Cyhi = CMA2-CMA1;
   global Revcount;
   global end;
   Revcount = LastValue( BarIndex() ) - BarIndex();
   end = revcountRef(Basecycle,-1) AND end==0;
	BCStart = IIf(ValueWhen(BCpk OR BCtr,BCpk,1), ValueWhen(BCpk,BarIndex(),1+Lookbackcycles), ValueWhen(BCtr,BarIndex(),1+Lookbackcycles) ) ;
	BCStart = BarIndex()==LastValue( ValueWhen(end==0,BCStart,1) );
	
	//derive *recent* average wavelength of Base Cycle (over # of lookbackcycles) from peaks and troughs
	BCpkpds = LastValue( ValueWhen(BCpk,BarIndex(),1) - ValueWhen(BCpk,BarIndex(),1+LookbackCycles) ) / LookbackCycles;
	BCtrpds = LastValue( ValueWhen(BCtr,BarIndex(),1) - ValueWhen(BCtr,BarIndex(),1+LookbackCycles) ) / LookbackCycles;
	BCpds = (BCpkpds+BCtrpds)/2;
	
	Periods = IIf(Method==0, Periods, BCpds);	

	//now determine suitable amplitude from StDev of Base Cycle during "best fit" window
	sineamplitude = LastValue( StDev( BaseCycle, LastValue(BarsSince(BCStart)) ) *1.5 );
	
	//now determine where sine wave is anchored to BaseCycle
	//i.e., most recent of a BaseCycle Peak or Trough
	pkOffset = LastValue( ValueWhen(BCpk,BarIndex(),1) )-2;  
	trOffset = LastValue( ValueWhen(BCtr,BarIndex(),1) )-2;
	//Offset = (pkOffset+trOffset)/2;
	if ( LastValue( ValueWhen(BCpk OR BCtr,BCpk,1) ) )     //RECENT ANCHOR POINT IS A PEAK
 	 {	sine = sin( (Cum(1)-pkOffset+Periods/4-Shift)/Periods * 6.283185 ); }
	if ( LastValue( ValueWhen(BCpk OR BCtr,BCtr,1) ) )     //RECENT ANCHOR POINT IS A TROUGH
 	 {	sine = sin( (Cum(1)-trOffset+Periods*3/4-Shift)/Periods * 6.283185 ); }	
	return sine*sineamplitude;
  }


Pds = Param("Base Cycle Wavelength", 60, 3, 1000, 2); 
Price = IIf(ParamToggle("Price Field", "Mid Price | Close", 0)==0, (H+L)/2 , C);
CycNo = Param("Best fit # recent cycles", 3, 1, 10);
Method = ParamToggle("Sine Wavelength", "As Base Cycle | Best Fit", 0);
Shift = Param("Manual Shift", 0, -100, 100);

BaseCycle = CycleHighlighter(Pds,Price);
Refsine = AnchoredSine(BaseCycle,CycNo,Method,Pds,Shift);

//Find start of Sine Cycle
Sinepk = HHVBars(Refsine,5)==2 AND RefsineRef(Refsine,-1); 
SineStart = IIf(ValueWhen(BCpk OR BCtr,BCpk,1), ValueWhen(Sinepk,BarIndex(),1+CycNo), ValueWhen(Sinetr,BarIndex(),1+CycNo) ) ;
SineStart = BarIndex()==LastValue( ValueWhen(end==0,SineStart,1) );
sinamp = IIf(LastValue(ValueWhen(BCpk OR BCtr,BCpk,1)), sineamplitude, -sineamplitude);

//Predicted date & time of next peak or trough (for title)
SineWavelength = LastValue( ValueWhen(sinepk OR sinetr,BarIndex(),1) - ValueWhen(sinepk OR sinetr,BarIndex(),3) );
NextPk = Max( 0, SineWavelength - LastValue(BarsSince(sinepk)) - 2 );
NextTr = Max( 0, sineWavelength - LastValue(BarsSince(sinetr)) - 2 );
Bars = IIf(Nextpk1," base cycles"," base cycle") + EncodeColor(colorGrey50)
       + "\nprojected next: " + EncodeColor(colorDarkRed) + Type + " in " + NumToStr(bars,1.0) + WriteIf(Bars>1," bars"," bar") + EncodeColor(colorGrey50) 
		+ "\ncorrelation = " + EncodeColor(colorBlue) + NumToStr(CorSineBC,1.2) + EncodeColor(colorRed) + " (" + NumToStr(CorEnd,1.2) + ")"; 

Plotcolour = IIf(end, colorLightGrey, ParamColor("Colour",colorBlue) );
Plot(Refsine,"",colorRed,styleNoLabel);
Plot( BaseCycle, "Cycle Highlighter", Plotcolour,  ParamStyle("Style",styleThick) | styleNoLabel); 
Plot( 0, "", colorLightGrey,styleNoLabel);
Plot(BCstart*sinamp,"",colorBlue,styleNoLabel);
Plot(sineStart*sinamp,"",colorRed,styleNoLabel);


Open chat
1
Hi, how can I help you?