Ik zal u het hele verhaal besparen, maar in principe draait het verhaal in deze indicator om de standaard deviatie.
En bij standaard deviatie denkt u natuurlijk onmiddellijk aan de Bell Curve

In het midden van de Bell curve staat 'the mean'.
Het gemiddelde.
De koers gaat altijd terug naar het gemiddelde.
De koers beweegt meestal tussen -1 en +1 deviatie, soms tussen -2 en +2 deviatie, en de -3 of +3 is toch wel het uiterste.
Zodra de koers 1 standaard deviatie van het gemiddelde (the mean) afwijkt, is de kans zeer groot dat ie weer terug gaat naar de mean.
Des te groter bij 2 deviaties.
En sjonge-jonge nog groter bij 3 deviaties.
Doe eens gek, en gooi die Bell Curve op z'n kant, en zie de mean als de nullijn in onderstaande grafiek.
De +1 en de -1 afwijking in deze grafiek is 'normaal', de +2 en de -2 komt al minder vaak voor, en de 3-4 standaard deviaties vanaf the mean (0) zijn wel heel zeldzaam.
Ofwel, op z'n Jans gezegd, des te verder de lijn in de grafiek vanaf de nul verwijderd is, des te groter de kans dat deze weer terug wil.
De Fisher Transform en de latere variant de Inverse Fisher Transform zijn nu aangepast met later verworven inzichten door dhr. Ehlers.
Ik plaats hieronder even de door mij vertaalde code en een grafiekje.
Succes!!
.
Code: Selecteer alles
{- Filename: Ehlers Elegant Oscillator -}
// The Elegant Oscillator van Dhr. Ehlers.
// gebaseerd op de Inverse Fisher Transform
// vertaald voor TA-Script door www.JSTAS.com
// 2022-02-03 versie 1.00
//
Procedure Initialisatie();
begin
with Indicator do
begin
NewBand := true;
RequiredBars := 200;
BkColor := clBlack;
end;
end;
//**************************************************
Var
RMS, a1, b1, c1, c3 : real;
BandEdge, i, count : integer;
Deriv, NDeriv, IFish,sSS : TSeries;
begin
sSs := FillSeries(CreateSeries(BarCount),0);
IFish := Fillseries(CreateSeries(BarCount),0);
NDeriv := FillSeries(CreateSeries(BarCount),0);
BandEdge := CreateParameterInteger('BandEdge:',1,100,20,true);
Initialisatie();
//Take the derivative of prices
Deriv := SubtractSeries(Close,ShiftSeries(Close,2));
//Normalize to standard deviation
for i := 49 to BarCount-1 do
begin
If IsValid(Deriv[i-49]) then
begin
RMS :=0;
For Count := 0 to 49 do
begin
RMS := RMS + Sqr(Deriv[i-count]);
end;
If (RMS<>0) then RMS := Sqrt(RMS/50.0);
NDeriv[i] := (Deriv[i]/RMS);
end;
end;
//Compute Inverse Fisher Transform
for i := FirstValidIndex(NDeriv) to BarCount-1 do
IFish[i] := (Exp(2*NDeriv[i])-1) / (EXP(2*NDeriv[i])+1);
//Integrate with SuperSmoother
a1 := Exp(-1.414*3.14159/BandEdge);
b1 := 2*a1*Cos((1.414*180/BandEdge)*(Pi/180)) ;
C3 := -a1*a1;
c1 := 1-b1-c3;
for i := 3 to BarCount-1 do
begin
sSS[i] := c1*(IFish[i]+IFish[i-1])/2.0 + b1*sSS[i-1] + c3*sSS[i-2];
end;
// lines
CreateLine(sSS).Color := clYellow;
CreateLine(FillSeries(CreateSeries(BarCount),0)).Color:=clSilver;
end.

.
