scan

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Plaats reactie
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

scan

Bericht door tesjoeva »

Hi Eric,

Ik heb o.a. de volgende scan conditie:

RMO 5-3-5 geeft signaal op 0-doorgang en
Ultimate oscillator is >50 en stijgend.

Krijg ik toch een verkoopsignaal als rmo een short geeft
maar de ultimate oscillator > 50 is en bovendien stijgend.

Ik heb dit bij meerdere scans, o.a. ook met verschillende timeframes.

Wat kan ik fout doen; ik heb al diverse volgorden in de condities geprobeerd.

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

Re: scan

Bericht door Eric »

Je formulering is wat onduidelijk. Je gebruikt de TAR scanner neem ik aan, maar die geeft geen verkoopsignalen, die filtert alleen.

Begin eens met de TA-script code te geven van de indicatoren die je gebruikt en beschrijf precies wat je doet, dan zal ik het eens proberen te reproduceren.

---
Eric
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Hi Eric,

Dank voor je snelle reactie; ik kom er later graag op terug, probeer eerst even iets anders.

vr.gr,
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Hi Eric,

Misschien denk/dacht ik verkeerd en bereik ik het beoogde met een indicator

waarbij een koop signaal ontstaat als de rmo 5-3-5 een signaal geeft én de ultimate oscillator groter is dan 50 en stijgend.

verkoop omgekeerd en flat als 1 van de 2 condities niet meer geldt.

wil je zo vriendelijk zijn hier naar te kijken aub?

vriendelijke groet,
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Hi Eric,

De instelling voor rmo is 3-5-3.
foutje...

vr.gr.
Eric
Berichten: 3313
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: scan

Bericht door Eric »

Eric schreef: di mei 04, 2021 12:59 pm Begin eens met de TA-script code te geven van de indicatoren die je gebruikt
---
Eric
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Code: Selecteer alles

{- Filename: RMO Oscillator -}

var
  Per1, Per2, Per3, nSignal, i: integer;
  sMAy, sMAz, sTeller, sNoemer, sST1, sST2, sST3: TSeries;
begin
  Per1 := CreateParameterInteger('Periode 1', 1, 999, 2, true);
  Per2 := CreateParameterInteger('Periode 2', 1, 999, 10, true);
  Per3 := CreateParameterInteger('Periode 3', 1, 999, 30, true);
  nSignal := CreateParameterSelect('Signaleer op', 'Kruising'#9'Nuldoorgang', 0, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
    RequiredBars := 11*Per1+Per2+Per3;    // Aantal benodigde koersen om eerste indicatorwaarde te berekenen
    NewBand := true;            // indicator standaard in nieuwe sectie plaatsen
    ScaleRange := srAuto;       // indicatorschaal automatisch
  end;

{ Berekening }
  sMAz := FillSeries(CreateSeries(BarCount), 0);
  sMAy := Close;
  for i:=1 to Per2 do
  begin
    sMAy := MA(sMAy, maSimple, Per1);
    sMAz := AddSeries(sMAz, sMAy);
  end;

  sTeller := SubtractSeries(Close, DivideSeriesBy(sMAz, Per2));
  sNoemer := SubtractSeries(HighSeries(Close, Per2), LowSeries(Close, Per2));
  sST1 := MultiplySeriesBy(DivideSeries(sTeller, sNoemer), 100);
  sST2 := MA(sST1, maExponential, Per3);
  sST3 := MA(sST2, maExponential, Per3);

{ Signalen }
  if nSignal = 0 then
    Signals := CrossingsToEntrySignals(Crossings(sST2, sST3))
  else
    Signals := CrossingsToEntrySignals(Crossings(sST2, FillSeries(CreateSeries(BarCount), 0)));

{ Weergave }
  with CreateLine(sST2) do
  begin
    Name := 'SwingTrend 2';
    Color := clLime;
  end;
  with CreateLine(sST3) do
  begin
    Name := 'SwingTrend 3';
    Color := clRed;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 0)) do
  begin
    Name := '0';
    Color := clSilver;
  end;
  with CreateLine(sST1) do
  begin
    Name := 'SwingTrend 1';
    Color := clYellow;
    Visible := false;
  end;
end. 
---------------------------------------------------------------------------------------------------------

Code: Selecteer alles

{- Filename: Ultimate Oscillator -}

const 
  sHelpText = 'Larry Williams Ultimate Oscillator'; 
  
function BuyingPressure(Low, Close: TSeries): TSeries; 
begin 
  Result := SubtractSeries(Close, MinSeries(Low, ShiftSeries(Close, 1))); 
end; 

function UltimateOscillator(High, Low, Close: TSeries; 
                            Per1, Per2, Per3, 
                            Weight1, Weight2, Weight3: integer): TSeries; 
var 
  AvgBP1, AvgTR1, AvgBP2, AvgTR2, AvgBP3, AvgTR3: TSeries; 
begin 
  AvgTR1 := MA(TrueRange(High, Low, Close), maSimple, Per1); 
  AvgBP1 := MA(BuyingPressure(Low, Close), maSimple, Per1); 
  AvgTR2 := MA(TrueRange(High, Low, Close), maSimple, Per2); 
  AvgBP2 := MA(BuyingPressure(Low, Close), maSimple, Per2); 
  AvgTR3 := MA(TrueRange(High, Low, Close), maSimple, Per3); 
  AvgBP3 := MA(BuyingPressure(Low, Close), maSimple, Per3); 

  Result := DivideSeriesBy(AddSeries(AddSeries(MultiplySeriesBy(DivideSeries(AvgBP1, AvgTR1), Weight1),
            MultiplySeriesBy(DivideSeries(AvgBP2, AvgTR2), Weight2)),MultiplySeriesBy(DivideSeries(AvgBP3, AvgTR3), Weight3)),
            (Weight1+Weight2+Weight3)/100);
end; 

var 
  Per1, Per2, Per3,OS,OB,Midline: integer;
begin 

  Per1    := CreateParameterInteger('Periode kort', 1, 999, 7, true);
  Per2    := CreateParameterInteger('Periode middel', 1, 999, 14, true);
  Per3    := CreateParameterInteger('Periode lang', 1, 999, 28, true);
  OS      := CreateParameterInteger('Oversold', 0, 100, 30, true);
  OB      := CreateParameterInteger('Overbought', 0, 100, 70, true);
  Midline := CreateParameterInteger('Midline', 0, 100, 50, true);

  with Indicator do 
  begin 
    ShortName := 'Ult.Osc'; 
    RequiredBars := Per3; 
    HelpText := sHelpText; 
    SupportedSignals := []; 
  end; 


  with CreateLine(UltimateOscillator(High, Low, Close, Per1, Per2, Per3, 4, 2, 1)) do 
  begin 
    Name := 'Ult.Osc'; 
    Color := clLime; 
  end; 
  with CreateLine(FillSeries(CreateSeries(BarCount), OS))do
  begin
    Color := clWhite;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), MidLine))do
  begin
    Color := clWhite;
    LineType:= ltCandlestick;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), OB))do
  begin
    Color := clWhite;
  end;
end.  
----------------------------------------------------------------------------------------------------------------
rmo 3-5-3 met 0-doorgang
ult.oscillator < of > 50 en stijgend

ik heb nu in een scan een koopsignaal als de ult.osc. <50 en dalend maar rmo wel een koopsignaal geeft.
ik krijg het niet voor elkaar om signalen te krijgen als aan alle 3 condities is voldaan.

Wil je zo vriendelijk zijn je blik er op te werpen?

Indien mogelijk nog een extra check obv MA differential 10, boven of onder 0 en stijgend of dalend.

Dus Long als ult.osc. >50 en stijgt
rmo 3-5-3 een koopsignaal geeft door de 0-lijn
en de ma 10 differential boven 0 is en stijgt.

Short begrijp je uiteraard................

Exit als 1 van de 3 terugzakt onder 0, dus niet als er bijv. geen stijging meer is.

Alvast hartelijk dank, vriendelijke groet
Eric
Berichten: 3313
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: scan

Bericht door Eric »

Eerst maar eens zonder MA. Ik doe maar wat aannames mbt eventuele exitsignalen want daar ben je niet helemaal duidelijk over. De signalen krijg je zoals je aangeeft op de RMO kruising, dus als de Ultimate b.v. pas boven de 50 komt na de RMO kruising dan krijg je geen signaal.

Entry long als:
- RMO kruist nullijn opwaarts, EN
- Ultimate > 50, EN
- Ultimate stijgt

Exit long als:
- RMO kruist nullijn neerwaarts, OF
- Ultimate < 50

Entry short als:
- RMO kruist nullijn neerwaarts, EN
- Ultimate < 50, EN
- Ultimate daalt

Exit short als:
- RMO kruist nullijn opwaarts, OF
- Ultimate > 50

Code: Selecteer alles

{- Filename: Tesjoeva's RMO systeem -}

function RMO(AClose: TSeries; Per1, Per2, Per3: integer): TSeries;
var
  ABarCount, i: integer;
  sMAy, sMAz, sTeller, sNoemer, sST1: TSeries;
begin
  ABarCount := GetArrayLength(AClose);
  
  sMAz := FillSeries(CreateSeries(ABarCount), 0);
  sMAy := AClose;
  for i:=1 to Per2 do
  begin
    sMAy := MA(sMAy, maSimple, Per1);
    sMAz := AddSeries(sMAz, sMAy);
  end;

  sTeller := SubtractSeries(AClose, DivideSeriesBy(sMAz, Per2));
  sNoemer := SubtractSeries(HighSeries(AClose, Per2), LowSeries(AClose, Per2));
  sST1 := MultiplySeriesBy(DivideSeries(sTeller, sNoemer), 100);
  Result := MA(sST1, maExponential, Per3);
end;

function BuyingPressure(Low, Close: TSeries): TSeries;
begin
  Result := SubtractSeries(Close, MinSeries(Low, ShiftSeries(Close, 1)));
end;

function UltimateOscillator(High, Low, Close: TSeries;
                            Per1, Per2, Per3,
                            Weight1, Weight2, Weight3: integer): TSeries;
var
  AvgBP1, AvgTR1, AvgBP2, AvgTR2, AvgBP3, AvgTR3: TSeries;
begin
  AvgTR1 := MA(TrueRange(High, Low, Close), maSimple, Per1);
  AvgBP1 := MA(BuyingPressure(Low, Close), maSimple, Per1);
  AvgTR2 := MA(TrueRange(High, Low, Close), maSimple, Per2);
  AvgBP2 := MA(BuyingPressure(Low, Close), maSimple, Per2);
  AvgTR3 := MA(TrueRange(High, Low, Close), maSimple, Per3);
  AvgBP3 := MA(BuyingPressure(Low, Close), maSimple, Per3);

  Result := DivideSeriesBy(AddSeries(AddSeries(MultiplySeriesBy(DivideSeries(AvgBP1, AvgTR1), Weight1),
            MultiplySeriesBy(DivideSeries(AvgBP2, AvgTR2), Weight2)),MultiplySeriesBy(DivideSeries(AvgBP3, AvgTR3), Weight3)),
            (Weight1+Weight2+Weight3)/100);
end;

var
  RMO1, RMO2, RMO3: integer;
  Ult1, Ult2, Ult3: integer;
  i, Position: integer;
  sRMO, sUlt, sUltMom: TSeries;
  xRMO: TLineCrossings;
begin
  RMO1 := CreateParameterInteger('RMO Periode 1', 1, 999, 3, true);
  RMO2 := CreateParameterInteger('RMO Periode 2', 1, 999, 5, true);
  RMO3 := CreateParameterInteger('RMO Periode 3', 1, 999, 3, true);

  Ult1    := CreateParameterInteger('Ultimate Osc kort', 1, 999, 7, true);
  Ult2    := CreateParameterInteger('Ultimate Osc middel', 1, 999, 14, true);
  Ult3    := CreateParameterInteger('Ultimate Osc lang', 1, 999, 28, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
    RequiredBars := 11*RMO1+RMO2+RMO3+Ult3;    // Aantal benodigde koersen om eerste indicatorwaarde te berekenen
    NewBand := true;            // indicator standaard in nieuwe sectie plaatsen
    ScaleRange := srAuto;       // indicatorschaal automatisch
  end;

  sRMO := RMO(Close, RMO1, RMO2, RMO3);
  sUlt := UltimateOscillator(High, Low, Close, Ult1, Ult2, Ult3, 4, 2, 1);
  sUltMom := Momentum(sUlt, 1);
  
{ Signalen }
  xRMO := Crossings(sRMO, FillSeries(CreateSeries(BarCount), 0));

  for i:=FirstValidIndex(sUltMom) to BarCount-1 do
  begin
    if Position <= 0 then
    begin
      if (xRMO[i] = lc1Over2) and (sUlt[i] > 50) and (sUltMom[i] > 0) then
      begin
        EnterLong(i);
        Position := 1;
      end else
      if (xRMO[i] = lc1Over2) or (sUlt[i] > 50) then
      begin
        ExitShort(i);
        Position := 0;
      end;
    end;
    if Position >= 0 then
    begin
      if (xRMO[i] = lc2Over1) and (sUlt[i] < 50) and (sUltMom[i] < 0) then
      begin
        EnterShort(i);
        Position := -1;
      end else
      if (xRMO[i] = lc2Over1) or (sUlt[i] < 50) then
      begin
        ExitLong(i);
        Position := 0;
      end;
    end;
  end;

{ Weergave }
  with CreateLine(sRMO) do
  begin
    Name := 'RMO';
    Color := clLime;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 0)) do
  begin
    Name := '0';
    Color := clSilver;
  end;
  with CreateLine(sUlt) do
  begin
    Name := 'Ultimate Oscillator';
    Color := clRed;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 50)) do
  begin
    Name := '50';
    Color := clSilver;
  end;
end.
---
Eric
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Hallo Eric,

Ik vind de indicator zo al top, exits zijn precies zoals ik in gedachte had.

Is het mogelijk om een signaal te genereren als de UO later dan de rmo >50 komt en stijgt/daalt UO<50 en daalt?

Ik kan echter niet goed inschatten of dit een verbetering is, maar mijn gevoel zegt van wel.

Als het niet kan is het ook al prima!! (laat de MA10 maar zitten...)

Nu even doordraven, sorry....

Kun je er ook 2 indicatoren van maken, 1 alleen de koopsignalen met exits en 1alleen de verkoopsignalen
met exits dus systeem PLUS en systeem MIN ?

Mijn dank is sowieso al groot, vriendelijke groet
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Hi Eric,

Nog even.....het zou mijn bedoeling zijn dat er een signaal komt op het moment dat aan beide condities is voldaan, onafhankelijk van de volgorde.

Dan....bijv. bij een long hebben we een flauwe dag en gaat 1 van de 2 indicatoren onder 0, met
als gevolg een exit/flat.

Als de koers dan weer aantrekt zou er dus een re-entry kunnen ontstaan op het moment dat beide weer
aan de condities voldoen.

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

Re: scan

Bericht door Eric »

Bedoel je:

Entry long als:
- RMO groter dan 0, EN
- Ultimate > 50, EN
- Ultimate stijgt

---
Eric
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

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

Re: scan

Bericht door Eric »

Code: Selecteer alles

{- Filename: Tesjoeva's RMO systeem -}

function RMO(AClose: TSeries; Per1, Per2, Per3: integer): TSeries;
var
  ABarCount, i: integer;
  sMAy, sMAz, sTeller, sNoemer, sST1: TSeries;
begin
  ABarCount := GetArrayLength(AClose);
  
  sMAz := FillSeries(CreateSeries(ABarCount), 0);
  sMAy := AClose;
  for i:=1 to Per2 do
  begin
    sMAy := MA(sMAy, maSimple, Per1);
    sMAz := AddSeries(sMAz, sMAy);
  end;

  sTeller := SubtractSeries(AClose, DivideSeriesBy(sMAz, Per2));
  sNoemer := SubtractSeries(HighSeries(AClose, Per2), LowSeries(AClose, Per2));
  sST1 := MultiplySeriesBy(DivideSeries(sTeller, sNoemer), 100);
  Result := MA(sST1, maExponential, Per3);
end;

function BuyingPressure(Low, Close: TSeries): TSeries;
begin
  Result := SubtractSeries(Close, MinSeries(Low, ShiftSeries(Close, 1)));
end;

function UltimateOscillator(High, Low, Close: TSeries;
                            Per1, Per2, Per3,
                            Weight1, Weight2, Weight3: integer): TSeries;
var
  AvgBP1, AvgTR1, AvgBP2, AvgTR2, AvgBP3, AvgTR3: TSeries;
begin
  AvgTR1 := MA(TrueRange(High, Low, Close), maSimple, Per1);
  AvgBP1 := MA(BuyingPressure(Low, Close), maSimple, Per1);
  AvgTR2 := MA(TrueRange(High, Low, Close), maSimple, Per2);
  AvgBP2 := MA(BuyingPressure(Low, Close), maSimple, Per2);
  AvgTR3 := MA(TrueRange(High, Low, Close), maSimple, Per3);
  AvgBP3 := MA(BuyingPressure(Low, Close), maSimple, Per3);

  Result := DivideSeriesBy(AddSeries(AddSeries(MultiplySeriesBy(DivideSeries(AvgBP1, AvgTR1), Weight1),
            MultiplySeriesBy(DivideSeries(AvgBP2, AvgTR2), Weight2)),MultiplySeriesBy(DivideSeries(AvgBP3, AvgTR3), Weight3)),
            (Weight1+Weight2+Weight3)/100);
end;

var
  RMO1, RMO2, RMO3: integer;
  Ult1, Ult2, Ult3: integer;
  i, iFirst, Position: integer;
  sRMO, sUlt, sUltMom: TSeries;
  xRMO: TLineCrossings;
  bLong, bShort: boolean;
begin
  RMO1 := CreateParameterInteger('RMO Periode 1', 1, 999, 3, true);
  RMO2 := CreateParameterInteger('RMO Periode 2', 1, 999, 5, true);
  RMO3 := CreateParameterInteger('RMO Periode 3', 1, 999, 3, true);

  Ult1    := CreateParameterInteger('Ultimate Osc kort', 1, 999, 7, true);
  Ult2    := CreateParameterInteger('Ultimate Osc middel', 1, 999, 14, true);
  Ult3    := CreateParameterInteger('Ultimate Osc lang', 1, 999, 28, true);
  
  bLong := CreateParameterBoolean('Long trades', true, true);
  bShort := CreateParameterBoolean('Short trades', true, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
    RequiredBars := 11*RMO1+RMO2+RMO3+Ult3;    // Aantal benodigde koersen om eerste indicatorwaarde te berekenen
    NewBand := true;            // indicator standaard in nieuwe sectie plaatsen
    ScaleRange := srAuto;       // indicatorschaal automatisch
  end;

  sRMO := RMO(Close, RMO1, RMO2, RMO3);
  sUlt := UltimateOscillator(High, Low, Close, Ult1, Ult2, Ult3, 4, 2, 1);
  sUltMom := Momentum(sUlt, 1);
  
{ Signalen }
  iFirst := MaxInt(FirstValidIndex(sUltMom), FirstValidIndex(sRMO));
  for i:=iFirst to BarCount-1 do
  begin
    if Position <= 0 then
    begin
      if bLong and (sRMO[i] > 0) and (sUlt[i] > 50) and (sUltMom[i] > 0) then
      begin
        EnterLong(i);
        Position := 1;
      end else
      if (sRMO[i] > 0) or (sUlt[i] > 50) then
      begin
        ExitShort(i);
        Position := 0;
      end;
    end;
    if Position >= 0 then
    begin
      if bShort and (sRMO[i] < 0) and (sUlt[i] < 50) and (sUltMom[i] < 0) then
      begin
        EnterShort(i);
        Position := -1;
      end else
      if (sRMO[i] < 0) or (sUlt[i] < 50) then
      begin
        ExitLong(i);
        Position := 0;
      end;
    end;
  end;

{ Weergave }
  with CreateLine(sRMO) do
  begin
    Name := 'RMO';
    Color := clLime;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 0)) do
  begin
    Name := '0';
    Color := clSilver;
  end;
  with CreateLine(sUlt) do
  begin
    Name := 'Ultimate Oscillator';
    Color := clRed;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 50)) do
  begin
    Name := '50';
    Color := clSilver;
  end;
end.
---
Eric
tesjoeva
Berichten: 221
Lid geworden op: vr jul 07, 2017 3:10 pm

Re: scan

Bericht door tesjoeva »

Hi Eric,

Erg bedankt, is precies wat ik in gedachte had, echter......

In een poging de kleine contra bewegingen uit te filteren ( dus met de nodige exits en re-entries)
wil ik je vragen de cci 20 toe te voegen.

Entries dus als aan alle 3 de voorwaarden is voldaan;

rmo 3-5-3 geeft koopsignaal EN UO is >50 en stijgt EN cci 20 > 0 en stijgt.

Kun je ook een exit krijgen als 2 van de 3 'terugzakken' dus UO <50 EN cci20 <0?

Als dit niet kan dan obv 1 (maakt dan niet uit welke)

vriendelijke groet,
Plaats reactie