-- More information about this indicator can be found at: --http://fxcodebase.com/code/viewtopic.php?f=17&t=11079&p=116472#p116472 --+------------------------------------------------------------------+ --| Copyright © 2018, Gehtsoft USA LLC | --| http://fxcodebase.com | --+------------------------------------------------------------------+ --| Developed by : Mario Jemic | --| mario.jemic@gmail.com | --+------------------------------------------------------------------+ --| Support our efforts by donating | --| Paypal: https://goo.gl/9Rj74e | --| BitCoin : 15VCJTLaz12Amr7adHSBtL9v8XomURo9RF | --| BitCoin Cash: 1BEtS465S3Su438Kc58h2sqvVvHK9Mijtg | --| Ethereum : 0x8C110cD61538fb6d7A2B47858F0c0AaBd663068D | --| LiteCoin : LLU8PSY2vsq7B9kRELLZQcKf5nJQrdeqwD | --+------------------------------------------------------------------+ function Init() indicator:name("Time of a candle"); indicator:description("The indicator draws three vertical lines at the specified times"); indicator:requiredSource(core.Bar); indicator:type(core.Indicator); indicator.parameters:addGroup("1. Line Parameters"); indicator.parameters:addInteger("hour1", "Hour (EST)", "Hour at start of which the line must be drawn", 8, 0, 23); indicator.parameters:addInteger("minute1", "Minutes", "Minute at start of which the line must be drawn", 0, 0, 59); indicator.parameters:addInteger("day1", "Day", "", -1); indicator.parameters:addIntegerAlternative("day1", "No Line", "", 0); indicator.parameters:addIntegerAlternative("day1", "Any Day", "", -1); indicator.parameters:addIntegerAlternative("day1", "Monday", "", 2); indicator.parameters:addIntegerAlternative("day1", "Tuesday", "", 3); indicator.parameters:addIntegerAlternative("day1", "Wednesday", "", 4); indicator.parameters:addIntegerAlternative("day1", "Thursday", "", 5); indicator.parameters:addIntegerAlternative("day1", "Friday", "", 6); indicator.parameters:addIntegerAlternative("day1", "Sunday", "", 1); indicator.parameters:addGroup("2. Line Parameters"); indicator.parameters:addInteger("hour2", "Hour (EST)", "Hour at start of which the line must be drawn", 14, 0, 23); indicator.parameters:addInteger("minute2", "Minutes", "Minute at start of which the line must be drawn", 0, 0, 59); indicator.parameters:addInteger("day2", "Day", "", -1); indicator.parameters:addIntegerAlternative("day2", "No Line", "", 0); indicator.parameters:addIntegerAlternative("day2", "Any Day", "", -1); indicator.parameters:addIntegerAlternative("day2", "Monday", "", 2); indicator.parameters:addIntegerAlternative("day2", "Tuesday", "", 3); indicator.parameters:addIntegerAlternative("day2", "Wednesday", "", 4); indicator.parameters:addIntegerAlternative("day2", "Thursday", "", 5); indicator.parameters:addIntegerAlternative("day2", "Friday", "", 6); indicator.parameters:addIntegerAlternative("day2", "Sunday", "", 1); indicator.parameters:addGroup("3. Line Parameters"); indicator.parameters:addInteger("hour3", "Hour (EST)", "Hour at start of which the line must be drawn", 21, 0, 23); indicator.parameters:addInteger("minute3", "Minutes", "Minute at start of which the line must be drawn", 0, 0, 59); indicator.parameters:addInteger("day3", "Day", "", -1); indicator.parameters:addIntegerAlternative("day3", "No Line", "", 0); indicator.parameters:addIntegerAlternative("day3", "Any Day", "", -1); indicator.parameters:addIntegerAlternative("day3", "Monday", "", 2); indicator.parameters:addIntegerAlternative("day3", "Tuesday", "", 3); indicator.parameters:addIntegerAlternative("day3", "Wednesday", "", 4); indicator.parameters:addIntegerAlternative("day3", "Thursday", "", 5); indicator.parameters:addIntegerAlternative("day3", "Friday", "", 6); indicator.parameters:addIntegerAlternative("day3", "Sunday", "", 1); indicator.parameters:addGroup("1. Line Style"); indicator.parameters:addColor("clr1", "Color", "", core.rgb(0, 127, 0)); indicator.parameters:addInteger("width1", "Width", "", 1, 1, 5); indicator.parameters:addInteger("style1", "Style", "", core.LINE_DOT); indicator.parameters:setFlag("style1", core.FLAG_LEVEL_STYLE); indicator.parameters:addGroup("2. Line Style"); indicator.parameters:addColor("clr2", "Color", "", core.rgb(0, 127, 0)); indicator.parameters:addInteger("width2", "Width", "", 1, 1, 5); indicator.parameters:addInteger("style2", "Style", "", core.LINE_DOT); indicator.parameters:setFlag("style2", core.FLAG_LEVEL_STYLE); indicator.parameters:addGroup("3. Line Style"); indicator.parameters:addColor("clr3", "Color", "", core.rgb(0, 127, 0)); indicator.parameters:addInteger("width3", "Width", "", 1, 1, 5); indicator.parameters:addInteger("style3", "Style", "", core.LINE_DOT); indicator.parameters:setFlag("style3", core.FLAG_LEVEL_STYLE); end local source; local dummy, host; local day1,day2,day3; local hour1, hour2, hour3, clr, width, style; local canwork, error; local minute1, minute2, minute3; local Size; function Prepare(onlyname) day1 = instance.parameters.day1; day2 = instance.parameters.day2; day3 = instance.parameters.day3; source = instance.source; clr1 = instance.parameters.clr1; width1 = instance.parameters.width1; style1 = instance.parameters.style1; minute1 = instance.parameters.minute1; minute2 = instance.parameters.minute2; minute3 = instance.parameters.minute3; clr2 = instance.parameters.clr2; width2 = instance.parameters.width2; style2 = instance.parameters.style2; clr3 = instance.parameters.clr3; width3 = instance.parameters.width3; style3 = instance.parameters.style3; hour1 = instance.parameters.hour1; hour2 = instance.parameters.hour2; hour3 = instance.parameters.hour3; host = core.host; local s, e = core.getcandle(source:barSize(), 0, host:execute("getTradingDayOffset"), 0); canwork = not(math.floor(e - s) >= 1); local s1, e1 s1, e1 = core.getcandle("D1", 0, 0, 0); Size = e1-s1; if not canwork then errtext = "The indicator must be applied on intraday charts"; if onlyname then assert(false, errtext); else core.host:execute("setStatus", "error:" .. errtext); end end local name; name = profile:id() .. "(" .. source:name() .. "(" .. Decode(day1) .. "," .. hour1 .. "," .. minute1 .. ")" .. ", (" .. Decode(day2) .. "," .. hour2 .. "," .. minute2 .. ")" .. ", (" .. Decode(day3) .. "," .. hour3 .. "," .. minute3 .. ")"; instance:name(name); if onlyname then return ; end dummy = instance:addStream("D", core.Line, name .. ".D", "D", clr1, 0); end function Decode(day) if day == 0 then return "No Line"; elseif day ==-1 then return "Any"; elseif day == 2 then return "Monday"; elseif day == 3 then return "Tuesday"; elseif day == 4 then return "Wednesday"; elseif day == 5 then return "Thursday"; elseif day == 6 then return "Friday"; else return "Not Supported"; end end local last_s = nil; local id = 0; function Update(period, mode) if not canwork then return ; end -- calculation restarted if period == 0 then host:execute("removeAll"); id = 0; end local s = source:serial(period); if last_s ~= nil and s == last_s then return ; end last_s = s; local date = source:date(period); local t = core.dateToTable(date); if t.min == minute1 and t.hour == hour1 and (t.wday == day1 or day1 == -1 ) and day1 ~= 0 then id = id + 1; host:execute("drawLine", id, date, 0, date, 100000, clr1, style1, width1, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date))); if day1 == -1 then host:execute("drawLine", 10 +id, date +Size, 0, date +Size, 100000, clr1, style1, width1, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date))); else host:execute("drawLine", 10 +id, date +Size*7, 0, date +Size*7, 100000, clr1, style1, width1, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date +Size*7))); end end if t.min == minute2 and t.hour == hour2 and (t.wday == day2 or day2 == -1 ) and day2 ~= 0 then id = id + 1; host:execute("drawLine", id, date, 0, date, 100000, clr2, style2, width2, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date))); if day2 == -1 then host:execute("drawLine", 10+id, date +Size, 0, date +Size, 100000, clr2, style2, width2, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date))); else host:execute("drawLine", 10 +id, date +Size*7, 0, date +Size*7, 100000, clr1, style1, width1, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date +Size*7))); end end if t.min == minute3 and t.hour == hour3 and (t.wday == day3 or day3 == -1 ) and day3 ~= 0 then id = id + 1; host:execute("drawLine", id, date, 0, date, 100000, clr3, style3, width3, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date))); if day3 == -1 then host:execute("drawLine", 10+ id, date +Size , 0, date +Size, 100000, clr3, style3, width3, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date))); else host:execute("drawLine", 10 +id, date +Size*7, 0, date +Size*7, 100000, clr1, style1, width1, core.formatDate(host:execute("convertTime", core.TZ_EST, core.TZ_TS, date +Size*7))); end end end