Help adding a Pivot Range to following code:

Questions about MultiCharts and user contributed studies.
olobay
Posts: 43
Joined: 28 Dec 2011
Has thanked: 15 times

Help adding a Pivot Range to following code:

Postby olobay » 17 Sep 2012

Hi,

I am hoping that somebody will be able to help me. I would like to add a range around the Pivot in the code below. The math for that range is (yesterday's high + yesterday's low) /2. Then you subtract that from the pivot value (high+low+close)/3 and it gives you a value. Then you add that value to the pivot and you have an upper range. Then you subtract that value from the pivot to get the lower range. So the new study will plot exactly the same as the code below but will also plot 2 additional horizontal lines forming a pivot range.

Thanks.

Code: Select all

[LegacyColorValue = true];

{based on intraday data (is sometimes a little different than daily data, so won't match exact)}
{idea is that it will change each day @ "NewDayTM", to reflect the next days numbers.}
{..check the open/close values to verify the day it's showing. It seems to work}
{always posting 1 bar behind, since must be NO on "update value intra-bar"}

{The indicator has an input called PivotType. Use 3 or 4 as PivotType and you should get the Settlement Price,
since when PivotType = 3 or 4, the CloseD function is used. The CloseD will return the settlement price. }

input: PivotType(0),
   BarsBack(60),
   ShowClose(1),
   ShowOpen(1),
   ShowHalfPivots(1),
   ShowLevel(0),
   DaysBack(1),
   NewDayTM(1510),
   RoundLevels(false),
   DecPlaces(2),
   SupResType(0);
   
var: theday(0);
var: Maxcnt(11);
array:
   TL[12](-1),Val[12](-1),
   Color[12](6),Label[12]("L"),FTextID[12](-1), TLabel[12](" ");

var: cnt(0),sdate(0),stime(0),fPivot(0),twOpen(0),theRange(0);

if lastbaronchart then begin

if time >= NewDayTM then theday = 0  else theday = 1;
theday = theday + DaysBack-1;
if theday <= 0 then begin
   theday = 0;
   twOpen = 0;
end else twopen = theday-1;  {make sure this weeks open isn't <0}

{store weekly Open and Close that we care about}
Val[10] = CloseD(theday);
if PivotType >0 and PivotType <4 then Val[11] = OpenD(twopen) else Val[11] = OpenD(theday);

{calculate central pivot based on pivot type}{not sure how usefull some of these might be}
if      PivotType = 1 then fPivot = (HighD(theday) + LowD(theday) + Val[11]) /3
else if PivotType = 2 then fPivot = (HighD(theday) + LowD(theday) + Val[11] + Val[11]) /4
else if PivotType = 3 then fPivot = (HighD(theday) + LowD(theday) + Val[10] + Val[11]) /4
else if PivotType = 4 then fPivot = (HighD(theday) + LowD(theday) + Val[10] + Val[11]) /4
else fPivot = (HighD(theday) + LowD(theday) + Val[10]) /3; {default standard Pivot}

if SupResType = 1 then begin {seems like there is always a little different way to do these}
   theRange = (HighD(theday) - LowD(theday))/2;
   VAl[1] = fPivot;
   VAl[2] = fPivot + theRange; {R1}
   VAl[3] = fPivot - theRange; {S1}
   
   VAl[4] = VAl[2] + theRange; {R2}
   VAl[5] = VAl[3] - theRange; {S2}
   
   VAl[6] = VAl[4] + theRange; {R3}
   VAl[7] = VAl[5] - theRange; {S3}
   VAl[8] = VAl[6] + theRange; {R4}
   VAl[9] = VAl[7] - theRange; {S4}
end
else begin
   VAl[1] = fPivot;
   VAl[2] = fPivot + fPivot - LowD(theday); {R1}
   VAl[3] = fPivot + fPivot - HighD(theday); {S1}
   
   VAl[4] = fPivot + VAl[2] - VAl[3]; {R2}
   VAl[5] = fPivot - VAl[2] + VAl[3]; {S2}
   
   VAl[6] = fPivot + VAl[4] - VAl[3]; {R3}
   VAl[7] = fPivot - VAl[4] + VAl[3]; {S3}
   VAl[8] = fPivot + VAl[4] - VAl[5]; {R4}
   VAl[9] = fPivot - VAl[4] + VAl[5]; {S4}
end;

if RoundLevels then begin
   for cnt = 1 to 11 begin
      val[cnt] = roundInst(val[cnt]);
   end;
end;

Color[1] = Yellow;
Color[2] = Darkred;
Color[3] = Darkgreen;
Color[4] = Darkred;
Color[5] = Darkgreen;
Color[6] = Darkred;
Color[7] = Darkgreen;
Color[8] = Darkred;
Color[9] = Darkgreen;
Color[10] = Yellow;
Color[11] = DarkBrown;

TLabel[1] = "Pivot - ";
TLabel[2] = "R1 - ";
TLabel[3] = "S1 - ";
TLabel[4] = "R2 - ";
TLabel[5] = "S2 - ";
TLabel[6] = "R3 - ";
TLabel[7] = "S3 - ";
TLabel[8] = "R4 - ";
TLabel[9] = "S4 - ";
TLabel[10] = "Close - ";
TLabel[11] = "Open - ";
   

sdate = Date[BarsBack];
stime = Time[BarsBack];


for cnt= 1 to Maxcnt begin
   if cnt < 10 or (ShowClose <> 0 and cnt = 10) or (ShowOpen <> 0 and cnt = 11) then begin
      if TL[cnt] < 0 then begin {dosn't exist, create new TL}
         TL[cnt] = TL_New (sdate, stime, Val[cnt],
            date, time , Val[cnt]);
         TL_SetColor (TL[cnt], Color[cnt]);
         if cnt >= 10 then TL_SetStyle (TL[cnt], Tool_Dashed)
            else TL_SetStyle (TL[cnt], Tool_Dashed);
      end;
      if TL_Exist(TL[cnt]) then begin {exist}
         TL_SetEnd (TL[cnt], date, time , Val[cnt]);
         TL_SetBegin (TL[cnt], sdate, stime, Val[cnt]); {reset TL}
      end;
   
      {do text stuff}
      if FTextID[cnt] < 0 then begin  {is new}
         FTextID[cnt] = Text_New(sdate, stime, Val[cnt], "zzz");
         Text_SetStyle(FTextID[cnt], 1, 2);
         Text_SetColor(FTextID[cnt], Color[cnt]);
      end;
      if FTextID[cnt] >= 0 then begin  {already exists}
         Text_SetLocation(FTextID[cnt], sdate, stime, Val[cnt]);
         Text_SetString(FTextID[cnt],TLabel[cnt] + NumToStr(Val[cnt], DecPlaces) + " " );
      end;
   end; {count < 6, etc.}
end; {cnt}

Array: HalfTL[9](-1),HalfVal[9](0),HTextID[9](-1);

if ShowHalfPivots <> 0 then begin
   HalfVal[1] = ((Val[4] - Val[2])/2) + Val[2];
   HalfVal[2] = ((Val[2] - Val[1])/2) + Val[1];
   HalfVal[3] = ((Val[1] - Val[3])/2) + Val[3];
   HalfVal[4] = ((Val[3] - Val[5])/2) + Val[5]; {s1-s2}
   HalfVal[5] = ((Val[4] - Val[6])/2) + Val[6];
   HalfVal[6] = ((Val[5] - Val[7])/2) + Val[7]; {s2-s3}
   HalfVal[7] = ((Val[6] - Val[8])/2) + Val[8];
   HalfVal[8] = ((Val[7] - Val[9])/2) + Val[9]; {s3-s4}

   if RoundLevels then begin
      for cnt = 1 to 8 begin
         HalfVal[cnt] = roundInst(HalfVal[cnt]);
      end;
   end;

   for cnt= 1 to 8 begin
      if HalfTL[cnt] < 0 then begin {dosn't exist, create new TL}
         HalfTL[cnt] = TL_New (sdate, stime, HalfVal[cnt],
            date, time , HalfVal[cnt]);
         TL_SetColor (HalfTL[cnt], DarkGray);
         TL_SetStyle (HalfTL[cnt], Tool_Dashed);
      end;
      if TL_Exist(HalfTL[cnt]) then begin {exist}
         TL_SetEnd (HalfTL[cnt], date, time , HalfVal[cnt]);
         TL_SetBegin (HalfTL[cnt], sdate, stime, HalfVal[cnt]); {reset TL}
      end;
      
      {do text stuff}
      if HTextID[cnt] < 0 then begin  {is new}
         HTextID[cnt] = Text_New(sdate, stime, HalfVal[cnt], "zzz");
         Text_SetStyle(HTextID[cnt], 1, 2);
         Text_SetColor(HTextID[cnt], DarkGray);
      end;
      if HTextID[cnt] >= 0 then begin  {already exists}
         Text_SetLocation(HTextID[cnt], sdate, stime, HalfVal[cnt]);
         Text_SetString(HTextID[cnt], NumToStr(HalfVal[cnt], DecPlaces) + " " );
      end;
   end; {cnt}
end; {ShowHalfPivots}

end; {last bar}

if ShowLevel > 0 and ShowLevel <= 4 then begin
   noplot(2);
   noplot(3);
   if ShowLevel = 1 then begin
      Plot2[-1](Val[2] + .5,"h");
      Plot3[-1](Val[3] - .5,"l");
   end
   else if ShowLevel = 2 then begin
      Plot2[-1](Val[4] + .5,"h");
      Plot3[-1](Val[5] - .5,"l");
   end
   else if ShowLevel = 3 then begin
      Plot2[-1](Val[6] + .5,"h");
      Plot3[-1](Val[7] - .5,"l");
   end
   else if ShowLevel = 4 then begin
      Plot2[-1](Val[8] + .5,"h");
      Plot3[-1](Val[9] - .5,"l");
   end;

end;

User avatar
Dave Masalov
Posts: 1712
Joined: 16 Apr 2010
Has thanked: 51 times
Been thanked: 485 times

Re: Help adding a Pivot Range to following code:

Postby Dave Masalov » 20 Sep 2012

Hello olobay,

If you are interested in custom programming services, please send detailed specifications of your project to support@multicharts.com


Return to “MultiCharts”