TAR scanner WMA op basis van OBV (On Balance Volume)

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

TAR scanner WMA op basis van OBV (On Balance Volume)

Bericht door paulkr » ma nov 16, 2009 10:57 pm

Beste Eric,

Zou je aub het script http://ta-script.com/forum/viewtopic.ph ... hlight=wma kunnen aanpassen en de RSI vervangen door de OBV [30] indicator?

Gr Paul

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

Bericht door Eric » di nov 17, 2009 10:18 am

Paul,

Dat wordt zoiets als ik het goed begrepen heb.

Code: Selecteer alles

{- Filename: OBV - MA -}

var 
  nOBVMA, nMA: integer;
  sOBV, sMA, sMADiff: TSeries;
begin 
{ Indicator parameters } 
  nOBVMA := CreateParameterInteger('OBV MA periode', 1, 999, 30, true);
  nMA := CreateParameterInteger('Signaal MA periode', 1, 999, 3, true);

{ Indicator eigenschappen } 
  with Indicator do 
  begin 
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen } 
    RequiredBars := nOBVMA + nMA;
  end; 

{ bereken alle benodigde indicatorwaarden } 
  sOBV := MA(OnBalanceVolume(Close, Volume), maSimple, nOBVMA);
  sMA := MA(sOBV, maWeighted, nMA);
  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sOBV, sMA), sMA), 100);
  
  Signals := CrossingsToEntrySignals(Crossings(sOBV, sMA));

  with CreateLine(sOBV) do
  begin 
    Name := 'OBV';
    Color := clLime; 
  end; 
  with CreateLine(sMA) do 
  begin 
    Name := 'MA'; 
    Color := clRed; 
  end; 
  with CreateLine(sMADiff) do 
  begin 
    Name := 'TAR'; 
    Color := clYellow; 
    LineContent := lcTAR; 
    Visible := false;
  end; 
end.
---
Eric

paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Bericht door paulkr » di nov 17, 2009 12:36 pm

Eric,
De indicator geeft nog niet de signalen zoals ik hem in gedachten heb.
De WMA dient genomen te worden van de OBV[30] lijn. Met de MA van de OBV doen we niets en deze hoeft ook niet zichtbaar te zijn

Gezien een plaatje meet zegt dan worden:
-Het middelste venster geeft de indicator weer zoals we deze graag in een script incl TAR signalen zouden willen hebben.

-Het onderste venster bevat het script van hierboven

Afbeelding

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

Bericht door Eric » di nov 17, 2009 1:46 pm

Paul,

Dat dacht ik in eerste instantie eigenlijk ook, maar dan is het dus niet de OBV(30) die je gebruikt maar de OBV. De OBV heeft nl. geen periode-instelling.

Code: Selecteer alles

{- Filename: OBV - MA -}

var 
  nMA: integer;
  sOBV, sMA, sMADiff: TSeries;
begin 
{ Indicator parameters } 
  nMA := CreateParameterInteger('Signaal MA periode', 1, 999, 10, true);

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

{ bereken alle benodigde indicatorwaarden } 
  sOBV := OnBalanceVolume(Close, Volume);
  sMA := MA(sOBV, maWeighted, nMA);
  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sOBV, sMA), sMA), 100);
  
  Signals := CrossingsToEntrySignals(Crossings(sOBV, sMA));

  with CreateLine(sOBV) do
  begin 
    Name := 'OBV';
    Color := clLime; 
  end; 
  with CreateLine(sMA) do 
  begin 
    Name := 'MA'; 
    Color := clRed; 
  end; 
  with CreateLine(sMADiff) do 
  begin 
    Name := 'TAR'; 
    Color := clYellow; 
    LineContent := lcTAR; 
    Visible := false;
  end; 
end.
---
Eric

paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Bericht door paulkr » di nov 17, 2009 9:13 pm

Eric,
Het gedrag van de indicator en de signalen zijn nu perfect.
Bij het testen mbv een technisch rapport loop ik echter tegen het feit; soms bevindt de OBV zich boven de WMA[10] , echter de TAR waarde is negatief.

Voorbeeld
Zie het plaatje beneden : Acelor MIIT Weekly chart waarin OBV > WMA10
Echter de TAR waarde in het technisch rapport = -48,10 (ter info technische rapport staat op weekly)
Enig idee wat er hier aan het handje is ?

Afbeelding

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

Bericht door Eric » di nov 17, 2009 9:25 pm

Paul,

Ik zie het, hierbij een correctie. De absolute TAR waarde is overigens nietszeggend, omdat waarde van de OBV zelf ook afhankelijk is van het punt waar je begint met tellen.

Code: Selecteer alles

{- Filename: OBV - MA -}

var 
  nMA: integer;
  sOBV, sMA, sMADiff: TSeries;
begin 
{ Indicator parameters } 
  nMA := CreateParameterInteger('Signaal MA periode', 1, 999, 10, true);

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

{ bereken alle benodigde indicatorwaarden } 
  sOBV := OnBalanceVolume(Close, Volume);
  sMA := MA(sOBV, maWeighted, nMA);
  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sOBV, sMA), AbsSeries(sMA)), 100);
  
  Signals := CrossingsToEntrySignals(Crossings(sOBV, sMA));

  with CreateLine(sOBV) do
  begin 
    Name := 'OBV';
    Color := clLime; 
  end; 
  with CreateLine(sMA) do 
  begin 
    Name := 'MA'; 
    Color := clRed; 
  end; 
  with CreateLine(sMADiff) do 
  begin 
    Name := 'TAR'; 
    Color := clYellow; 
    LineContent := lcTAR; 
    Visible := false;
  end; 
end.
---
Eric

paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Bericht door paulkr » wo nov 18, 2009 10:17 am

Het script en de TAR werkt nu helemaal top!
Bedankt Eric voor de service.
Gr Paul

paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Bericht door paulkr » wo sep 15, 2010 12:07 pm

Eric,

Is het mogelijk om het script dusdanig aan te passen, zodat;
-het differentieel tussen MA en OBV wordt weergegeven in een histogram met een o lijn in het middel
-de MA type kan worden gekozen; SMA, EMA en WMA, ivm experimenteren voor beste resultaat?

Gr. Paulkr

Code: Selecteer alles

{- Filename: OBV - MA -}

var
  nMA: integer;
  sOBV, sMA, sMADiff: TSeries;
begin
{ Indicator parameters }
  nMA := CreateParameterInteger('Signaal MA periode', 1, 999, 10, true);

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

{ bereken alle benodigde indicatorwaarden }
  sOBV := OnBalanceVolume(Close, Volume);
  sMA := MA(sOBV, maWeighted, nMA);
  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sOBV, sMA), AbsSeries(sMA)), 100);
 
  Signals := CrossingsToEntrySignals(Crossings(sOBV, sMA));

  with CreateLine(sOBV) do
  begin
    Name := 'OBV';
    Color := clLime;
  end;
  with CreateLine(sMA) do
  begin
    Name := 'MA';
    Color := clRed;
  end;
  with CreateLine(sMADiff) do
  begin
    Name := 'TAR';
    Color := clYellow;
    LineContent := lcTAR;
    Visible := false;
  end;
end.

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

Bericht door Eric » wo sep 15, 2010 9:10 pm

Bij deze. Ik heb voor de TAR en weergegeven waarde de absolute waarde tussen MA en OBV genomen, anders zie je niet veel door extreme waarden.

Code: Selecteer alles

{- Filename: OBV - MA -}

var 
  nMA, nMAType: integer;
  sOBV, sMA, sMADiff: TSeries;
begin 
{ Indicator parameters } 
  nMA := CreateParameterInteger('Signaal MA periode', 1, 999, 10, true);
  nMAType := CreateParameterSelect('MA type', 'maSimple'#9'maWeighted'#9'maExponential', 0, true);

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

{ bereken alle benodigde indicatorwaarden } 
  sOBV := OnBalanceVolume(Close, Volume);
  case nMAType of
    0: sMA := MA(sOBV, maSimple, nMA);
    1: sMA := MA(sOBV, maWeighted, nMA);
    2: sMA := MA(sOBV, maExponential, nMA);
  end;
//  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sOBV, sMA), AbsSeries(sMA)), 100);
  sMADiff := SubtractSeries(sOBV, sMA);

  Signals := CrossingsToEntrySignals(Crossings(sOBV, sMA));

  with CreateLine(sMADiff) do
  begin 
    Name := 'TAR'; 
    Color := clYellow; 
    LineContent := lcTAR; 
    LineType := ltBar;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 0)) do
  begin
    Name := '0';
    Color := clSilver;
  end;
end.
---
Eric

paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Bericht door paulkr » wo sep 15, 2010 11:47 pm

Werkt prima. Bedank Eric
Gr Paulkr

paulkr
Berichten: 379
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Bericht door paulkr » zo okt 17, 2010 8:13 pm

Eric, ik heb met wat knippen en plakken getracht om een script met 2 WMAs op basis van OBV te realiseren. Met (TAR) signalen als volgt;
-koop: short WMA kruist long WMA opwaarts
-verkoop: short WMA kruist long WMA neerwaarts
Indien je een keer zin en tijd hebt van de week zou je dan aub eens kijken wat er geschoven dient te worden om het werkend te krijgen?

Gr Paulkr

Code: Selecteer alles

{- Filename: TAR OBV-2WMAs -}

var
  nMA, nMA2: integer;
  sOBV, sMA, sMADiff: TSeries;
begin
{ Indicator parameters }
  nMA := CreateParameterInteger('Signaal MA periode', 1, 999, 10, true);
  nMA2 := CreateParameterInteger('Signaal MA periode', 1, 999, 5, true);

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

{ bereken alle benodigde indicatorwaarden }
  sOBV := OnBalanceVolume(Close, Volume);
  sMA := MA(sOBV, maWeighted, nMA);
  sMA2 := MA(sOBV, maWeighted, nMA2);
  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sMa, sMA2), AbsSeries(sMA)), 100);
 
  Signals := CrossingsToEntrySignals(Crossings(sMA, sMA2));

  with CreateLine(sOBV) do
  begin
    Name := 'OBV';
    Color := clLime;
  end;
  with CreateLine(sMA) do
  begin
    Name := 'MA';
    Color := clRed;
  end;
  with CreateLine(sMADiff) do
  begin
    Name := 'TAR';
    Color := clYellow;
    LineContent := lcTAR;
    Visible := false;
  end;
end.

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

Bericht door Eric » ma okt 18, 2010 9:13 am

Het had niet veel aanpassing meer nodig:

Code: Selecteer alles

{- Filename: TAR OBV-2WMAs -}

var
  nMA, nMA2: integer;
  sOBV, sMA, sMA2, sMADiff: TSeries;
begin
{ Indicator parameters }
  nMA := CreateParameterInteger('MA periode', 1, 999, 10, true);
  nMA2 := CreateParameterInteger('Signaal MA periode', 1, 999, 5, true);

{ Indicator eigenschappen }
  with Indicator do
  begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
    RequiredBars := 5*(nMA+nMA2);
  end;

{ bereken alle benodigde indicatorwaarden }
  sOBV := OnBalanceVolume(Close, Volume);
  sMA := MA(sOBV, maWeighted, nMA);
  sMA2 := MA(sOBV, maWeighted, nMA2);
  sMADiff := MultiplySeriesBy(DivideSeries(SubtractSeries(sMa, sMA2), AbsSeries(sMA)), 100);

  Signals := CrossingsToEntrySignals(Crossings(sMA2, sMA));

  with CreateLine(sOBV) do
  begin
    Name := 'OBV';
    Color := clLime;
  end;
  with CreateLine(sMA) do
  begin
    Name := 'MA';
    Color := clRed;
  end;
  with CreateLine(sMA2) do
  begin
    Name := 'MA2';
    Color := clYellow;
  end;
  with CreateLine(sMADiff) do
  begin
    Name := 'TAR';
    Color := clWhite;
    LineContent := lcTAR;
    Visible := false;
  end;
end.
---
Eric

vladslav
Berichten: 6
Lid geworden op: do nov 18, 2010 5:04 pm
Locatie: Kalken

Re: TAR scanner WMA op basis van OBV (On Balance Volume)

Bericht door vladslav » za jul 23, 2011 2:02 pm

Dank voor deze perfecte indicator, werkt idd subliem

Antoine,
Vladslav

Optiontrader
Berichten: 215
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: TAR scanner op basis van Impulse System

Bericht door Optiontrader » wo jun 12, 2019 1:46 pm

Hallo Eric,

Tar-Scanner:

Het Impulse System van Elder heeft bijvoorbeeld op dagbasis een groene, blauwe of rode Jap. Candle. Is in de Tar-Scanner de mogelijkheid verweven om bijvoorbeeld alleen de rode candles bij aandelen in een scan-lijst weer te geven die gebaseerd zijn op het > Impulse System > een negatieve (dalende) EMA en een negatieve (dalende) MACD-H, al dan niet de laatste boven of onder de nullijn?

Blauw en groen eveneens, indien het maar in te stellen is!

Groet OT

CODE IMPULSE SYSTEM

Code: Selecteer alles

{- Filename: Impulse System -}

    {- Filename: Elder's Impulse system -}

    var
      nEMA, nMACD1, nMACD2, nMACD3, i: integer;
      sEMA, sMACD1, sMACD2, sMACDDiff, sEMADir, sMACDDir,
      sGreen, sRed, sBlue: TSeries;
    begin
      nEMA := CreateParameterInteger('EMA periode', 1, 999, 22, true);
      nMACD1 := CreateParameterInteger('MACD1 periode', 1, 999, 12, true);
      nMACD2 := CreateParameterInteger('MACD2 periode', 1, 999, 26, true);
      nMACD3 := CreateParameterInteger('MACD3 periode', 1, 999, 9, true);

      with Indicator do
      begin
    { Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
        RequiredBars := 5*MaxInt(nEMA, nMACD2+nMACD3);
        NewBand := false;
      end;

      sEMA := MA(Close, maExponential, nEMA);
      sMACD1 := MACD(Close, nMACD1, nMACD2);
      sMACD2 := MA(sMACD1, maExponential, nMACD3);
      sMACDDiff := SubtractSeries(sMACD1, sMACD2);
      sEMADir := Momentum(sEMA, 1);
      sMACDDir := Momentum(sMACDDiff, 1);

      sGreen := CreateSeries(BarCount);
      sRed := CreateSeries(BarCount);
      sBlue := CreateSeries(BarCount);
     
      for i:=MaxInt(FirstValidIndex(sEMADir), FirstValidIndex(sMACDDir)) to BarCount-1 do
      begin
        if (sEMADir[i] > 0) and (sMACDDir[i] > 0) then
          SetParentBarColor(i, clLime)
        else
        if (sEMADir[i] < 0) and (sMACDDir[i] < 0) then
          SetParentBarColor(i, clRed)
        else
          SetParentBarColor(i, clAqua);
      end;
    end.


[b]CODE MACD-H >[/b]

{- Filename: MACD-H -}

    {- Filename: MACD dubbel -}

    var
      nMACD1, nMACD2, nMACD3: integer;
      sMACD1, sMACD2, sZero: TSeries;
    begin
    { Parameters }
      nMACD1 := CreateParameterInteger('MACD 1', 1, 999, 5, true);
      nMACD2 := CreateParameterInteger('MACD 2', 1, 999, 34, true);
      nMACD3 := CreateParameterInteger('MACD 3', 1, 999, 7, true);

    { Indicator eigenschappen }
      with Indicator do
      begin
        RequiredBars := 5*(nMACD1+nMACD2+nMACD3);
        NewBand := true;
        ScaleRange := srAuto;
      end;

    { Berekening }
      sMACD1 := MACD(Close, nMACD1, nMACD2);
      sMACD2 := MA(sMACD1, maExponential, nMACD3);
      sZero := FillSeries(CreateSeries(BarCount), 0);
     
    { signalen }
      Signals := CrossingsToEntrySignals(Crossings(sMACD1, sMACD2));

    { Weergave }
      with CreateLine(sMACD1) do
      begin
        Name := 'MACD1';
        Color := clLime;
        LineContent := lcTAR;
      end;
      with CreateLine(sMACD2) do
      begin
        Name := 'MACD2';
        Color := clRed;
      end;
      with CreateLine(SubtractSeries(sMACD1, sMACD2)) do
      begin
        Name := 'MACD-Diff';
        Color := clLime;
        LineType := ltBar;
      end;
      with CreateLine(sZero) do
      begin
        Name := '0';
        Color := clSilver;
        LineContent := lcConstant;
      end;
    end.

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

Re: TAR scanner WMA op basis van OBV (On Balance Volume)

Bericht door Eric » wo jun 12, 2019 9:14 pm

Ik heb een TAR indicatorwaarde toegevoegd aan het Impulse system, die 0 is bij een blauwe bar, 1 bij een groene en -1 bij een rode. Hier kun je in de TAR scanner een filtervoorwaarde voor instellen (groter dan 0, kleiner dan 0 of tussen -0.5 en 0.5) en deze kun je dan in de TAR scanner ook combineren met andere indicatoren. Kun je hiermee uit de voeten?

Code: Selecteer alles

{- Filename: Impulse System -}

    {- Filename: Elder's Impulse system -}

    var
      nEMA, nMACD1, nMACD2, nMACD3, i: integer;
      sEMA, sMACD1, sMACD2, sMACDDiff, sEMADir, sMACDDir,
      sGreen, sRed, sBlue, sTAR: TSeries;
    begin
      nEMA := CreateParameterInteger('EMA periode', 1, 999, 22, true);
      nMACD1 := CreateParameterInteger('MACD1 periode', 1, 999, 12, true);
      nMACD2 := CreateParameterInteger('MACD2 periode', 1, 999, 26, true);
      nMACD3 := CreateParameterInteger('MACD3 periode', 1, 999, 9, true);

      with Indicator do
      begin
    { Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
        RequiredBars := 5*MaxInt(nEMA, nMACD2+nMACD3);
        NewBand := false;
      end;

      sEMA := MA(Close, maExponential, nEMA);
      sMACD1 := MACD(Close, nMACD1, nMACD2);
      sMACD2 := MA(sMACD1, maExponential, nMACD3);
      sMACDDiff := SubtractSeries(sMACD1, sMACD2);
      sEMADir := Momentum(sEMA, 1);
      sMACDDir := Momentum(sMACDDiff, 1);

      sGreen := CreateSeries(BarCount);
      sRed := CreateSeries(BarCount);
      sBlue := CreateSeries(BarCount);
      sTAR := FillSeries(CreateSeries(BarCount), 0);

      for i:=MaxInt(FirstValidIndex(sEMADir), FirstValidIndex(sMACDDir)) to BarCount-1 do
      begin
        if (sEMADir[i] > 0) and (sMACDDir[i] > 0) then
        begin
          SetParentBarColor(i, clLime);
          sTAR[i] := 1;
        end else
        if (sEMADir[i] < 0) and (sMACDDir[i] < 0) then
        begin
          SetParentBarColor(i, clRed);
          sTAR[i] := -1;
        end else
        begin
          SetParentBarColor(i, clAqua);
          sTAR[i] := 0;
        end;
      end;
      
      with CreateLine(sTAR) do
      begin
        Visible := false;
        LineContent := lcTAR;
      end;
    end.
---
Eric

Plaats reactie