Pivot Points (Intraday)

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Goede morgen Eric, we zijn er uit :D en dank voor alle moeite wederom, fijne dag OT

Voor de liefhebbers:

De strategy van Adam Milton betreft de Moving Average Bounce strategy/theorie die ieder kan vinden op www.thebalance.com. Deze strategie kan je vrij eenvoudig omzetten naar een Pivot Point Bounce strategie, waarvan ik er wel meer van heb gezien op het world wide web. Succes!
Eric
Berichten: 3672
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Mooi! Dank voor de toelichting, de website werkt niet helemaal lekker bij mij maar dit is de relevante pagina: https://www.thebalancemoney.com/moving- ... nce-system

---
Eric
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Beste Eric,

Ik heb het een en ander opgeschoond bij mijn indicatoren. Ik ga nu alléén nog uit van het volgende script, zie onder de tekst. Het betreft de weergave van de Maand Pivot Point. Ik wil het graag wijzigen.

Op bijlage nummer 1 van Agnico-Eagle Mines zie je de 7 lijnen van de Pivot Points staan. Vanaf 02-02-2026 tot en met 20-03-2026 staan conform het huidige script groene en rode pijlen bij diverse koersdagen. Ik vermoed dat het script uit gaat van de close van een koersdag.

De bedoeling is echter dat er een signaal staat bij de koersdagen, waarin de koers één van de 7 lijnen heeft geraakt. Het betekent dat het script niet uit moet gaan van de open, hoog, laag of de close, maar uitsluitend een signaal laat zien, wanneer de koers gedurende de koersdag één van de lijnen heeft geraakt. Een dergelijke wil ik scannen nadat de beurs is gesloten. Dat is voor mij het allerbelangrijkste om de Pivot Bounce Strategy te kunnen analyseren en uit te kunnen voeren.

Wanneer het script zodanig wordt afgesteld, zie bijlage 2, zie je dat er een heleboel extra signalen zijn geweest. Ik kan dan bij het gewijzigde script bijvoorbeeld scannen op de S1. Wanneer de koers gedurende de handelsdag de S1 heeft geraakt, wil ik nadat de beurs gesloten is, een scan uitvoeren om alle S1-kandidaten uit een lijst van 700 aandelen naar voren te halen. Dat geldt natuurlijk ook voor alle andere lijnen, waardoor ik slechts 7 keren scan. Het voordeel is ook dat het eventueel long en short gaan tegelijkertijd wordt weergegeven. Ik stel daarom ook voor om rondjes te gebruiken en geen pijltjes, want we hoeven niet uit te gaan van de open, hoog, laag en close. Wat denk je er van? Mogelijk?

Aanvullend 1: De cirkeltjes geven aan dat de koers één van de lijnen niet heeft geraakt, waardoor er geen pijltje bij hoort te staan.

Aanvullend 2: Graag in het script de benoeming van de lijnen weergeven als R3, R2, R1, Pivot Point, S1, S2 en S3.

Ik hoop dat ik het duidelijk heb weergegeven, alsmede ook op de bijlage 1 en 2.

Fijne zondag en tot maandag, groet OT.


Code: Selecteer alles

{- Filename: Pivot Points Month - Day Signals -}

    function DTtoWeek(DT: TDateTime): integer;
    begin
      while DayOfWeek(DT) <> 2 do DT := DT-1;  // bepaal laatste maandag
      Result := trunc(DT);
    end;

    function DTtoMonth(DT: TDateTime): integer;
    var
      Y, M, D: integer;
    begin
      DecodeDate(DT, Y, M, D);
      Result := Y*12+M;
    end;

    var
      i, LastPeriod, NewPeriod, StartPeriod, PeriodType: integer;
      PivotPP, PivotR1, PivotR2, PivotR3, PivotS1, PivotS2, PivotS3: TSeries;
      LastHigh, LastLow, LastClose, Avg: real;
      XPP, XR1, XR2, XR3, XS1, XS2, XS3: TLineCrossings;
    begin
      PeriodType := CreateParameterSelect('Type', 'Week'#9'Maand', 1, false);

    { Indicator eigenschappen }
      with Indicator do
      begin
        ShortName := 'Pivot points';
        RequiredBars := 100;
        NewBand := false;
        ScaleRange := srCommon;
        SignalView := svShowInMain;
      end;

      LastPeriod := -1;
      PivotPP := CreateSeries(BarCount);
      PivotR1 := CreateSeries(BarCount);
      PivotR2 := CreateSeries(BarCount);
      PivotR3 := CreateSeries(BarCount);
      PivotS1 := CreateSeries(BarCount);
      PivotS2 := CreateSeries(BarCount);
      PivotS3 := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        case PeriodType of
          0: NewPeriod := DTtoWeek(DateTime[BarCount-1]);
          else NewPeriod := DTtoMonth(DateTime[BarCount-1]);
        end;

        StartPeriod := NewPeriod - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotPP[i] := PivotPP[i-1];
            PivotR1[i] := PivotR1[i-1];
            PivotR2[i] := PivotR2[i-1];
            PivotR3[i] := PivotR3[i-1];
            PivotS1[i] := PivotS1[i-1];
            PivotS2[i] := PivotS2[i-1];
            PivotS3[i] := PivotS3[i-1];
          end;

          case PeriodType of
            0: NewPeriod := DTtoWeek(DateTime[i]);
            else NewPeriod := DTtoMonth(DateTime[i]);
          end;
          if NewPeriod <> LastPeriod then
          begin
            if LastPeriod > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;

              PivotPP[i] := Avg;
              PivotR1[i] := 2*Avg - LastLow;
              PivotR2[i] := Avg + LastHigh - LastLow;
              PivotR3[i] := LastHigh + 2*(Avg - LastLow);
              PivotS1[i] := 2*Avg - LastHigh;
              PivotS2[i] := Avg - LastHigh + LastLow;
              PivotS3[i] := LastLow - 2*(LastHigh - Avg);
            end;
            LastPeriod := NewPeriod;
            LastHigh := High[i];
            LastLow := Low[i];
            LastClose := Close[i];
          end else
          begin
            LastHigh := Max(LastHigh, High[i]);
            LastLow := Min(LastLow, Low[i]);
            LastClose := Close[i];
          end;
        end;
      end;

      XPP := Crossings(Close, PivotPP);
      XR1 := Crossings(Close, PivotR1);
      XR2 := Crossings(Close, PivotR2);
      XR3 := Crossings(Close, PivotR3);
      XS1 := Crossings(Close, PivotS1);
      XS2 := Crossings(Close, PivotS2);
      XS3 := Crossings(Close, PivotS3);

      for i:=0 to BarCount-1 do
      begin
        if (XPP[i] = lc1Over2) or (XR1[i] = lc1Over2) or (XR2[i] = lc1Over2) or (XR3[i] = lc1Over2) or
           (XS1[i] = lc1Over2) or (XS2[i] = lc1Over2) or (XS3[i] = lc1Over2) then
             Signals[i] := sgEnterLong;
        if (XPP[i] = lc2Over1) or (XR1[i] = lc2Over1) or (XR2[i] = lc2Over1) or (XR3[i] = lc2Over1) or
           (XS1[i] = lc2Over1) or (XS2[i] = lc2Over1) or (XS3[i] = lc2Over1) then
             Signals[i] := sgEnterShort;
      end;

      with CreateLine(PivotPP) do
      begin
        Name := 'PP';
        Color := clAqua;
        Width := 2;
      end;
      with CreateLine(PivotR1) do
      begin
        Name := 'R1';
        Color := clRed;
      end;
      with CreateLine(PivotS1) do
      begin
        Name := 'S1';
        Color := clLime;
      end;
      with CreateLine(PivotR2) do
      begin
        Name := 'R2';
        Color := clRed;
      end;
      with CreateLine(PivotS2) do
      begin
        Name := 'S2';
        Color := clLime;
      end;
      with CreateLine(PivotR3) do
      begin
        Name := 'R3';
        Color := clRed;
      end;
      with CreateLine(PivotS3) do
      begin
        Name := 'S3';
        Color := clLime;
      end;
end.
Bijlagen
Bijlage 1.GIF
Agnico huidig
Agnico huidig
Eric
Berichten: 3672
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Ik kom hier op uit:

Code: Selecteer alles

{- Filename: Pivot Points Month - Day Signals -}

    function DTtoWeek(DT: TDateTime): integer;
    begin
      while DayOfWeek(DT) <> 2 do DT := DT-1;  // bepaal laatste maandag
      Result := trunc(DT);
    end;

    function DTtoMonth(DT: TDateTime): integer;
    var
      Y, M, D: integer;
    begin
      DecodeDate(DT, Y, M, D);
      Result := Y*12+M;
    end;

    var
      i, LastPeriod, NewPeriod, StartPeriod, PeriodType, SignalMode: integer;
      PivotPP, PivotR1, PivotR2, PivotR3, PivotS1, PivotS2, PivotS3, sCheck: TSeries;
      LastHigh, LastLow, LastClose, Avg: real;
    begin
      PeriodType := CreateParameterSelect('Type', 'Week'#9'Maand', 1, false);
      SignalMode := CreateParameterSelect('Signaal bij raken',
        'Geen signalen'#9'R3'#9'R2'#9'R1'#9'PP'#9'S1'#9'S2'#9'S3', 0, false);

    { Indicator eigenschappen }
      with Indicator do
      begin
        RequiredBars := 100;
        NewBand := false;
        ScaleRange := srCommon;
        SignalView := svShowInMain;
      end;

      LastPeriod := -1;
      PivotPP := CreateSeries(BarCount);
      PivotR1 := CreateSeries(BarCount);
      PivotR2 := CreateSeries(BarCount);
      PivotR3 := CreateSeries(BarCount);
      PivotS1 := CreateSeries(BarCount);
      PivotS2 := CreateSeries(BarCount);
      PivotS3 := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        case PeriodType of
          0: NewPeriod := DTtoWeek(DateTime[BarCount-1]);
          else NewPeriod := DTtoMonth(DateTime[BarCount-1]);
        end;

        StartPeriod := NewPeriod - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotPP[i] := PivotPP[i-1];
            PivotR1[i] := PivotR1[i-1];
            PivotR2[i] := PivotR2[i-1];
            PivotR3[i] := PivotR3[i-1];
            PivotS1[i] := PivotS1[i-1];
            PivotS2[i] := PivotS2[i-1];
            PivotS3[i] := PivotS3[i-1];
          end;

          case PeriodType of
            0: NewPeriod := DTtoWeek(DateTime[i]);
            else NewPeriod := DTtoMonth(DateTime[i]);
          end;
          if NewPeriod <> LastPeriod then
          begin
            if LastPeriod > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;

              PivotPP[i] := Avg;
              PivotR1[i] := 2*Avg - LastLow;
              PivotR2[i] := Avg + LastHigh - LastLow;
              PivotR3[i] := LastHigh + 2*(Avg - LastLow);
              PivotS1[i] := 2*Avg - LastHigh;
              PivotS2[i] := Avg - LastHigh + LastLow;
              PivotS3[i] := LastLow - 2*(LastHigh - Avg);
            end;
            LastPeriod := NewPeriod;
            LastHigh := High[i];
            LastLow := Low[i];
            LastClose := Close[i];
          end else
          begin
            LastHigh := Max(LastHigh, High[i]);
            LastLow := Min(LastLow, Low[i]);
            LastClose := Close[i];
          end;
        end;
      end;

      case SignalMode of
        1: sCheck := PivotR3;
        2: sCheck := PivotR2;
        3: sCheck := PivotR1;
        4: sCheck := PivotPP;
        5: sCheck := PivotS1;
        6: sCheck := PivotS2;
        7: sCheck := PivotS3;
        else sCheck := CreateSeries(BarCount);
      end;
      for i:=FirstValidIndex(sCheck) to BarCount-1 do
      begin
        if (sCheck[i] >= Low[i]) and (sCheck[i] <= High[i]) then Mark(i);
      end;

      with CreateLine(PivotPP) do
      begin
        Name := 'PP';
        Color := clAqua;
        Width := 2;
      end;
      with CreateLine(PivotR1) do
      begin
        Name := 'R1';
        Color := clRed;
      end;
      with CreateLine(PivotS1) do
      begin
        Name := 'S1';
        Color := clLime;
      end;
      with CreateLine(PivotR2) do
      begin
        Name := 'R2';
        Color := clRed;
      end;
      with CreateLine(PivotS2) do
      begin
        Name := 'S2';
        Color := clLime;
      end;
      with CreateLine(PivotR3) do
      begin
        Name := 'R3';
        Color := clRed;
      end;
      with CreateLine(PivotS3) do
      begin
        Name := 'S3';
        Color := clLime;
      end;
end.
---
Eric
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Eric, dank, het ziet er geweldig uit en ook dank voor de pré-market data. Het lijkt weg te zijn, maar maandag weet ik het zeker. Groet OT.
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Beste Eric,

Kan het stukje tekst '(Maand, Geen Signalen)' weggehaald worden?
PP Month.png
Het betreft het onderstaande script!

Groet OT

Code: Selecteer alles

{- Filename: Pivot Points Month - Day Signals -}

    function DTtoWeek(DT: TDateTime): integer;
    begin
      while DayOfWeek(DT) <> 2 do DT := DT-1;  // bepaal laatste maandag
      Result := trunc(DT);
    end;

    function DTtoMonth(DT: TDateTime): integer;
    var
      Y, M, D: integer;
    begin
      DecodeDate(DT, Y, M, D);
      Result := Y*12+M;
    end;

    var
      i, LastPeriod, NewPeriod, StartPeriod, PeriodType, SignalMode: integer;
      PivotPP, PivotR1, PivotR2, PivotR3, PivotS1, PivotS2, PivotS3, sCheck: TSeries;
      LastHigh, LastLow, LastClose, Avg: real;
    begin
      PeriodType := CreateParameterSelect('Type', 'Week'#9'Maand', 1, false);
      SignalMode := CreateParameterSelect('Signaal bij raken',
        'Geen signalen'#9'R3'#9'R2'#9'R1'#9'PP'#9'S1'#9'S2'#9'S3', 0, false);

    { Indicator eigenschappen }
      with Indicator do
      begin
        RequiredBars := 100;
        NewBand := false;
        ScaleRange := srCommon;
        SignalView := svShowInMain;
      end;

      LastPeriod := -1;
      PivotPP := CreateSeries(BarCount);
      PivotR1 := CreateSeries(BarCount);
      PivotR2 := CreateSeries(BarCount);
      PivotR3 := CreateSeries(BarCount);
      PivotS1 := CreateSeries(BarCount);
      PivotS2 := CreateSeries(BarCount);
      PivotS3 := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        case PeriodType of
          0: NewPeriod := DTtoWeek(DateTime[BarCount-1]);
          else NewPeriod := DTtoMonth(DateTime[BarCount-1]);
        end;

        StartPeriod := NewPeriod - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotPP[i] := PivotPP[i-1];
            PivotR1[i] := PivotR1[i-1];
            PivotR2[i] := PivotR2[i-1];
            PivotR3[i] := PivotR3[i-1];
            PivotS1[i] := PivotS1[i-1];
            PivotS2[i] := PivotS2[i-1];
            PivotS3[i] := PivotS3[i-1];
          end;

          case PeriodType of
            0: NewPeriod := DTtoWeek(DateTime[i]);
            else NewPeriod := DTtoMonth(DateTime[i]);
          end;
          if NewPeriod <> LastPeriod then
          begin
            if LastPeriod > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;

              PivotPP[i] := Avg;
              PivotR1[i] := 2*Avg - LastLow;
              PivotR2[i] := Avg + LastHigh - LastLow;
              PivotR3[i] := LastHigh + 2*(Avg - LastLow);
              PivotS1[i] := 2*Avg - LastHigh;
              PivotS2[i] := Avg - LastHigh + LastLow;
              PivotS3[i] := LastLow - 2*(LastHigh - Avg);
            end;
            LastPeriod := NewPeriod;
            LastHigh := High[i];
            LastLow := Low[i];
            LastClose := Close[i];
          end else
          begin
            LastHigh := Max(LastHigh, High[i]);
            LastLow := Min(LastLow, Low[i]);
            LastClose := Close[i];
          end;
        end;
      end;

      case SignalMode of
        1: sCheck := PivotR3;
        2: sCheck := PivotR2;
        3: sCheck := PivotR1;
        4: sCheck := PivotPP;
        5: sCheck := PivotS1;
        6: sCheck := PivotS2;
        7: sCheck := PivotS3;
        else sCheck := CreateSeries(BarCount);
      end;
      for i:=FirstValidIndex(sCheck) to BarCount-1 do
      begin
        if (sCheck[i] >= Low[i]) and (sCheck[i] <= High[i]) then Mark(i);
      end;

      with CreateLine(PivotPP) do
      begin
        Name := 'PP';
        Color := clAqua;
        Width := 2;
      end;
      with CreateLine(PivotR1) do
      begin
        Name := 'R1';
        Color := clRed;
      end;
      with CreateLine(PivotS1) do
      begin
        Name := 'S1';
        Color := clLime;
      end;
      with CreateLine(PivotR2) do
      begin
        Name := 'R2';
        Color := clRed;
      end;
      with CreateLine(PivotS2) do
      begin
        Name := 'S2';
        Color := clLime;
      end;
      with CreateLine(PivotR3) do
      begin
        Name := 'R3';
        Color := clRed;
      end;
      with CreateLine(PivotS3) do
      begin
        Name := 'S3';
        Color := clLime;
      end;
end.
Eric
Berichten: 3672
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Zeker:

Code: Selecteer alles

{- Filename: Pivot Points Month - Day Signals -}

function DTtoWeek(DT: TDateTime): integer;
begin
  while DayOfWeek(DT) <> 2 do DT := DT-1;  // bepaal laatste maandag
  Result := trunc(DT);
end;

function DTtoMonth(DT: TDateTime): integer;
var
  Y, M, D: integer;
begin
  DecodeDate(DT, Y, M, D);
  Result := Y*12+M;
end;

var
  i, LastPeriod, NewPeriod, StartPeriod, PeriodType, SignalMode: integer;
  PivotPP, PivotR1, PivotR2, PivotR3, PivotS1, PivotS2, PivotS3, sCheck: TSeries;
  LastHigh, LastLow, LastClose, Avg: real;
begin
  PeriodType := CreateParameterSelect('Type', 'Week'#9'Maand', 1, false);
  SignalMode := CreateParameterSelect('Signaal bij raken',
    'Geen signalen'#9'R3'#9'R2'#9'R1'#9'PP'#9'S1'#9'S2'#9'S3', 0, false);

{ Indicator eigenschappen }
  with Indicator do
  begin
    RequiredBars := 100;
    NewBand := false;
    ScaleRange := srCommon;
    SignalView := svShowInMain;
    HiddenParams := true;
  end;

  LastPeriod := -1;
  PivotPP := CreateSeries(BarCount);
  PivotR1 := CreateSeries(BarCount);
  PivotR2 := CreateSeries(BarCount);
  PivotR3 := CreateSeries(BarCount);
  PivotS1 := CreateSeries(BarCount);
  PivotS2 := CreateSeries(BarCount);
  PivotS3 := CreateSeries(BarCount);

  if BarCount > 0 then
  begin
    case PeriodType of
      0: NewPeriod := DTtoWeek(DateTime[BarCount-1]);
      else NewPeriod := DTtoMonth(DateTime[BarCount-1]);
    end;

    StartPeriod := NewPeriod - 14;

    for i:=0 to BarCount-1 do
    begin
      if i > 0 then
      begin
        PivotPP[i] := PivotPP[i-1];
        PivotR1[i] := PivotR1[i-1];
        PivotR2[i] := PivotR2[i-1];
        PivotR3[i] := PivotR3[i-1];
        PivotS1[i] := PivotS1[i-1];
        PivotS2[i] := PivotS2[i-1];
        PivotS3[i] := PivotS3[i-1];
      end;

      case PeriodType of
        0: NewPeriod := DTtoWeek(DateTime[i]);
        else NewPeriod := DTtoMonth(DateTime[i]);
      end;
      if NewPeriod <> LastPeriod then
      begin
        if LastPeriod > 0 then
        begin
          Avg := (LastHigh + LastLow + LastClose) / 3;

          PivotPP[i] := Avg;
          PivotR1[i] := 2*Avg - LastLow;
          PivotR2[i] := Avg + LastHigh - LastLow;
          PivotR3[i] := LastHigh + 2*(Avg - LastLow);
          PivotS1[i] := 2*Avg - LastHigh;
          PivotS2[i] := Avg - LastHigh + LastLow;
          PivotS3[i] := LastLow - 2*(LastHigh - Avg);
        end;
        LastPeriod := NewPeriod;
        LastHigh := High[i];
        LastLow := Low[i];
        LastClose := Close[i];
      end else
      begin
        LastHigh := Max(LastHigh, High[i]);
        LastLow := Min(LastLow, Low[i]);
        LastClose := Close[i];
      end;
    end;
  end;

  case SignalMode of
    1: sCheck := PivotR3;
    2: sCheck := PivotR2;
    3: sCheck := PivotR1;
    4: sCheck := PivotPP;
    5: sCheck := PivotS1;
    6: sCheck := PivotS2;
    7: sCheck := PivotS3;
    else sCheck := CreateSeries(BarCount);
  end;
  for i:=FirstValidIndex(sCheck) to BarCount-1 do
  begin
    if (sCheck[i] >= Low[i]) and (sCheck[i] <= High[i]) then Mark(i);
  end;

  with CreateLine(PivotPP) do
  begin
    Name := 'PP';
    Color := clAqua;
    Width := 2;
  end;
  with CreateLine(PivotR1) do
  begin
    Name := 'R1';
    Color := clRed;
  end;
  with CreateLine(PivotS1) do
  begin
    Name := 'S1';
    Color := clLime;
  end;
  with CreateLine(PivotR2) do
  begin
    Name := 'R2';
    Color := clRed;
  end;
  with CreateLine(PivotS2) do
  begin
    Name := 'S2';
    Color := clLime;
  end;
  with CreateLine(PivotR3) do
  begin
    Name := 'R3';
    Color := clRed;
  end;
  with CreateLine(PivotS3) do
  begin
    Name := 'S3';
    Color := clLime;
  end;
end.
---
Eric
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Goede morgen Eric, hartelijk dank en een fijne dag, groet OT
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Hallo Eric,
Hoe plaats ik de bovenstaande indicator - maand pivot points - op een grafiek van bijvoorbeeld 5 minuten, waarbij de waarden van de - maand pivot points - op de 5 minuten grafiek komen te staan?
Groet OT
Eric
Berichten: 3672
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

De lijnen worden zichtbaar als je gaat uitzoomen.

Dat komt omdat Wall Street niet gelijk alle beschikbare koersen inleest in een grafiek maar alleen het aantal benodigde koersen voor die periode, plus het aantal dat de indicatoren nodig hebben om de eerste indicatorwaarde te berekenen. Anders zou het werken met grafieken een stuk trager worden dan nodig.

Nu weet een 30-daags MA wel hoeveel koersen hij nodig heeft om een eerste waarde te berekenen (inderdaad, 30) maar voor maand pivots in een intraday grafiek ligt dat wat lastiger. Door uit te zoomen komt hij vanzelf in beeld trouwens, maar deze versie vraagt wat meer koersen op zodat het vanzelf gaat:

Code: Selecteer alles

{- Filename: Pivot Points Month - Day Signals -}

function DTtoWeek(DT: TDateTime): integer;
begin
  while DayOfWeek(DT) <> 2 do DT := DT-1;  // bepaal laatste maandag
  Result := trunc(DT);
end;

function DTtoMonth(DT: TDateTime): integer;
var
  Y, M, D: integer;
begin
  DecodeDate(DT, Y, M, D);
  Result := Y*12+M;
end;

var
  i, LastPeriod, NewPeriod, StartPeriod, PeriodType, SignalMode: integer;
  PivotPP, PivotR1, PivotR2, PivotR3, PivotS1, PivotS2, PivotS3, sCheck: TSeries;
  LastHigh, LastLow, LastClose, Avg: real;
begin
  PeriodType := CreateParameterSelect('Type', 'Week'#9'Maand', 1, false);
  SignalMode := CreateParameterSelect('Signaal bij raken',
    'Geen signalen'#9'R3'#9'R2'#9'R1'#9'PP'#9'S1'#9'S2'#9'S3', 0, false);

{ Indicator eigenschappen }
  with Indicator do
  begin
    RequiredBars := 4000;
    NewBand := false;
    ScaleRange := srCommon;
    SignalView := svShowInMain;
    HiddenParams := true;
  end;

  LastPeriod := -1;
  PivotPP := CreateSeries(BarCount);
  PivotR1 := CreateSeries(BarCount);
  PivotR2 := CreateSeries(BarCount);
  PivotR3 := CreateSeries(BarCount);
  PivotS1 := CreateSeries(BarCount);
  PivotS2 := CreateSeries(BarCount);
  PivotS3 := CreateSeries(BarCount);

  if BarCount > 0 then
  begin
    case PeriodType of
      0: NewPeriod := DTtoWeek(DateTime[BarCount-1]);
      else NewPeriod := DTtoMonth(DateTime[BarCount-1]);
    end;

    StartPeriod := NewPeriod - 14;

    for i:=0 to BarCount-1 do
    begin
      if i > 0 then
      begin
        PivotPP[i] := PivotPP[i-1];
        PivotR1[i] := PivotR1[i-1];
        PivotR2[i] := PivotR2[i-1];
        PivotR3[i] := PivotR3[i-1];
        PivotS1[i] := PivotS1[i-1];
        PivotS2[i] := PivotS2[i-1];
        PivotS3[i] := PivotS3[i-1];
      end;

      case PeriodType of
        0: NewPeriod := DTtoWeek(DateTime[i]);
        else NewPeriod := DTtoMonth(DateTime[i]);
      end;
      if NewPeriod <> LastPeriod then
      begin
        if LastPeriod > 0 then
        begin
          Avg := (LastHigh + LastLow + LastClose) / 3;

          PivotPP[i] := Avg;
          PivotR1[i] := 2*Avg - LastLow;
          PivotR2[i] := Avg + LastHigh - LastLow;
          PivotR3[i] := LastHigh + 2*(Avg - LastLow);
          PivotS1[i] := 2*Avg - LastHigh;
          PivotS2[i] := Avg - LastHigh + LastLow;
          PivotS3[i] := LastLow - 2*(LastHigh - Avg);
        end;
        LastPeriod := NewPeriod;
        LastHigh := High[i];
        LastLow := Low[i];
        LastClose := Close[i];
      end else
      begin
        LastHigh := Max(LastHigh, High[i]);
        LastLow := Min(LastLow, Low[i]);
        LastClose := Close[i];
      end;
    end;
  end;

  case SignalMode of
    1: sCheck := PivotR3;
    2: sCheck := PivotR2;
    3: sCheck := PivotR1;
    4: sCheck := PivotPP;
    5: sCheck := PivotS1;
    6: sCheck := PivotS2;
    7: sCheck := PivotS3;
    else sCheck := CreateSeries(BarCount);
  end;
  for i:=FirstValidIndex(sCheck) to BarCount-1 do
  begin
    if (sCheck[i] >= Low[i]) and (sCheck[i] <= High[i]) then Mark(i);
  end;

  with CreateLine(PivotPP) do
  begin
    Name := 'PP';
    Color := clAqua;
    Width := 2;
  end;
  with CreateLine(PivotR1) do
  begin
    Name := 'R1';
    Color := clRed;
  end;
  with CreateLine(PivotS1) do
  begin
    Name := 'S1';
    Color := clLime;
  end;
  with CreateLine(PivotR2) do
  begin
    Name := 'R2';
    Color := clRed;
  end;
  with CreateLine(PivotS2) do
  begin
    Name := 'S2';
    Color := clLime;
  end;
  with CreateLine(PivotR3) do
  begin
    Name := 'R3';
    Color := clRed;
  end;
  with CreateLine(PivotS3) do
  begin
    Name := 'S3';
    Color := clLime;
  end;
end.
---
Eric
Optiontrader
Berichten: 389
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Hallo Eric, ik heb de laatste versie op een 5 MBar scherm geplaatst, dus maand op 5 MBar. De maandwaarden komen bijna exact overeen, maar net niet helemaal. Ik laat het even zo, want andere dingen vergen mijn aandacht.
Bedankt en fijne en goede dag, OT.
Plaats reactie