Smooth RSI

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Plaats reactie
Springbok747
Berichten: 5
Lid geworden op: ma apr 14, 2008 3:06 pm
Locatie: Den Haag
Contacteer:

Smooth RSI

Bericht door Springbok747 » do mei 22, 2008 2:58 pm

John Ehlers heeft een aanpassing voor de RSI ontwikkeld door de signalen voor het bepalen van de 'Closes Up' en 'Closes Down' te filteren. De bijgevoegde code is geschreven in EasyLanguage en ziet er dus nogal anders uit dan TA-script.
Wie kan de onderstaande code voor mij vertalen in TA-script?

Code: Selecteer alles

{****************************************************
			Smoothed Relative Strength Index (SRSI)
			Copyright (c) 2001   MESA Software
*****************************************************}
Inputs:	Len(10);

Vars:	count(0),
	Smooth23(0),
	CU23(0),
	CD23(0),
	SRSI(0);

Smooth23 = (Close + 2*Close[1] + 2*Close[2] + Close[3])/6;
CU23 = 0;
CD23 = 0;
For count = 0 to Len - 1 begin
	If Smooth23[count] > Smooth23[count + 1] then CU23 = CU23 +
            Smooth23[count] - Smooth23[count + 1];
     	If Smooth23[count] < Smooth23[count + 1] then CD23 = CD23 +
            Smooth23[count + 1] - Smooth23[count];
end;
If CU23 + CD23 <> 0 then SRSI = CU23/(CU23 + CD23);

Plot1(SRSI, "SRSI");
Alvast hartelijk bedankt,
Ron

Eric
Berichten: 3070
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Bericht door Eric » do mei 22, 2008 5:00 pm

Ron,

Dat is deze:

Code: Selecteer alles

{- Filename: Smoothed RSI -}

var
  Periode, i, count: integer;
  sSmooth, sRSI: TSeries;
  dif, CU23, CD23: real;
begin
{ Indicator parameters }
  Periode := CreateParameterInteger('RSI periode', 1, 999, 10, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
    RequiredBars := 5*Periode+4;
  end;

{ Indicatorberekening }

  sSmooth := CreateSeries(BarCount);
  sRSI := CreateSeries(BarCount);
  for i:=3 to BarCount-1 do
  begin
    sSmooth[i] := (Close[i] + 2*Close[i-1] + 2*Close[i-2] + Close[i-3])/6;

    CU23 := 0;
    CD23 := 0;
    for count := 0 to Periode - 1 do if (i > count) and IsValid(sSmooth[i-count-1]) then
    begin
      dif := sSmooth[i-count] - sSmooth[i-count-1];
      if dif > 0 then
        CU23 := CU23 + dif
      else
        if dif < 0 then CD23 := CD23 - dif;
    end;
    if CU23 + CD23 <> 0 then
      sRSI[i] := CU23/(CU23 + CD23);
  end;
  
  with CreateLine(sRSI) do
  begin
    Name := 'SRSI';
    Color := clLime;
  end;
end.
---
Eric

Springbok747
Berichten: 5
Lid geworden op: ma apr 14, 2008 3:06 pm
Locatie: Den Haag
Contacteer:

Bericht door Springbok747 » vr mei 23, 2008 11:42 am

Eric,

Fantastisch - en natuurlijk hartelijk dank!

Ik zie dat deze Smooth-RSI slechts 1 a 2 bars achterloopt op de toppen en dalen van de koersen en daardoor nog net in staat is tijdige indicaties te geven (bijv op basis van traditionele 30/70 cross-overs).

Met vriendelijke groet,
Ron

vincent
Berichten: 245
Lid geworden op: di jan 04, 2011 12:20 pm

Re: Smooth RSI

Bericht door vincent » za nov 02, 2019 5:15 pm

Beste Eric,

Dit is uit de oude doos, maar kan jij een toevoeging maken op deze Smoothed-RSI?

Aankoop signaal als de lijn door de grens van 0,9 of 0,1 heenzakt.

Verkoop als signaal door de tegenoverliggende grens gaat (dus de 0,1 als er op 0,9 gestart is)
-OF- verkoop als de lijn wel door 0,5 gezakt is, maar omdraait en voor 2de keer door die 0,5 waarde gaat.
(Optimaliseerbaar is natuurlijk het fraaist)

Ik heb een start in blauw aangegeven en verkoop in roze ter verduidelijking.
Bij voorbaat dank.

Afbeelding

Eric
Berichten: 3070
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Smooth RSI

Bericht door Eric » zo nov 03, 2019 3:45 pm

Ik neem even aan dat je met een aankoop een entry long of short bedoelt, dan kom ik hier op uit. Kijk maar even of dat is wat je bedoelt.

Code: Selecteer alles

{- Filename: Smoothed RSI -}

var
  Periode, i, count: integer;
  sSmooth, sRSI, sEntryLow, sEntryHigh, sExit: TSeries;
  EntryLevel, dif, CU23, CD23: real;
  xLow, xHigh, xExit: TLineCrossings;
begin
{ Indicator parameters }
  Periode := CreateParameterInteger('RSI periode', 1, 999, 10, true);
  EntryLevel := CreateParameterReal('Entry level', 0, 100, 10, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
    RequiredBars := 5*Periode+4;
  end;

{ Indicatorberekening }
  sEntryLow := FillSeries(CreateSeries(BarCount), EntryLevel);
  sEntryHigh := FillSeries(CreateSeries(BarCount), 100-EntryLevel);
  sExit := FillSeries(CreateSeries(BarCount), 50);

  sSmooth := CreateSeries(BarCount);
  sRSI := CreateSeries(BarCount);
  for i:=3 to BarCount-1 do
  begin
    sSmooth[i] := (Close[i] + 2*Close[i-1] + 2*Close[i-2] + Close[i-3])/6;

    CU23 := 0;
    CD23 := 0;
    for count := 0 to Periode - 1 do if (i > count) and IsValid(sSmooth[i-count-1]) then
    begin
      dif := sSmooth[i-count] - sSmooth[i-count-1];
      if dif > 0 then
        CU23 := CU23 + dif
      else
        if dif < 0 then CD23 := CD23 - dif;
    end;
    if CU23 + CD23 <> 0 then
      sRSI[i] := CU23/(CU23 + CD23);
  end;
  sRSI := MultiplySeriesBy(sRSI, 100);

{ Signalen }
  xLow := Crossings(sRSI, sEntryLow);
  xHigh := Crossings(sRSI, sEntryHigh);
  xExit := Crossings(sRSI, sExit);
  for i:=0 to BarCount-1 do
  begin
    if xHigh[i] = lc2Over1 then
      EnterShort(i)
    else
    if xLow[i] = lc1Over2 then
      EnterLong(i)
    else
    if MarketPosition(i) > 0 then
    begin
      if (xExit[i] = lc2Over1) or (xHigh[i] = lc1Over2) then
        ExitLong(i);
    end else
    if MarketPosition(i) < 0 then
    begin
      if (xExit[i] = lc1Over2) or (xLow[i] = lc2Over1) then
        ExitShort(i);
    end;
  end;

  with CreateLine(sRSI) do
  begin
    Name := 'SRSI';
    Color := clLime;
  end;
  with CreateLine(sEntryLow) do
  begin
    Name := 'Low entry level';
    Color := clSilver;
  end;
  with CreateLine(sExit) do
  begin
    Name := '50% level';
    Color := clSilver;
  end;
  with CreateLine(sEntryHigh) do
  begin
    Name := 'High entry level';
    Color := clSilver;
  end;
end.
---
Eric

vincent
Berichten: 245
Lid geworden op: di jan 04, 2011 12:20 pm

Re: Smooth RSI

Bericht door vincent » zo nov 03, 2019 10:46 pm

Dank Eric, het werkt geheel zoals de intentie is.

Plaats reactie