[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 intrabar"}
{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 + DaysBack1;
if theday <= 0 then begin
theday = 0;
twOpen = 0;
end else twopen = theday1; {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]; {s1s2}
HalfVal[5] = ((Val[4]  Val[6])/2) + Val[6];
HalfVal[6] = ((Val[5]  Val[7])/2) + Val[7]; {s2s3}
HalfVal[7] = ((Val[6]  Val[8])/2) + Val[8];
HalfVal[8] = ((Val[7]  Val[9])/2) + Val[9]; {s3s4}
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;
