# ICT Killzones & Pivots \[TFO]","ICT Killzones & Pivots \[TFO] // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © tradeforopp //@version=6 indicator("ICT Killzones & Pivots \[TFO]","ICT Killzones & Pivots \[TFO]",true,max\_labels\_count=500,max\_lines\_count=500,max\_boxes\_count=500) // ---------------------------------------- Constant Functions -------------------------------------------------- get\_line\_type(\_style) => switch\_style "Solid"=>line.style\_solid "Dotted"=>line.style\_dotted "Dashed"=>line.style\_dashed get\_size(x) => switchx "Auto"=>size.auto "Tiny"=>size.tiny "Small"=>size.small "Normal"=>size.normal "Large"=>size.large "Huge"=>size.huge get\_table\_pos(pos) => switchpos "Bottom Center"=>position.bottom\_center "Bottom Left"=>position.bottom\_left "Bottom Right"=>position.bottom\_right "Middle Center"=>position.middle\_center "Middle Left"=>position.middle\_left "Middle Right"=>position.middle\_right "Top Center"=>position.top\_center "Top Left"=>position.top\_left "Top Right"=>position.top\_right // ---------------------------------------- Constant Functions -------------------------------------------------- // ---------------------------------------- Inputs -------------------------------------------------- varg\_SETTINGS="Settings" max\_days=input.int(3,"Session Drawing Limit",1,tooltip="Only this many drawings will be kept on the chart, for each selected drawing type (killzone boxes, pivot lines, open lines, etc.)",group=g\_SETTINGS) tf\_limit=input.timeframe("30","Timeframe Limit",tooltip="Drawings will not appear on timeframes greater than or equal to this",group=g\_SETTINGS) gmt\_tz=input.string('America/New\_York',"Timezone",options= \['America/New\_York','GMT-12','GMT-11','GMT-10','GMT-9','GMT-8','GMT-7','GMT-6','GMT-5','GMT-4','GMT-3','GMT-2','GMT-1','GMT+0','GMT+1','GMT+2','GMT+3','GMT+4','GMT+5','GMT+6','GMT+7','GMT+8','GMT+9','GMT+10','GMT+11','GMT+12','GMT+13','GMT+14'],tooltip="Note GMT is not adjusted to reflect Daylight Saving Time changes",group=g\_SETTINGS) lbl\_size=get\_size(input.string('Normal',"Label Size",options= \['Auto','Tiny','Small','Normal','Large','Huge'],tooltip="The size of all labels",group=g\_SETTINGS)) txt\_color=input.color(color.black,"Text Color",tooltip="The color of all label and table text",group=g\_SETTINGS) use\_cutoff=input.bool(false,"Drawing Cutoff Time",inline="CO",tooltip="When enabled, all pivots and open price lines will stop extending at this time",group=g\_SETTINGS) cutoff=input.session("1800-1801","",inline="CO",group=g\_SETTINGS) vartf\_limit\_is\_equal\_or\_more\_chart\_tf=timeframe.in\_seconds('') <=timeframe.in\_seconds(tf\_limit) varg\_KZ="Killzones" show\_kz=input.bool(true,"Show Killzone Boxes",inline="KZ",group=g\_KZ) show\_kz\_text=input.bool(true,"Display Text",inline="KZ",group=g\_KZ) use\_asia=input.bool(true,"",inline="ASIA",group=g\_KZ) as\_txt=input.string("Asia","",inline="ASIA",group=g\_KZ) asia=input.session("2000-0000","",inline="ASIA",group=g\_KZ) as\_color=input.color(color.blue,"",inline="ASIA",group=g\_KZ) use\_london=input.bool(true,"",inline="LONDON",group=g\_KZ) lo\_txt=input.string("London","",inline="LONDON",group=g\_KZ) london=input.session("0200-0500","",inline="LONDON",group=g\_KZ) lo\_color=input.color(color.red,"",inline="LONDON",group=g\_KZ) use\_nyam=input.bool(true,"",inline="NYAM",group=g\_KZ) na\_txt=input.string("NY AM","",inline="NYAM",group=g\_KZ) nyam=input.session("0930-1100","",inline="NYAM",group=g\_KZ) na\_color=input.color(#089981,"",inline="NYAM",group=g\_KZ) use\_nylu=input.bool(true,"",inline="NYLU",group=g\_KZ) nl\_txt=input.string("NY Lunch","",inline="NYLU",group=g\_KZ) nylu=input.session("1200-1300","",inline="NYLU",group=g\_KZ) nl\_color=input.color(color.yellow,"",inline="NYLU",group=g\_KZ) use\_nypm=input.bool(true,"",inline="NYPM",group=g\_KZ) np\_txt=input.string("NY PM","",inline="NYPM",group=g\_KZ) nypm=input.session("1330-1600","",inline="NYPM",group=g\_KZ) np\_color=input.color(color.purple,"",inline="NYPM",group=g\_KZ) box\_transparency=input.int(70,"Box Transparency",0,100,group=g\_KZ) text\_transparency=input.int(50,"Text Transparency",0,100,group=g\_KZ) varg\_LABELS="Killzone Pivots" show\_pivots=input.bool(true,"Show Pivots",inline="PV",group=g\_LABELS) use\_alerts=input.bool(true,"Alert Broken Pivots",inline="PV",tooltip="The desired killzones must be enabled at the time that an alert is created, along with the show pivots option, in order for alerts to work",group=g\_LABELS) show\_midpoints=input.bool(false,"Show Pivot Midpoints",inline="mp",group=g\_LABELS) stop\_midpoints=input.bool(true,"Stop Once Mitigated",inline="mp",group=g\_LABELS) show\_labels=input.bool(true,"Show Pivot Labels",inline="LB",tooltip="Show labels denoting each killzone's high and low. Optionally choose to show the price of each level. Right side will show labels on the right-hand side of the chart until they are reached",group=g\_LABELS) label\_price=input.bool(false,"Display Price",inline="LB",group=g\_LABELS) label\_right=input.bool(false,"Right Side",inline="LB",group=g\_LABELS) ext\_pivots=input.string("Until Mitigated","Extend Pivots...",options= \['Until Mitigated','Past Mitigation'],group=g\_LABELS) ext\_which=input.string("Most Recent","...From Which Sessions",options= \['Most Recent','All'],group=g\_LABELS) ash\_str=input.string("AS.H","Killzone 1 Labels",inline="L\_AS",group=g\_LABELS) asl\_str=input.string("AS.L","",inline="L\_AS",group=g\_LABELS) loh\_str=input.string("LO.H","Killzone 2 Labels",inline="L\_LO",group=g\_LABELS) lol\_str=input.string("LO.L","",inline="L\_LO",group=g\_LABELS) nah\_str=input.string("NYAM.H","Killzone 3 Labels",inline="L\_NA",group=g\_LABELS) nal\_str=input.string("NYAM.L","",inline="L\_NA",group=g\_LABELS) nlh\_str=input.string("NYL.H","Killzone 4 Labels",inline="L\_NL",group=g\_LABELS) nll\_str=input.string("NYL.L","",inline="L\_NL",group=g\_LABELS) nph\_str=input.string("NYPM.H","Killzone 5 Labels",inline="L\_NP",group=g\_LABELS) npl\_str=input.string("NYPM.L","",inline="L\_NP",group=g\_LABELS) kzp\_style=get\_line\_type(input.string(defval='Solid',title="Pivot Style",options= \['Solid','Dotted','Dashed'],inline="KZP",group=g\_LABELS)) kzp\_width=input.int(1,"",inline="KZP",group=g\_LABELS) kzm\_style=get\_line\_type(input.string(defval='Dotted',title="Midpoint Style",options= \['Solid','Dotted','Dashed'],inline="KZM",group=g\_LABELS)) kzm\_width=input.int(1,"",inline="KZM",group=g\_LABELS) varg\_RNG="Killzone Range" show\_range=input.bool(false,"Show Killzone Range",tooltip="Show the most recent ranges of each selected killzone, from high to low",group=g\_RNG) show\_range\_avg=input.bool(true,"Show Average",tooltip="Show the average range of each selected killzone",group=g\_RNG) range\_avg=input.int(5,"Average Length",0,tooltip="This many previous sessions will be used to calculate the average. If there isn't enough data on the current chart, it will use as many sessions as possible",group=g\_RNG) range\_pos=get\_table\_pos(input.string('Top Right',"Table Position",options= \['Bottom Center','Bottom Left','Bottom Right','Middle Center','Middle Left','Middle Right','Top Center','Top Left','Top Right'],group=g\_RNG)) range\_size=get\_size(input.string('Normal',"Table Size",options= \['Auto','Tiny','Small','Normal','Large','Huge'],group=g\_RNG)) varg\_DWM="Day - Week - Month" sep\_unlimited=input.bool(false,"Unlimited",tooltip="Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used",group=g\_DWM) alert\_HL=input.bool(false,"Alert High/Low Break",tooltip="Alert when any selected highs and lows are traded through. The desired timeframe's high/low option must be enabled at the time that an alert is created",group=g\_DWM) show\_d\_open=input.bool(false,"D Open",inline="DO",group=g\_DWM) dhl=input.bool(false,"High/Low",inline="DO",tooltip="",group=g\_DWM) ds=input.bool(false,"Separators",inline="DO",tooltip="Mark where a new day begins",group=g\_DWM) d\_color=input.color(color.blue,"",inline="DO",group=g\_DWM) show\_w\_open=input.bool(false,"W Open",inline="WO",group=g\_DWM) whl=input.bool(false,"High/Low",inline="WO",tooltip="",group=g\_DWM) ws=input.bool(false,"Separators",inline="WO",tooltip="Mark where a new week begins",group=g\_DWM) w\_color=input.color(#089981,"",inline="WO",group=g\_DWM) show\_m\_open=input.bool(false,"M Open",inline="MO",group=g\_DWM) mhl=input.bool(false,"High/Low",inline="MO",tooltip="",group=g\_DWM) ms=input.bool(false,"Separators",inline="MO",tooltip="Mark where a new month begins",group=g\_DWM) m\_color=input.color(color.red,"",inline="MO",group=g\_DWM) htf\_style=get\_line\_type(input.string(defval='Solid',title="Style",options= \['Solid','Dotted','Dashed'],inline="D0",group=g\_DWM)) htf\_width=input.int(1,"",inline="D0",group=g\_DWM) dow\_labels=input.bool(true,"Day of Week Labels",inline="DOW",group=g\_DWM) dow\_yloc=input.string('Bottom',"",options= \['Top','Bottom'],inline="DOW",group=g\_DWM) dow\_xloc=input.string('Midnight',"",options= \['Midnight','Midday'],inline="DOW",group=g\_DWM) dow\_hide\_wknd=input.bool(true,"Hide Weekend Labels",group=g\_DWM) varg\_OPEN="Opening Prices" open\_unlimited=input.bool(false,"Unlimited",tooltip="Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used",group=g\_OPEN) use\_h1=input.bool(false,"",inline="H1",group=g\_OPEN) h1\_text=input.string("True Day Open","",inline="H1",group=g\_OPEN) h1=input.session("0000-0001","",inline="H1",group=g\_OPEN) h1\_color=input.color(color.black,"",inline="H1",group=g\_OPEN) use\_h2=input.bool(false,"",inline="H2",group=g\_OPEN) h2\_text=input.string("06:00","",inline="H2",group=g\_OPEN) h2=input.session("0600-0601","",inline="H2",group=g\_OPEN) h2\_color=input.color(color.black,"",inline="H2",group=g\_OPEN) use\_h3=input.bool(false,"",inline="H3",group=g\_OPEN) h3\_text=input.string("10:00","",inline="H3",group=g\_OPEN) h3=input.session("1000-1001","",inline="H3",group=g\_OPEN) h3\_color=input.color(color.black,"",inline="H3",group=g\_OPEN) use\_h4=input.bool(false,"",inline="H4",group=g\_OPEN) h4\_text=input.string("14:00","",inline="H4",group=g\_OPEN) h4=input.session("1400-1401","",inline="H4",group=g\_OPEN) h4\_color=input.color(color.black,"",inline="H4",group=g\_OPEN) use\_h5=input.bool(false,"",inline="H5",group=g\_OPEN) h5\_text=input.string("00:00","",inline="H5",group=g\_OPEN) h5=input.session("0000-0001","",inline="H5",group=g\_OPEN) h5\_color=input.color(color.black,"",inline="H5",group=g\_OPEN) use\_h6=input.bool(false,"",inline="H6",group=g\_OPEN) h6\_text=input.string("00:00","",inline="H6",group=g\_OPEN) h6=input.session("0000-0001","",inline="H6",group=g\_OPEN) h6\_color=input.color(color.black,"",inline="H6",group=g\_OPEN) use\_h7=input.bool(false,"",inline="H7",group=g\_OPEN) h7\_text=input.string("00:00","",inline="H7",group=g\_OPEN) h7=input.session("0000-0001","",inline="H7",group=g\_OPEN) h7\_color=input.color(color.black,"",inline="H7",group=g\_OPEN) use\_h8=input.bool(false,"",inline="H8",group=g\_OPEN) h8\_text=input.string("00:00","",inline="H8",group=g\_OPEN) h8=input.session("0000-0001","",inline="H8",group=g\_OPEN) h8\_color=input.color(color.black,"",inline="H8",group=g\_OPEN) hz\_style=get\_line\_type(input.string(defval='Dotted',title="Style",options= \['Solid','Dotted','Dashed'],inline="H0",group=g\_OPEN)) hz\_width=input.int(1,"",inline="H0",group=g\_OPEN) varg\_VERTICAL="Timestamps" v\_unlimited=input.bool(false,"Unlimited",tooltip="Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used",group=g\_VERTICAL) use\_v1=input.bool(false,"",inline="V1",group=g\_VERTICAL) v1=input.session("0000-0001","",inline="V1",group=g\_VERTICAL) v1\_color=input.color(color.black,"",inline="V1",group=g\_VERTICAL) use\_v2=input.bool(false,"",inline="V2",group=g\_VERTICAL) v2=input.session("0800-0801","",inline="V2",group=g\_VERTICAL) v2\_color=input.color(color.black,"",inline="V2",group=g\_VERTICAL) use\_v3=input.bool(false,"",inline="V3",group=g\_VERTICAL) v3=input.session("1000-1001","",inline="V3",group=g\_VERTICAL) v3\_color=input.color(color.black,"",inline="V3",group=g\_VERTICAL) use\_v4=input.bool(false,"",inline="V4",group=g\_VERTICAL) v4=input.session("1200-1201","",inline="V4",group=g\_VERTICAL) v4\_color=input.color(color.black,"",inline="V4",group=g\_VERTICAL) vl\_style=get\_line\_type(input.string(defval='Dotted',title="Style",options= \['Solid','Dotted','Dashed'],inline="V0",group=g\_VERTICAL)) vl\_width=input.int(1,"",inline="V0",group=g\_VERTICAL) // ---------------------------------------- Inputs -------------------------------------------------- // ---------------------------------------- Variables & Constants -------------------------------------------------- typekz string\_title array\ \_box array\ \_hi\_line array\ \_md\_line array\ \_lo\_line array\