Pivot Points (Intraday)

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

Pivot Points (Intraday)

Bericht door Optiontrader »

Hallo Eric,

In het onderstaande script wordt de R3 berekend > R2 + YestHigh - YestLow

De S3 > S2 - YestHigh + YestLow

Ik wil graag een kleine verandering >

De R3 wordt dan > YestHigh + 2 * (Pivot Point - YestLow)

De S3 wordt dan > YestLow - 2 * (YestHigh - Pivot Point

Groet OT

Code: Selecteer alles

{- Filename: Pivot Points (Daily for Intraday) -}

const
  clLightGreen = $A0FFA0;
  clLightRed = $A0A0FF;

procedure PivotTrendline(X0: TDateTime; Y0: real; X1: TDateTime; Y1: real; AWidth: integer; AColor: TColor);
begin
  with CreateTrendline(X0, Y0, X1, Y0) do
  begin
    ExtendLeft                                                := false;
    ExtendRight                                               := true;
    Width                                                     := AWidth;
    Color                                                     := AColor;
  end;
end;

procedure PivotLine(X0: TSeries; AWidth: integer; AColor: TColor; ALineType: TLineType);
begin
  with Createline(X0) do
  begin
    Width                                                     := AWidth;
    Color                                                     := AColor;
    LineType                                                  := ALineType;
  end;
end;

var
    PlotS1,PlotS2,PlotS3,PlotR1,PlotR2,PlotR3,PlotPP,TradeDay : TSeries;
    PlotPRMidLine,PlotR12MidLine,PlotR23MidLine               : TSeries;
    PlotPSMidLine,PlotS12MidLine,PlotS23MidLine               : TSeries;
    TodaysHigh,YestHigh,TodaysLow,YestLow,YestClose           : real;
    i,Method,Day, Mon, Yr                                     : integer;
    ShowMidLine,OneDay,Automatic                              : Boolean;
    StartDate,S1,S2,S3,R1,R2,R3,PP                            : real;
    HighYesterday,LowYesterday,CloseYesterday                 : real;
    PRMidLine,R12MidLine,R23MidLine                           : real;
    PSMidLine,S12MidLine,S23MidLine                           : real;
    LastDay: integer;

begin
  ShowMidLine                                              := CreateParameterBoolean ('Show MidLines', false, false);
  OneDay                                                   := CreateParameterBoolean ('Show One Day', true, false);
  Automatic                                                := CreateParameterBoolean ('Pivot points automatic', true, false);
  Method                                                   := CreateParameterInteger ('Method', 1, 3, 1, true);
  HighYesterday                                            := CreateParameterReal    ('Fill in High', 0, 10000, 0, true);
  LowYesterday                                             := CreateParameterReal    ('Fill in Low', 0, 10000, 0, true);
  CloseYesterday                                           := CreateParameterReal    ('Fill in Close', 0, 10000, 0, true);

  with Indicator do
  begin
    ShortName                                                 :='Auto-Multi Pivot System';
    RequiredBars                                              := 100;
    NewBand                                                   := false;
    ScaleRange                                                := srCommon;
  end;

  PlotS1                                                    := CreateSeries(BarCount);
  PlotS2                                                    := CreateSeries(BarCount);
  PlotS3                                                    := CreateSeries(BarCount);
  PlotR1                                                    := CreateSeries(BarCount);
  PlotR2                                                    := CreateSeries(BarCount);
  PlotR3                                                    := CreateSeries(BarCount);
  PlotPP                                                    := CreateSeries(BarCount);
  PlotPRMidLine                                             := CreateSeries(BarCount);
  PlotR12MidLine                                            := CreateSeries(BarCount);
  PlotR23MidLine                                            := CreateSeries(BarCount);
  PlotPSMidLine                                             := CreateSeries(BarCount);
  PlotS12MidLine                                            := CreateSeries(BarCount);
  PlotS23MidLine                                            := CreateSeries(BarCount);
  TradeDay                                                  := CreateSeries(BarCount);

  if BarCount > 0 then LastDay := trunc(DateTime[BarCount-1]);

  for i:=FirstValidIndex(close)+1 to barcount-1 do
  begin
    DecodeDate(DateTime[i], Yr, Mon, Day);
    TradeDay[i] := Day;

    if (IsValid(TradeDay[i-1])) and (TradeDay[i] <> TradeDay[i-1]) then
    begin
      StartDate                                                 := DateTime[i];
      YestHigh                                                  := TodaysHigh;
      YestLow                                                   := TodaysLow;
      YestClose                                                 := Close[i-1];
      TodaysHigh                                                := High[i];
      TodaysLow                                                 := Low[i];

      if Automatic then
      begin
        if Method=1 then PP := ( YestHigh + YestLow + YestClose )/3;
        if Method=2 then PP := ( YestHigh + YestLow + YestClose+Open[i] )/4;
        if Method=3 then PP := ( YestHigh + YestLow + Open[i] )/3;
      end else
      begin
        OneDay := true;
        PP :=(HighYesterday + LowYesterday + CloseYesterday)/3;
      end;

      R1 := PP * 2 - YestLow;
      R2 := PP + YestHigh - YestLow;
      R3 := R2 + YestHigh - YestLow;
      S1 := PP * 2 - YestHigh;
      S2 := PP - YestHigh + YestLow;
      S3 := S2 - YestHigh + YestLow;

      if ShowMidLine then
      begin
        PRMidLine := (PP+R1)/2;
        R12MidLine := (R1+R2)/2;
        R23MidLine := (R2+R3)/2;
        PSMidLine := (PP+S1)/2;
        S12MidLine := (S1+S2)/2;
        S23MidLine := (S2+S3)/2;
      end;
    end else
    begin
      if High[i] > TodaysHigh then
        TodaysHigh := High[i];
      if Low[i] < TodaysLow then
        TodaysLow := Low[i];
    end;

    if not OneDay or (trunc(DateTime[i]) = LastDay) then
    begin
      PlotPP[i] := PP;
      PlotR1[i] := R1;
      PlotR2[i] := R2;
      PlotR3[i] := R3;
      PlotS1[i] := S1;
      PlotS2[i] := S2;
      PlotS3[i] := S3;

      if ShowMidLine then
      begin
        PlotPRMidLine[i] := PRMidLine;
        PlotR12MidLine[i] := R12MidLine;
        PlotR23MidLine[i] := R23MidLine;
        PlotPSMidLine[i] := PSMidLine;
        PlotS12MidLine[i] := S12MidLine;
        PlotS23MidLine[i] := S23MidLine;
      end;
    end;

    if i = barcount-1 then
    begin
      StartDate := BarPosition[i];
      PivotTrendline(StartDate ,PP, StartDate+1 ,PP ,1 ,clAqua);
      PivotTrendline(StartDate ,R1, StartDate+1 ,R1 ,1 ,clLightRed);
      PivotTrendline(StartDate ,R2, StartDate+1 ,R2 ,1 ,clLightRed);
      PivotTrendline(StartDate ,R3, StartDate+1 ,R3 ,1 ,clLightRed);
      PivotTrendline(StartDate ,S1, StartDate+1 ,S1 ,1 ,clLightGreen);
      PivotTrendline(StartDate ,S2, StartDate+1 ,S2 ,1 ,clLightGreen);
      PivotTrendline(StartDate ,S3, StartDate+1 ,S3 ,1 ,clLightGreen);

      if ShowMidLine then
      begin
        PivotTrendline(StartDate ,PRMidLine , StartDate+1 ,PRMidLine  ,1 ,clSilver);
        PivotTrendline(StartDate ,R12MidLine, StartDate+1 ,R12MidLine ,1 ,clSilver);
        PivotTrendline(StartDate ,R23MidLine, StartDate+1 ,R23MidLine ,1 ,clSilver);
        PivotTrendline(StartDate ,PSMidLine , StartDate+1 ,PSMidLine  ,1 ,clSilver);
        PivotTrendline(StartDate ,S12MidLine, StartDate+1 ,S12MidLine ,1 ,clSilver);
        PivotTrendline(StartDate ,S23MidLine, StartDate+1 ,S23MidLine ,1 ,clSilver);
      end;
    end;
  end;

  PivotLine(PlotR3, 1, clRed, ltBrick);
  PivotLine(PlotR2, 1, clRed, ltBrick);
  PivotLine(PlotR1, 1, clRed, ltBrick);
  PivotLine(PlotPP, 1, clAqua, ltBrick);
  PivotLine(PlotS1, 1, clLime, ltBrick);
  PivotLine(PlotS2, 1, clLime, ltBrick);
  PivotLine(PlotS3, 1, clLime, ltBrick);

  PivotLine(PlotPRMidLine  ,1 ,clWhite ,ltBrick);
  PivotLine(PlotR12MidLine ,1 ,clWhite ,ltBrick);
  PivotLine(PlotR23MidLine ,1 ,clWhite ,ltBrick);
  PivotLine(PlotPSMidLine  ,1 ,clWhite ,ltBrick);
  PivotLine(PlotS12MidLine ,1 ,clWhite ,ltBrick);
  PivotLine(PlotS23MidLine ,1 ,clWhite ,ltBrick);
END.
Eric
Berichten: 3663
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Dat wordt dan:

Code: Selecteer alles

{- Filename: Pivot Points (Daily for Intraday) -}

const
  clLightGreen = $A0FFA0;
  clLightRed = $A0A0FF;

procedure PivotTrendline(X0: TDateTime; Y0: real; X1: TDateTime; Y1: real; AWidth: integer; AColor: TColor);
begin
  with CreateTrendline(X0, Y0, X1, Y0) do
  begin
    ExtendLeft                                                := false;
    ExtendRight                                               := true;
    Width                                                     := AWidth;
    Color                                                     := AColor;
  end;
end;

procedure PivotLine(X0: TSeries; AWidth: integer; AColor: TColor; ALineType: TLineType);
begin
  with Createline(X0) do
  begin
    Width                                                     := AWidth;
    Color                                                     := AColor;
    LineType                                                  := ALineType;
  end;
end;

var
    PlotS1,PlotS2,PlotS3,PlotR1,PlotR2,PlotR3,PlotPP,TradeDay : TSeries;
    PlotPRMidLine,PlotR12MidLine,PlotR23MidLine               : TSeries;
    PlotPSMidLine,PlotS12MidLine,PlotS23MidLine               : TSeries;
    TodaysHigh,YestHigh,TodaysLow,YestLow,YestClose           : real;
    i,Method,Day, Mon, Yr                                     : integer;
    ShowMidLine,OneDay,Automatic                              : Boolean;
    StartDate,S1,S2,S3,R1,R2,R3,PP                            : real;
    HighYesterday,LowYesterday,CloseYesterday                 : real;
    PRMidLine,R12MidLine,R23MidLine                           : real;
    PSMidLine,S12MidLine,S23MidLine                           : real;
    LastDay: integer;

begin
  ShowMidLine                                              := CreateParameterBoolean ('Show MidLines', false, false);
  OneDay                                                   := CreateParameterBoolean ('Show One Day', true, false);
  Automatic                                                := CreateParameterBoolean ('Pivot points automatic', true, false);
  Method                                                   := CreateParameterInteger ('Method', 1, 3, 1, true);
  HighYesterday                                            := CreateParameterReal    ('Fill in High', 0, 10000, 0, true);
  LowYesterday                                             := CreateParameterReal    ('Fill in Low', 0, 10000, 0, true);
  CloseYesterday                                           := CreateParameterReal    ('Fill in Close', 0, 10000, 0, true);

  with Indicator do
  begin
    ShortName                                                 :='Auto-Multi Pivot System';
    RequiredBars                                              := 100;
    NewBand                                                   := false;
    ScaleRange                                                := srCommon;
  end;

  PlotS1                                                    := CreateSeries(BarCount);
  PlotS2                                                    := CreateSeries(BarCount);
  PlotS3                                                    := CreateSeries(BarCount);
  PlotR1                                                    := CreateSeries(BarCount);
  PlotR2                                                    := CreateSeries(BarCount);
  PlotR3                                                    := CreateSeries(BarCount);
  PlotPP                                                    := CreateSeries(BarCount);
  PlotPRMidLine                                             := CreateSeries(BarCount);
  PlotR12MidLine                                            := CreateSeries(BarCount);
  PlotR23MidLine                                            := CreateSeries(BarCount);
  PlotPSMidLine                                             := CreateSeries(BarCount);
  PlotS12MidLine                                            := CreateSeries(BarCount);
  PlotS23MidLine                                            := CreateSeries(BarCount);
  TradeDay                                                  := CreateSeries(BarCount);

  if BarCount > 0 then LastDay := trunc(DateTime[BarCount-1]);

  for i:=FirstValidIndex(close)+1 to barcount-1 do
  begin
    DecodeDate(DateTime[i], Yr, Mon, Day);
    TradeDay[i] := Day;

    if (IsValid(TradeDay[i-1])) and (TradeDay[i] <> TradeDay[i-1]) then
    begin
      StartDate                                                 := DateTime[i];
      YestHigh                                                  := TodaysHigh;
      YestLow                                                   := TodaysLow;
      YestClose                                                 := Close[i-1];
      TodaysHigh                                                := High[i];
      TodaysLow                                                 := Low[i];

      if Automatic then
      begin
        if Method=1 then PP := ( YestHigh + YestLow + YestClose )/3;
        if Method=2 then PP := ( YestHigh + YestLow + YestClose+Open[i] )/4;
        if Method=3 then PP := ( YestHigh + YestLow + Open[i] )/3;
      end else
      begin
        OneDay := true;
        PP :=(HighYesterday + LowYesterday + CloseYesterday)/3;
      end;

      R1 := PP * 2 - YestLow;
      R2 := PP + YestHigh - YestLow;
      R3 := YestHigh + 2 * (PP - YestLow); // R2 + YestHigh - YestLow;
      S1 := PP * 2 - YestHigh;
      S2 := PP - YestHigh + YestLow;
      S3 := YestLow - 2 * (YestHigh - PP); // S2 - YestHigh + YestLow;

      if ShowMidLine then
      begin
        PRMidLine := (PP+R1)/2;
        R12MidLine := (R1+R2)/2;
        R23MidLine := (R2+R3)/2;
        PSMidLine := (PP+S1)/2;
        S12MidLine := (S1+S2)/2;
        S23MidLine := (S2+S3)/2;
      end;
    end else
    begin
      if High[i] > TodaysHigh then
        TodaysHigh := High[i];
      if Low[i] < TodaysLow then
        TodaysLow := Low[i];
    end;

    if not OneDay or (trunc(DateTime[i]) = LastDay) then
    begin
      PlotPP[i] := PP;
      PlotR1[i] := R1;
      PlotR2[i] := R2;
      PlotR3[i] := R3;
      PlotS1[i] := S1;
      PlotS2[i] := S2;
      PlotS3[i] := S3;

      if ShowMidLine then
      begin
        PlotPRMidLine[i] := PRMidLine;
        PlotR12MidLine[i] := R12MidLine;
        PlotR23MidLine[i] := R23MidLine;
        PlotPSMidLine[i] := PSMidLine;
        PlotS12MidLine[i] := S12MidLine;
        PlotS23MidLine[i] := S23MidLine;
      end;
    end;

    if i = barcount-1 then
    begin
      StartDate := BarPosition[i];
      PivotTrendline(StartDate ,PP, StartDate+1 ,PP ,1 ,clAqua);
      PivotTrendline(StartDate ,R1, StartDate+1 ,R1 ,1 ,clLightRed);
      PivotTrendline(StartDate ,R2, StartDate+1 ,R2 ,1 ,clLightRed);
      PivotTrendline(StartDate ,R3, StartDate+1 ,R3 ,1 ,clLightRed);
      PivotTrendline(StartDate ,S1, StartDate+1 ,S1 ,1 ,clLightGreen);
      PivotTrendline(StartDate ,S2, StartDate+1 ,S2 ,1 ,clLightGreen);
      PivotTrendline(StartDate ,S3, StartDate+1 ,S3 ,1 ,clLightGreen);

      if ShowMidLine then
      begin
        PivotTrendline(StartDate ,PRMidLine , StartDate+1 ,PRMidLine  ,1 ,clSilver);
        PivotTrendline(StartDate ,R12MidLine, StartDate+1 ,R12MidLine ,1 ,clSilver);
        PivotTrendline(StartDate ,R23MidLine, StartDate+1 ,R23MidLine ,1 ,clSilver);
        PivotTrendline(StartDate ,PSMidLine , StartDate+1 ,PSMidLine  ,1 ,clSilver);
        PivotTrendline(StartDate ,S12MidLine, StartDate+1 ,S12MidLine ,1 ,clSilver);
        PivotTrendline(StartDate ,S23MidLine, StartDate+1 ,S23MidLine ,1 ,clSilver);
      end;
    end;
  end;

  PivotLine(PlotR3, 1, clRed, ltBrick);
  PivotLine(PlotR2, 1, clRed, ltBrick);
  PivotLine(PlotR1, 1, clRed, ltBrick);
  PivotLine(PlotPP, 1, clAqua, ltBrick);
  PivotLine(PlotS1, 1, clLime, ltBrick);
  PivotLine(PlotS2, 1, clLime, ltBrick);
  PivotLine(PlotS3, 1, clLime, ltBrick);

  PivotLine(PlotPRMidLine  ,1 ,clWhite ,ltBrick);
  PivotLine(PlotR12MidLine ,1 ,clWhite ,ltBrick);
  PivotLine(PlotR23MidLine ,1 ,clWhite ,ltBrick);
  PivotLine(PlotPSMidLine  ,1 ,clWhite ,ltBrick);
  PivotLine(PlotS12MidLine ,1 ,clWhite ,ltBrick);
  PivotLine(PlotS23MidLine ,1 ,clWhite ,ltBrick);
END.
---
Eric
Optiontrader
Berichten: 387
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Hallo Eric,

In aansluiting en mogelijk is er al een script van, wil ik graag de pivot points scannen. Ik wil graag, zie onderstaand script, dat bij het raken van elke lijn het aandeel in de scanlijst wordt geplaatst. M.a.w. bij de SR, S2, S1, Pivot Point, R1, R2 en R3, waarbij ik de 7 mogelijkheden zelf kan instellen.

Het een en ander heeft te maken met het boek van John L. Person, en wel: Candlestick and Pivot Point Trading Triggers.

Voor de liefhebbers en geïnteresseerden: Het boek staat op internet in .pdf formaat en is zonder enige kosten te downloaden en te bestuderen, succes!

groet OT.

Week Pivot Points

Code: Selecteer alles

{- Filename: Pivot Points (Week) -}

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

    var
      i, LastWeek, NewWeek, StartWeek: integer;
      PivotAvg, PivotHigh, PivotLow, PivotR3High, PivotR3Low,
      SuperPivotHigh, SuperPivotLow: TSeries;
      LastHigh, LastLow, LastClose, Avg: real;
    begin
    { Indicator eigenschappen }
      with Indicator do
      begin
        ShortName := 'Pivot points';
        RequiredBars := 2500;
        NewBand := false;
        ScaleRange := srCommon;
      end;

      LastWeek := -1;
      PivotAvg := CreateSeries(BarCount);
      PivotHigh := CreateSeries(BarCount);
      PivotLow := CreateSeries(BarCount);
      PivotR3High := CreateSeries(BarCount);
      PivotR3Low := CreateSeries(BarCount);
      SuperPivotHigh := CreateSeries(BarCount);
      SuperPivotLow := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        NewWeek := DTtoWeek(DateTime[BarCount-1]);
        StartWeek := NewWeek - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotAvg[i] := PivotAvg[i-1];
            PivotHigh[i] := PivotHigh[i-1];
            PivotLow[i] := PivotLow[i-1];
            PivotR3High[i] := PivotR3High[i-1];
            PivotR3Low[i] := PivotR3Low[i-1];
            SuperPivotHigh[i] := SuperPivotHigh[i-1];
            SuperPivotLow[i] := SuperPivotLow[i-1];
          end;
          NewWeek := DTtoWeek(DateTime[i]);
          if NewWeek <> LastWeek then
          begin
            if LastWeek > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;
              PivotAvg[i] := round(100*Avg)/100;
              PivotHigh[i] := round(100*(2 * Avg - LastLow))/100;
              PivotLow[i] := round(100*(2 * Avg - LastHigh))/100;
              PivotR3High[i] := round(100*(LastHigh + 2 * (Avg - LastLow)))/100;
              PivotR3Low[i] := round(100*(LastLow - 2 * (LastHigh - Avg)))/100;
              SuperPivotHigh[i] := round(100*(Avg + LastHigh - LastLow))/100;
              SuperPivotLow[i] := round(100*(Avg - LastHigh + LastLow))/100;
            end;
            LastWeek := NewWeek;
            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;

      Signals := CrossingsToEntrySignals(Crossings(Close, PivotAvg));

      with CreateLine(PivotAvg) do
      begin
        Name := 'Pivot';
        Color := clWhite;
      end;
      with CreateLine(PivotHigh) do
      begin
        Name := 'R1 high';
        Color := clYellow;
      end;
      with CreateLine(PivotLow) do
      begin
        Name := 'R1 low';
        Color := clYellow;
      end;
      with CreateLine(PivotR3High) do
      begin
        Name := 'R3 high';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(PivotR3Low) do
      begin
        Name := 'R3 low';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(SuperPivotHigh) do
      begin
        Name := 'Superpivot high';
        Color := clRed;
      end;
      with CreateLine(SuperPivotLow) do
      begin
        Name := 'Superpivot low';
        Color := clRed;
      end;
end.
Eric
Berichten: 3663
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Deze aangepaste versie geeft een signaal (markering) bij een kruising van de slotkoers met het opgegeven pivot niveau.

Code: Selecteer alles

{- Filename: Pivot Points (Week) -}

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

    var
      i, LastWeek, NewWeek, StartWeek, SignalMode: integer;
      PivotAvg, PivotHigh, PivotLow, PivotR3High, PivotR3Low,
      SuperPivotHigh, SuperPivotLow: TSeries;
      xCrossings: TLineCrossings;
      LastHigh, LastLow, LastClose, Avg: real;
    begin
      SignalMode := CreateParameterSelect('Signaal bij kruising',
        'Geen signalen'#9'Pivot Avg'#9'Pivot High'#9'Pivot Low'#9'SuperPivot High'#9'SuperPivot Low'#9'Pivot R3High'#9'Pivot R3Low', 0, false);
    
    { Indicator eigenschappen }
      with Indicator do
      begin
        ShortName := 'Pivot points';
        RequiredBars := 2500;
        NewBand := false;
        ScaleRange := srCommon;
      end;

      LastWeek := -1;
      PivotAvg := CreateSeries(BarCount);
      PivotHigh := CreateSeries(BarCount);
      PivotLow := CreateSeries(BarCount);
      PivotR3High := CreateSeries(BarCount);
      PivotR3Low := CreateSeries(BarCount);
      SuperPivotHigh := CreateSeries(BarCount);
      SuperPivotLow := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        NewWeek := DTtoWeek(DateTime[BarCount-1]);
        StartWeek := NewWeek - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotAvg[i] := PivotAvg[i-1];
            PivotHigh[i] := PivotHigh[i-1];
            PivotLow[i] := PivotLow[i-1];
            PivotR3High[i] := PivotR3High[i-1];
            PivotR3Low[i] := PivotR3Low[i-1];
            SuperPivotHigh[i] := SuperPivotHigh[i-1];
            SuperPivotLow[i] := SuperPivotLow[i-1];
          end;
          NewWeek := DTtoWeek(DateTime[i]);
          if NewWeek <> LastWeek then
          begin
            if LastWeek > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;
              PivotAvg[i] := round(100*Avg)/100;
              PivotHigh[i] := round(100*(2 * Avg - LastLow))/100;
              PivotLow[i] := round(100*(2 * Avg - LastHigh))/100;
              PivotR3High[i] := round(100*(LastHigh + 2 * (Avg - LastLow)))/100;
              PivotR3Low[i] := round(100*(LastLow - 2 * (LastHigh - Avg)))/100;
              SuperPivotHigh[i] := round(100*(Avg + LastHigh - LastLow))/100;
              SuperPivotLow[i] := round(100*(Avg - LastHigh + LastLow))/100;
            end;
            LastWeek := NewWeek;
            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: xCrossings := Crossings(Close, PivotAvg);
        2: xCrossings := Crossings(Close, PivotHigh);
        3: xCrossings := Crossings(Close, PivotLow);
        4: xCrossings := Crossings(Close, SuperPivotHigh);
        5: xCrossings := Crossings(Close, SuperPivotLow);
        6: xCrossings := Crossings(Close, PivotR3High);
        7: xCrossings := Crossings(Close, PivotR3Low);
        else xCrossings := Crossings(Close, Close); // geen signalen
      end;

      for i:= 0 to BarCount-1 do
      begin
        if xCrossings[i] <> lcNone then
          Signals[i] := sgMark;
      end;
      
      with CreateLine(PivotAvg) do
      begin
        Name := 'Pivot';
        Color := clWhite;
      end;
      with CreateLine(PivotHigh) do
      begin
        Name := 'R1 high';
        Color := clYellow;
      end;
      with CreateLine(PivotLow) do
      begin
        Name := 'R1 low';
        Color := clYellow;
      end;
      with CreateLine(PivotR3High) do
      begin
        Name := 'R3 high';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(PivotR3Low) do
      begin
        Name := 'R3 low';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(SuperPivotHigh) do
      begin
        Name := 'Superpivot high';
        Color := clRed;
      end;
      with CreateLine(SuperPivotLow) do
      begin
        Name := 'Superpivot low';
        Color := clRed;
      end;
end.
---
Eric
Optiontrader
Berichten: 387
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Hallo Eric,

De eerste bijlage is met een kruising, maar ik bedoel juist het aanraken van de pivot.

M.a.w.: De koers loopt bijvoorbeeld van de S1 naar de pivot en raakt de lijn, alsmede bijvoorbeeld van de R1 naar de pivot.

De 'bounce off' heeft te maken met een bounce strategy die door Person is beschreven en anderen.

Bijlage 1 - Am. Airlines en kruising *niet de bedoeling).

Bijlage 2 - Axsome - raken van de pivot*juist wel de bedoeling.

Het gaat uitsluitend om het aanraken van de pivot. Wat de gehele Jap. candle doet, is niet direct belangrijk. Dat is pas belangrijk bij de beoordeling nadat de markten gesloten zijn.

Mogelijk?

Groet OT
Bijlagen
de juiste bedoeling
de juiste bedoeling
Bijlage 1 - Am. Airlines en kruising.GIF
Janus
Berichten: 1523
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Re: Pivot Points (Intraday)

Bericht door Janus »

weggehaald, past niet aan bij het onderwerp
Laatst gewijzigd door Janus op zo mar 15, 2026 11:06 pm, 1 keer totaal gewijzigd.
Vriendelijke groet,
JanS ;)
Eric
Berichten: 3663
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

In dat geval moet je inderdaad zelf de marge instellen waarbinnen jij vindt dat er sprake is van raken. Hierbij de aangepaste versie met weekpivots.

Code: Selecteer alles

{- Filename: Pivot Points (Week) -}

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

    procedure FindTouchSignals(Line: TSeries; Margin: real);
    var
      i: integer;
    begin
      if BarCount = 0 then Exit;
      
      for i:=FirstValidIndex(Line)+1 to BarCount-2 do
      begin
        if (Low[i] > Line[i]) and (Low[i] < Line[i]+Margin) then
          Signals[i] := sgEnterLong
        else
        if (High[i] < Line[i]) and (High[i] > Line[i]-Margin) then
          Signals[i] := sgEnterShort;
      end;
    end;
    
    var
      i, LastWeek, NewWeek, StartWeek, SignalMode: integer;
      PivotAvg, PivotHigh, PivotLow, PivotR3High, PivotR3Low,
      SuperPivotHigh, SuperPivotLow: TSeries;
      xCrossings: TLineCrossings;
      LastHigh, LastLow, LastClose, Avg, nMargin: real;
    begin
      SignalMode := CreateParameterSelect('Signaal bij kruising',
        'Geen signalen'#9'Pivot Avg'#9'Pivot High'#9'Pivot Low'#9'SuperPivot High'#9'SuperPivot Low'#9'Pivot R3High'#9'Pivot R3Low', 0, false);
      nMargin := CreateParameterReal('Marge voor raaksignaal', 0, 99, 0.1, false);
      
    { Indicator eigenschappen }
      with Indicator do
      begin
        ShortName := 'Pivot points';
        RequiredBars := 2500;
        NewBand := false;
        ScaleRange := srCommon;
      end;

      LastWeek := -1;
      PivotAvg := CreateSeries(BarCount);
      PivotHigh := CreateSeries(BarCount);
      PivotLow := CreateSeries(BarCount);
      PivotR3High := CreateSeries(BarCount);
      PivotR3Low := CreateSeries(BarCount);
      SuperPivotHigh := CreateSeries(BarCount);
      SuperPivotLow := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        NewWeek := DTtoWeek(DateTime[BarCount-1]);
        StartWeek := NewWeek - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotAvg[i] := PivotAvg[i-1];
            PivotHigh[i] := PivotHigh[i-1];
            PivotLow[i] := PivotLow[i-1];
            PivotR3High[i] := PivotR3High[i-1];
            PivotR3Low[i] := PivotR3Low[i-1];
            SuperPivotHigh[i] := SuperPivotHigh[i-1];
            SuperPivotLow[i] := SuperPivotLow[i-1];
          end;
          NewWeek := DTtoWeek(DateTime[i]);
          if NewWeek <> LastWeek then
          begin
            if LastWeek > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;
              PivotAvg[i] := round(100*Avg)/100;
              PivotHigh[i] := round(100*(2 * Avg - LastLow))/100;
              PivotLow[i] := round(100*(2 * Avg - LastHigh))/100;
              PivotR3High[i] := round(100*(LastHigh + 2 * (Avg - LastLow)))/100;
              PivotR3Low[i] := round(100*(LastLow - 2 * (LastHigh - Avg)))/100;
              SuperPivotHigh[i] := round(100*(Avg + LastHigh - LastLow))/100;
              SuperPivotLow[i] := round(100*(Avg - LastHigh + LastLow))/100;
            end;
            LastWeek := NewWeek;
            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: FindTouchSignals(PivotAvg, nMargin);
        2: FindTouchSignals(PivotHigh, nMargin);
        3: FindTouchSignals(PivotLow, nMargin);
        4: FindTouchSignals(SuperPivotHigh, nMargin);
        5: FindTouchSignals(SuperPivotLow, nMargin);
        6: FindTouchSignals(PivotR3High, nMargin);
        7: FindTouchSignals(PivotR3Low, nMargin);
      end;

      with CreateLine(PivotAvg) do
      begin
        Name := 'Pivot';
        Color := clWhite;
      end;
      with CreateLine(PivotHigh) do
      begin
        Name := 'R1 high';
        Color := clYellow;
      end;
      with CreateLine(PivotLow) do
      begin
        Name := 'R1 low';
        Color := clYellow;
      end;
      with CreateLine(PivotR3High) do
      begin
        Name := 'R3 high';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(PivotR3Low) do
      begin
        Name := 'R3 low';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(SuperPivotHigh) do
      begin
        Name := 'Superpivot high';
        Color := clRed;
      end;
      with CreateLine(SuperPivotLow) do
      begin
        Name := 'Superpivot low';
        Color := clRed;
      end;
end.
---
Eric
Optiontrader
Berichten: 387
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Hallo Eric,

M.b.t.:

Filename: Pivot Points (Daily for Intraday) Touch

Ik heb bijv een lijst van 100 USA-aandelen (Nasdaq 100), waarop ik wil scannen of één of meerdere aandelen één van de lijnen van de R3 t/m S3 raken.

Wat is de bedoeling?

Ik scan bijvoorbeeld alleen op de Pivot Point. Van de 100 aandelen in de Nasdaq 100 zullen er een paar zijn die de PP raken. Deze aandelen komen dan naar voren in de scanner. De overigen niet, want die raken de PP niet.

Ik herhaal de scan met een scan op bijvoorbeeld de S3. Idem, een aantal komen naar voren en anderen weer niet.

Ik zie echter in het nieuwe script niet de mogelijkheid. Vergis ik mij ergens in?

Groet OT
Optiontrader
Berichten: 387
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Okay Eric,

Ik denk dat dit het goede script goede is. Ik wil graag bij het scannen van deze indicator slechts een signaal krijgen bij het raken van Pivot Lijn. De andere lijnen zijn nu niet de bedoeling meer.

Voorbeeld SP500 met signalen *cirkel).

Groet OT

Code: Selecteer alles

{- Filename: Pivot Points (Week en Signal) -}

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

    var
      i, LastWeek, NewWeek, StartWeek, SignalMode: integer;
      PivotAvg, PivotHigh, PivotLow, PivotR3High, PivotR3Low,
      SuperPivotHigh, SuperPivotLow: TSeries;
      xCrossings: TLineCrossings;
      LastHigh, LastLow, LastClose, Avg: real;
    begin
      SignalMode := CreateParameterSelect('Signaal bij kruising',
        'Geen signalen'#9'Pivot Avg'#9'Pivot High'#9'Pivot Low'#9'SuperPivot High'#9'SuperPivot Low'#9'Pivot R3High'#9'Pivot R3Low', 0, false);

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

      LastWeek := -1;
      PivotAvg := CreateSeries(BarCount);
      PivotHigh := CreateSeries(BarCount);
      PivotLow := CreateSeries(BarCount);
      PivotR3High := CreateSeries(BarCount);
      PivotR3Low := CreateSeries(BarCount);
      SuperPivotHigh := CreateSeries(BarCount);
      SuperPivotLow := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        NewWeek := DTtoWeek(DateTime[BarCount-1]);
        StartWeek := NewWeek - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotAvg[i] := PivotAvg[i-1];
            PivotHigh[i] := PivotHigh[i-1];
            PivotLow[i] := PivotLow[i-1];
            PivotR3High[i] := PivotR3High[i-1];
            PivotR3Low[i] := PivotR3Low[i-1];
            SuperPivotHigh[i] := SuperPivotHigh[i-1];
            SuperPivotLow[i] := SuperPivotLow[i-1];
          end;
          NewWeek := DTtoWeek(DateTime[i]);
          if NewWeek <> LastWeek then
          begin
            if LastWeek > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;
              PivotAvg[i] := round(100*Avg)/100;
              PivotHigh[i] := round(100*(2 * Avg - LastLow))/100;
              PivotLow[i] := round(100*(2 * Avg - LastHigh))/100;
              PivotR3High[i] := round(100*(LastHigh + 2 * (Avg - LastLow)))/100;
              PivotR3Low[i] := round(100*(LastLow - 2 * (LastHigh - Avg)))/100;
              SuperPivotHigh[i] := round(100*(Avg + LastHigh - LastLow))/100;
              SuperPivotLow[i] := round(100*(Avg - LastHigh + LastLow))/100;
            end;
            LastWeek := NewWeek;
            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: xCrossings := Crossings(Close, PivotAvg);
        2: xCrossings := Crossings(Close, PivotHigh);
        3: xCrossings := Crossings(Close, PivotLow);
        4: xCrossings := Crossings(Close, SuperPivotHigh);
        5: xCrossings := Crossings(Close, SuperPivotLow);
        6: xCrossings := Crossings(Close, PivotR3High);
        7: xCrossings := Crossings(Close, PivotR3Low);
        else xCrossings := Crossings(Close, Close); // geen signalen
      end;

      for i:= 0 to BarCount-1 do
      begin
        if xCrossings[i] <> lcNone then
          Signals[i] := sgMark;
      end;

      with CreateLine(PivotAvg) do
      begin
        Name := 'Pivot';
        Color := clWhite;
      end;
      with CreateLine(PivotHigh) do
      begin
        Name := 'R1 high';
        Color := clYellow;
      end;
      with CreateLine(PivotLow) do
      begin
        Name := 'R1 low';
        Color := clYellow;
      end;
      with CreateLine(PivotR3High) do
      begin
        Name := 'R3 high';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(PivotR3Low) do
      begin
        Name := 'R3 low';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(SuperPivotHigh) do
      begin
        Name := 'Superpivot high';
        Color := clRed;
      end;
      with CreateLine(SuperPivotLow) do
      begin
        Name := 'Superpivot low';
        Color := clRed;
      end;
end.
Bijlagen
SP500.png
Eric
Berichten: 3663
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Ik ben er nog niet helemaal uit wat jouw definitie van "raken" van de Pivot lijn is ben ik bang.

In je laatste plaatje meen ik het te interpreteren als "de pivot lijn waarde ligt tussen de laag en hoog van de bar". Maar dit komt niet overeen met je eerdere voorbeelden. Kun je dit nog even toelichten, en tevens bevestigen of het inderdaad om weekpivots gaat die je in een daggrafiek maakt?

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

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Aero.GIF
Hallo Eric,

Ik wil graag de week pivot gebruiken, omdat de lijnen van de week pivot constant blijven gedurende de week. De dagkoersen fluctueren iedere dag, waardoor zij nabeurs een positie kunnen hebben gehad die tussen de R3 en S3 kan liggen. Het 'kunnen' liggen houdt in dat soms de koersen boven de R3 of onder de S3 liggen, maar dat is niet van belang. Dat is zeer incidenteel overigens.

Op het moment dat de dagkoers van een aandeel de week pivot raakt gedurende de dag, is het de bedoeling dat ik nabeurs en met de scanner een lijstje krijg van aandelen die de middelste pivot lijn hebben geraakt. Of ze een andere lijn hebben geraakt, is niet van belang.

Deze lijst geeft dan aan welke aandelen gedurende de handelsdag de week pivot hebben geraakt, terwijl ik dan pas en nabeurs de scanner gebruik voor de NYSE. Ik kan dan een beoordeling maken of het interessant is om de volgende dag in het aandeel te handelen.

Een voorbeeld is de jap. candle van afgelopen vrijdag van AeroVironment. Wanneer ik dan scan op bijv zaterdag, wil ik graag een signaal via de scanner krijgen.

Ik hoop dat ik het duidelijk voor je heb weergeven. Eigenlijk kan je het zo zien als bij een EMA. De koers raakt de EMA wel of niet.

Tot morgen, groet OT
Eric
Berichten: 3663
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Ik heb nog geen sluitend antwoord op mijn vraag wat je nu precies bedoelt met "raken".

Je geeft dit keer als voorbeeld een EMA, maar een EMA geeft een signaal als de koerslijn van slotkoers naar slotkoers de EMA lijn kruist. Die indicator staat hierboven: https://www.ta-script.com/forum/viewtopic.php?p=14485, maar dat was niet wat je bedoelde.

Dus nogmaals, wat bedoel je met raken? Als ik de blauwe bolletjes volg in je vorige post kom ik op "de pivot lijn waarde ligt tussen de laag en hoog van de koersbar", maar is dit ook wat je bedoelt?

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

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Sorry, ik stuurde de verkeerde afbeelding, hier de juiste : Alexandria
Alexandria.GIF
Optiontrader
Berichten: 387
Lid geworden op: ma jan 01, 2007 9:41 pm

Re: Pivot Points (Intraday)

Bericht door Optiontrader »

Bij Alexandria zie je dat ergens op de beursdag de middelste pivot lijn (lichtblauw) is geraakt. De waarde van de hoog en de laag ligt er inderdaad tussen. Dat is juist. Groet OT.

Ander voorbeeld: Alphabet
Bijlagen
Alphabet.GIF
Eric
Berichten: 3663
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Re: Pivot Points (Intraday)

Bericht door Eric »

Zo dan:

Code: Selecteer alles

{- Filename: Pivot Points (Week) -}

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

    var
      i, LastWeek, NewWeek, StartWeek, SignalMode: integer;
      PivotAvg, PivotHigh, PivotLow, PivotR3High, PivotR3Low,
      SuperPivotHigh, SuperPivotLow, sCheck: TSeries;
      LastHigh, LastLow, LastClose, Avg: real;
    begin
      SignalMode := CreateParameterSelect('Signaal bij raken',
        'Geen signalen'#9'Pivot Avg'#9'Pivot High'#9'Pivot Low'#9'SuperPivot High'#9'SuperPivot Low'#9'Pivot R3High'#9'Pivot R3Low', 1, false);

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

      LastWeek := -1;
      PivotAvg := CreateSeries(BarCount);
      PivotHigh := CreateSeries(BarCount);
      PivotLow := CreateSeries(BarCount);
      PivotR3High := CreateSeries(BarCount);
      PivotR3Low := CreateSeries(BarCount);
      SuperPivotHigh := CreateSeries(BarCount);
      SuperPivotLow := CreateSeries(BarCount);

      if BarCount > 0 then
      begin
        NewWeek := DTtoWeek(DateTime[BarCount-1]);
        StartWeek := NewWeek - 14;

        for i:=0 to BarCount-1 do
        begin
          if i > 0 then
          begin
            PivotAvg[i] := PivotAvg[i-1];
            PivotHigh[i] := PivotHigh[i-1];
            PivotLow[i] := PivotLow[i-1];
            PivotR3High[i] := PivotR3High[i-1];
            PivotR3Low[i] := PivotR3Low[i-1];
            SuperPivotHigh[i] := SuperPivotHigh[i-1];
            SuperPivotLow[i] := SuperPivotLow[i-1];
          end;
          NewWeek := DTtoWeek(DateTime[i]);
          if NewWeek <> LastWeek then
          begin
            if LastWeek > 0 then
            begin
              Avg := (LastHigh + LastLow + LastClose) / 3;
              PivotAvg[i] := round(100*Avg)/100;
              PivotHigh[i] := round(100*(2 * Avg - LastLow))/100;
              PivotLow[i] := round(100*(2 * Avg - LastHigh))/100;
              PivotR3High[i] := round(100*(LastHigh + 2 * (Avg - LastLow)))/100;
              PivotR3Low[i] := round(100*(LastLow - 2 * (LastHigh - Avg)))/100;
              SuperPivotHigh[i] := round(100*(Avg + LastHigh - LastLow))/100;
              SuperPivotLow[i] := round(100*(Avg - LastHigh + LastLow))/100;
            end;
            LastWeek := NewWeek;
            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
        2: sCheck := PivotHigh;
        3: sCheck := PivotLow;
        4: sCheck := SuperPivotHigh;
        5: sCheck := SuperPivotLow;
        6: sCheck := PivotR3High;
        7: sCheck := PivotR3Low;
        else sCheck := PivotAvg;
      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(PivotAvg) do
      begin
        Name := 'Pivot';
        Color := clWhite;
      end;
      with CreateLine(PivotHigh) do
      begin
        Name := 'R1 high';
        Color := clYellow;
      end;
      with CreateLine(PivotLow) do
      begin
        Name := 'R1 low';
        Color := clYellow;
      end;
      with CreateLine(PivotR3High) do
      begin
        Name := 'R3 high';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(PivotR3Low) do
      begin
        Name := 'R3 low';
        Color := RGB(100, 200, 255);
      end;
      with CreateLine(SuperPivotHigh) do
      begin
        Name := 'Superpivot high';
        Color := clRed;
      end;
      with CreateLine(SuperPivotLow) do
      begin
        Name := 'Superpivot low';
        Color := clRed;
      end;
end.
---
Eric
Plaats reactie