indi m1

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 18

//@version=5

indicator('Time Timing ', 'Time Timing', overlay=true, max_lines_count=200,


max_boxes_count=200, max_labels_count=200, max_bars_back=500,
explicit_plot_zorder=true)

import boitoki/Utilities/3 as util

///////////////
// Groups
///////////////
gema = '//EMA'
g0 = '// GENERAL //'
g1 = '// BOX TYPE //'
g2 = '//DWMY Opens//'
g3 = '//DWMY Styles//'
g4 = '//DWMY Settings//'
g5 = '//Open Session//'
g111_01 = '// ♯1 SESSION //'
g111_02 = '// ♯2 SESSION //'
g111_03 = '// ♯3 SESSION //'
g111_04 = '// ♯4 SESSION //'
g111_05 = '// ♯5 SESSION //'
g111_06 = '// ♯6 SESSION //'
g111_07 = '// ♯7 SESSION //'
g111_08 = '// ♯8 SESSION //'
g111_09 = '// ♯9 SESSION //'
g111_10 = '// ♯10 SESSION //'
g111_11 = '// ♯11 SESSION //'
g111_12 = '// ♯12 SESSION //'
g111_13 = '// ♯13 SESSION //'
g111_14 = '// ♯14 SESSION //'
g111_15 = '// ♯15 SESSION //'
g111_16 = '// ♯16 SESSION //'
g111_17 = '// ♯17 SESSION //'
g111_18 = '// ♯18 SESSION //'
g111_19 = '// ♯19 SESSION //'
g111_20 = '// ♯20 SESSION //'
g111_21 = '// ♯21 SESSION //'
g111_22 = '// ♯22 SESSION //'
g111_23 = '// ♯23 SESSION //'
g111_24 = '// ♯24 SESSION //'
g111_25 = '// ♯25 SESSION //'
g111_26 = '// ♯26 SESSION //'
g111_27 = '// ♯27 SESSION //'
g111_28 = '// ♯28 SESSION //'
g111_29 = '// ♯29 SESSION //'
g111_30 = '// ♯30 SESSION //'
g111_31 = '// ♯31 SESSION //'
g111_32 = '// ♯32 SESSION //'
g111_33 = '// ♯33 SESSION //'
g111_34 = '// ♯34 SESSION //'
g111_35 = '// ♯35 SESSION //'
g111_36 = '// ♯36 SESSION //'
g111_37 = '// ♯37 SESSION //'
g111_38 = '// ♯38 SESSION //'
g111_39 = '// ♯39 SESSION //'
g111_40 = '// ♯40 SESSION //'
g111_41 = '// ♯41 SESSION //'
g111_42 = '// ♯42 SESSION //'
g111_43 = '// ♯43 SESSION //'
g111_44 = '// ♯44 SESSION //'
g111_45 = '// ♯45 SESSION //'
g111_46 = '// ♯46 SESSION //'
g111_47 = '// ♯47 SESSION //'
g111_48 = '// ♯48 SESSION //'

//--------------------------------------------------------------------
// Constants
//--------------------------------------------------------------------

var HEAD_PADDING = -2
var HEAD_TRANSP = 60
var LABEL_SIZE = size.small
var LABEL_STYLE = label.style_none
var LINE_STYLE = line.style_solid
var LINE_WIDTH = 1
var OFFSET_PADDING = 4
var TAIL_STYLE = line.style_dotted

//--------------------------------------------------------------------
// Inputs
//--------------------------------------------------------------------

t_tails = "Extends last opens on historical bars."


t_heads = "Extends previous opens in the future."
t_discoverPrices = "Discovers the opening prices from the intraday chart.\n\
nYou may use this setting when there are discrepancies between the data from
intraday and high time frames."
t_extendedHours = "Discovers the opening prices from the extended trading
hours if available."

var i_isDailyEnabled = input (true, "Daily",


inline="Daily", group=g2)
var i_dailyColor = input (color.green, "",
inline="Daily", group=g2)
var i_dailyLookback = input.int (1, "", 1,
inline="Daily", group=g2)
var i_isWeeklyEnabled = input (true, "Weekly",
inline="Weekly", group=g2)
var i_weeklyColor = input (color.orange, "",
inline="Weekly", group=g2)
var i_weeklyLookback = input.int (1, "", 1,
inline="Weekly", group=g2)
var i_isMonthlyEnabled = input (true, "Monthly",
inline="Monthly", group=g2)
var i_monthlyColor = input (color.red, "",
inline="Monthly", group=g2)
var i_monthlyLookback = input.int (1, "", 1,
inline="Monthly", group=g2)
var i_isYearlyEnabled = input (true, "Yearly",
inline="Yearly", group=g2)
var i_yearlyColor = input (color.blue, "",
inline="Yearly", group=g2)
var i_yearlyLookback = input.int (1, "", 1,
inline="Yearly", group=g2)
var i_rightOffset = input.int (20, "Offset", 1,
group=g3)
var i_areTailsEnabled = input (false, "Show Tails", t_tails,
group=g3)
var i_areHeadsEnabled = input (false, "Show Projections", t_heads,
group=g3)
var i_discoverPrices = input (false, "Discover Prices",
t_discoverPrices, group=g4)
var i_extendedHours = input (false, "Extended Hours",
t_extendedHours, group=g4)

// Open Session Time Config


i_linestyle = input.string ("Solid", "Line Style", options=["Solid",
"Dotted", "Dashed"], group=g5)
i_linewidth = input.int (2, "Line width", 1, group=g5)

TokyoOpenColor = input.color(#1b5e20,'Tokyo Open', group=g5)


i_show_sess_tokyo = input.bool(true, 'Tokyo Open', group=g5,
inline='i_show_sess_tokyo')
i_sess_tokyo = input.session('0600-0601', 'Open Time', group=g5)
i_sess_tokyo_hours = input.int (9, "Session hours", 1, group=g5)

LDOpenColor = input.color(#ff9800,'LD Open', group=g5)


i_show_sess_london = input.bool(true, 'London Open', group=g5,
inline='i_show_sess_london')
i_sess_london = input.session('1500-1501', 'Open Time', group=g5)
i_sess_LD_hours = input.int (9, "Session hours", 1, group=g5)

CMEOpenColor = input.color(#f23645,'CME Open', group=g5)


i_show_sess_cme = input.bool(true, 'CME Open', group=g5,
inline='i_show_sess_cme')
i_sess_cme = input.session('2130-2131', 'Open Time', group=g5)
i_sess_CME_hours = input.int (9, "Session hours", 1, group=g5)

len1 = input.int(21, minval=1, title='EMA 21', group = gema, inline = 'ema1')


ema1color = input.color(#fa0505, '',group = gema, inline = 'ema1')

len2 = input.int(200, minval=1, title='EMA 200',group = gema,inline='ema2')


ema2color = input.color(#d905fa, '',group = gema, inline='ema2')

// Calculate EMAs
ema1 = ta.ema(close, len1)
ema2 = ta.ema(close, len2)
// EMA Plots
plot(ema1, title='EMA 1', style=plot.style_line, linewidth=1, color=ema1color)
plot(ema2, title='EMA 2', style=plot.style_line, linewidth=1, color=ema2color)

sib = input(false, title="Show Inside Bars?", inline = 'isb')


isbcolor = input.color(#05fa36, '', inline = 'isb')
sob = input(true, title="Show Outside Bars?", inline = 'osb')
osbcolor = input.color(#2e05fa, '', inline = 'osb')
insideBar() => sib and high <= high[1] and low >= low[1] ? 1 : 0
outsideBar() => sob and (high > high[1] and low < low[1]) ? 1 : 0
barcolor(insideBar() ? isbcolor : na )
barcolor(outsideBar() ? osbcolor : na )

boxColor = input.color(#fa8c06,'Box color', group=g1)


labelColor = input.color(#000000, 'Label color', group=g1)

///////////////
// Defined
///////////////
MAX_BARS = 500

option_yes = 'Yes'
option_no = '× No'
option_border_style1 = '────'
option_border_style2 = '- - - - - -'
option_border_style3 = '•••••••••'

TRANSPARENT = color.new(color.black, 100)

///////////////
// Methods
///////////////
method clear (array<string> id, int _min = 0) =>
if array.size(id) > _min
array.pop(id)

method clear (array<float> id, int _min = 0) =>


if array.size(id) > _min
array.pop(id)

///////////////
// Types
///////////////

// Candle
type Candle
box[] body
line[] wick

method create(Candle this) =>


this.body := array.new<box>()
this.wick := array.new<line>()
this

// Data
type Session
string sess
string tz
string name
color colour
color lbcolour
box[] boxes
int session

Candle candle

method create (Session this) =>


this.boxes := array.new<box>()
this.candle := Candle.new().create()

this

method session (Session this) =>


time("1", this.sess, this.tz)
///////////////
// Functions
///////////////

f_border_style (_style) =>


switch _style
option_border_style1 => line.style_solid
option_border_style2 => line.style_dashed
option_border_style3 => line.style_dotted
=> _style

f_get_started (_session) => na(_session[1]) and _session

f_get_ended (_session) => na(_session) and _session[1]

f_set_box_right (_box, _x) =>


if box.get_right(_box) != _x
box.set_right(_box, _x)
///////////////
// Inputs
///////////////
// Timezone

var prevHLTimeFrame = input.timeframe("30", title="Prev HL Candle Time Frame",


group=g0)
var isShowPrevHL = input (true, "Prev HL Candle",
inline="Prev HL Candle", group=g0)
var prevHLColor = input (color.purple, "",
inline="Prev HL Candle", group=g0)

i_tz = input.string('GMT+7', title='Timezone', options=['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+330', 'GMT+4', 'GMT+430',
'GMT+5', 'GMT+530', 'GMT+6', 'GMT+7', 'GMT+8', 'GMT+9', 'GMT+10', 'GMT+11',
'GMT+12'], group=g0)
i_history_period = input.int(1, 'History', minval=0, group=g0)
i_show = i_history_period > 0
i_lookback = 12 * 60
text_size = input.string('small', 'Subtitle Size', options=['tiny',
'small', 'normal', 'large', 'huge', 'auto'], group=g0)
text_Hali = input.string('center', 'Subtitle Alignment',
options=['center', 'left', 'right'], group=g0)

// Sessions
i_show_sess1 = input.bool(true, 'Session 1 ', group=g111_01,
inline='session1_1') and i_show
i_sess1_label = input.string('00h00', '', group=g111_01,
inline='session1_1')
i_sess1 = input.session('0000-0031', 'Time', group=g111_01)
i_sess1_max = input.int(30,'Max box size', group=g111_01)

i_show_sess2 = input.bool(true, 'Session 2 ', group=g111_02,


inline='session2_1') and i_show
i_sess2_label = input.string('00h30', '', group=g111_02,
inline='session2_1')
i_sess2 = input.session('0030-0031', 'Time', group=g111_02)
i_sess2_max = input.int(30,'Max box size', group=g111_02)

i_show_sess3 = input.bool(true, 'Session 3 ', group=g111_03,


inline='session3_1') and i_show
i_sess3_label = input.string('01h00', '', group=g111_03,
inline='session3_1')
i_sess3 = input.session('0100-0101', 'Time', group=g111_03)
i_sess3_max = input.int(30,'Max box size', group=g111_03)

i_show_sess4 = input.bool(true, 'Session 4 ', group=g111_04,


inline='session4_1') and i_show
i_sess4_label = input.string('01h30', '', group=g111_04,
inline='session4_1')
i_sess4 = input.session('0130-0131', 'Time', group=g111_04)
i_sess4_max = input.int(30,'Max box size', group=g111_04)

i_show_sess5 = input.bool(true, 'Session 5 ', group=g111_05,


inline='session5_1') and i_show
i_sess5_label = input.string('02h00', '', group=g111_05,
inline='session5_1')
i_sess5 = input.session('0200-0201', 'Time', group=g111_05)
i_sess5_max = input.int(30,'Max box size', group=g111_05)

i_show_sess6 = input.bool(true, 'Session 6 ', group=g111_06,


inline='session6_1') and i_show
i_sess6_label = input.string('02h30', '', group=g111_06,
inline='session6_1')
i_sess6 = input.session('0230-0231', 'Time', group=g111_06)
i_sess6_max = input.int(30,'Max box size', group=g111_06)

i_show_sess7 = input.bool(true, 'Session 7 ', group=g111_07,


inline='session7_1') and i_show
i_sess7_label = input.string('03h00', '', group=g111_07,
inline='session7_1')
i_sess7 = input.session('0300-0301', 'Time', group=g111_07)
i_sess7_max = input.int(30,'Max box size', group=g111_07)

i_show_sess8 = input.bool(true, 'Session 8 ', group=g111_08,


inline='session8_1') and i_show
i_sess8_label = input.string('03h30', '', group=g111_08,
inline='session8_1')
i_sess8 = input.session('0330-0331', 'Time', group=g111_08)
i_sess8_max = input.int(30,'Max box size', group=g111_08)

i_show_sess9 = input.bool(true, 'Session 9 ', group=g111_09,


inline='session9_1') and i_show
i_sess9_label = input.string('04h00', '', group=g111_09,
inline='session9_1')
i_sess9 = input.session('0400-0401', 'Time', group=g111_09)
i_sess9_max = input.int(30,'Max box size', group=g111_09)

i_show_sess10 = input.bool(true, 'Session 10 ', group=g111_10,


inline='session10_1') and i_show
i_sess10_label = input.string('04h30', '', group=g111_10,
inline='session10_1')
i_sess10 = input.session('0430-0431', 'Time', group=g111_10)
i_sess10_max = input.int(30,'Max box size', group=g111_10)

i_show_sess11 = input.bool(true, 'Session 11 ', group=g111_11,


inline='session11_1') and i_show
i_sess11_label = input.string('05h00', '', group=g111_11,
inline='session11_1')
i_sess11 = input.session('0500-0501', 'Time', group=g111_11)
i_sess11_max = input.int(30,'Max box size', group=g111_11)

i_show_sess12 = input.bool(true, 'Session 12 ', group=g111_12,


inline='session12_1') and i_show
i_sess12_label = input.string('05h30', '', group=g111_12,
inline='session12_1')
i_sess12 = input.session('0530-0531', 'Time', group=g111_12)
i_sess12_max = input.int(30,'Max box size', group=g111_12)

i_show_sess13 = input.bool(true, 'Session 13', group=g111_13,


inline='session13_1') and i_show
i_sess13_label = input.string('06h00', '', group=g111_13,
inline='session13_1')
i_sess13 = input.session('0600-0601', 'Time', group=g111_13)
i_sess13_max = input.int(30,'Max box size', group=g111_13)

i_show_sess14 = input.bool(true, 'Session 14', group=g111_14,


inline='session14_1') and i_show
i_sess14_label = input.string('06h30', '', group=g111_14,
inline='session14_1')
i_sess14 = input.session('0630-0631', 'Time', group=g111_14)
i_sess14_max = input.int(30,'Max box size', group=g111_14)

i_show_sess15 = input.bool(true, 'Session 15 ', group=g111_15,


inline='session15_1') and i_show
i_sess15_label = input.string('07h00', '', group=g111_15,
inline='session15_1')
i_sess15 = input.session('0700-0701', 'Time', group=g111_15)
i_sess15_max = input.int(30,'Max box size', group=g111_15)

i_show_sess16 = input.bool(true, 'Session 16 ', group=g111_16,


inline='session16_1') and i_show
i_sess16_label = input.string('07h30', '', group=g111_16,
inline='session16_1')
i_sess16 = input.session('0730-0731', 'Time', group=g111_16)
i_sess16_max = input.int(30,'Max box size', group=g111_16)

i_show_sess17 = input.bool(true, 'Session 17 ', group=g111_17,


inline='session17_1') and i_show
i_sess17_label = input.string('08h00', '', group=g111_17,
inline='session17_1')
i_sess17 = input.session('0800-0801', 'Time', group=g111_17)
i_sess17_max = input.int(30,'Max box size', group=g111_17)

i_show_sess18 = input.bool(true, 'Session 18 ', group=g111_18,


inline='session18_1') and i_show
i_sess18_label = input.string('08h30', '', group=g111_18,
inline='session18_1')
i_sess18 = input.session('0830-0831', 'Time', group=g111_18)
i_sess18_max = input.int(30,'Max box size', group=g111_18)
i_show_sess19 = input.bool(true, 'Session 19 ', group=g111_19,
inline='session19_1') and i_show
i_sess19_label = input.string('09h00', '', group=g111_19,
inline='session19_1')
i_sess19 = input.session('0900-0901', 'Time', group=g111_19)
i_sess19_max = input.int(30,'Max box size', group=g111_19)

i_show_sess20 = input.bool(true, 'Session 20 ', group=g111_20,


inline='session20_1') and i_show
i_sess20_label = input.string('09h30', '', group=g111_20,
inline='session20_1')
i_sess20 = input.session('0930-0931', 'Time', group=g111_20)
i_sess20_max = input.int(30,'Max box size', group=g111_20)

i_show_sess21 = input.bool(true, 'Session 21 ', group=g111_21,


inline='session21_1') and i_show
i_sess21_label = input.string('10h00', '', group=g111_21,
inline='session21_1')
i_sess21 = input.session('1000-1001', 'Time', group=g111_21)
i_sess21_max = input.int(30,'Max box size', group=g111_21)

i_show_sess22 = input.bool(true, 'Session 22 ', group=g111_22,


inline='session22_1') and i_show
i_sess22_label = input.string('10h30', '', group=g111_22,
inline='session22_1')
i_sess22 = input.session('1030-1031', 'Time', group=g111_22)
i_sess22_max = input.int(30,'Max box size', group=g111_22)

i_show_sess23 = input.bool(true, 'Session 23 ', group=g111_23,


inline='session23_1') and i_show
i_sess23_label = input.string('11h00', '', group=g111_23,
inline='session23_1')
i_sess23 = input.session('1100-1101', 'Time', group=g111_23)
i_sess23_max = input.int(30,'Max box size', group=g111_23)

i_show_sess24 = input.bool(true, 'Session 24 ', group=g111_24,


inline='session24_1') and i_show
i_sess24_label = input.string('11h30', '', group=g111_24,
inline='session24_1')
i_sess24 = input.session('1130-1131', 'Time', group=g111_24)
i_sess24_max = input.int(30,'Max box size', group=g111_24)

i_show_sess25 = input.bool(true, 'Session 25 ', group=g111_25,


inline='session25_1') and i_show
i_sess25_label = input.string('12h00', '', group=g111_25,
inline='session25_1')
i_sess25 = input.session('1200-1201', 'Time', group=g111_25)
i_sess25_max = input.int(30,'Max box size', group=g111_25)

i_show_sess26 = input.bool(true, 'Session 26 ', group=g111_26,


inline='session26_1') and i_show
i_sess26_label = input.string('12h30', '', group=g111_26,
inline='session26_1')
i_sess26 = input.session('1230-1231', 'Time', group=g111_26)
i_sess26_max = input.int(30,'Max box size', group=g111_26)

i_show_sess27 = input.bool(true, 'Session 27 ', group=g111_27,


inline='session27_1') and i_show
i_sess27_label = input.string('13h00', '', group=g111_27,
inline='session27_1')
i_sess27 = input.session('1300-1301', 'Time', group=g111_27)
i_sess27_max = input.int(30,'Max box size', group=g111_27)

i_show_sess28 = input.bool(true, 'Session 28 ', group=g111_28,


inline='session28_1') and i_show
i_sess28_label = input.string('13h30', '', group=g111_28,
inline='session28_1')
i_sess28 = input.session('1330-1331', 'Time', group=g111_28)
i_sess28_max = input.int(30,'Max box size', group=g111_28)

i_show_sess29 = input.bool(true, 'Session 29 ', group=g111_29,


inline='session29_1') and i_show
i_sess29_label = input.string('14h00', '', group=g111_29,
inline='session29_1')
i_sess29 = input.session('1400-1401', 'Time', group=g111_29)
i_sess29_max = input.int(30,'Max box size', group=g111_29)

i_show_sess30 = input.bool(true, 'Session 30 ', group=g111_30,


inline='session30_1') and i_show
i_sess30_label = input.string('14h30', '', group=g111_30,
inline='session30_1')
i_sess30 = input.session('1430-1431', 'Time', group=g111_30)
i_sess30_max = input.int(30,'Max box size', group=g111_30)

i_show_sess31 = input.bool(true, 'Session 31 ', group=g111_31,


inline='session31_1') and i_show
i_sess31_label = input.string('15h00', '', group=g111_31,
inline='session31_1')
i_sess31 = input.session('1500-1501', 'Time', group=g111_31)
i_sess31_max = input.int(30,'Max box size', group=g111_31)

i_show_sess32 = input.bool(true, 'Session 32 ', group=g111_32,


inline='session32_1') and i_show
i_sess32_label = input.string('15h30', '', group=g111_32,
inline='session32_1')
i_sess32 = input.session('1530-1531', 'Time', group=g111_32)
i_sess32_max = input.int(30,'Max box size', group=g111_32)

i_show_sess33 = input.bool(true, 'Session 33 ', group=g111_33,


inline='session33_1') and i_show
i_sess33_label = input.string('16h00', '', group=g111_33,
inline='session33_1')
i_sess33 = input.session('1600-1601', 'Time', group=g111_33)
i_sess33_max = input.int(30,'Max box size', group=g111_33)

i_show_sess34 = input.bool(true, 'Session 34 ', group=g111_34,


inline='session34_1') and i_show
i_sess34_label = input.string('16h30', '', group=g111_34,
inline='session34_1')
i_sess34 = input.session('1630-1631', 'Time', group=g111_34)
i_sess34_max = input.int(30,'Max box size', group=g111_34)

i_show_sess35 = input.bool(true, 'Session 35 ', group=g111_35,


inline='session35_1') and i_show
i_sess35_label = input.string('17h00', '', group=g111_35,
inline='session35_1')
i_sess35 = input.session('1700-1701', 'Time', group=g111_35)
i_sess35_max = input.int(30,'Max box size', group=g111_35)
i_show_sess36 = input.bool(true, 'Session 36 ', group=g111_36,
inline='session36_1') and i_show
i_sess36_label = input.string('17h30', '', group=g111_36,
inline='session36_1')
i_sess36 = input.session('1730-1731', 'Time', group=g111_36)
i_sess36_max = input.int(30,'Max box size', group=g111_36)

i_show_sess37 = input.bool(true, 'Session 37 ', group=g111_37,


inline='session37_1') and i_show
i_sess37_label = input.string('18h00', '', group=g111_37,
inline='session37_1')
i_sess37 = input.session('1800-1801', 'Time', group=g111_37)
i_sess37_max = input.int(30,'Max box size', group=g111_37)

i_show_sess38 = input.bool(true, 'Session 38 ', group=g111_38,


inline='session38_1') and i_show
i_sess38_label = input.string('18h30', '', group=g111_38,
inline='session38_1')
i_sess38 = input.session('1830-1831', 'Time', group=g111_38)
i_sess38_max = input.int(30,'Max box size', group=g111_38)

i_show_sess39 = input.bool(true, 'Session 39 ', group=g111_39,


inline='session39_1') and i_show
i_sess39_label = input.string('19h00', '', group=g111_39,
inline='session39_1')
i_sess39 = input.session('1900-1901', 'Time', group=g111_39)
i_sess39_max = input.int(30,'Max box size', group=g111_39)

i_show_sess40 = input.bool(true, 'Session 40 ', group=g111_40,


inline='session40_1') and i_show
i_sess40_label = input.string('19h30', '', group=g111_40,
inline='session40_1')
i_sess40 = input.session('1930-1931', 'Time', group=g111_40)
i_sess40_max = input.int(30,'Max box size', group=g111_40)

i_show_sess41 = input.bool(true, 'Session 41 ', group=g111_41,


inline='session41_1') and i_show
i_sess41_label = input.string('20h00', '', group=g111_41,
inline='session41_1')
i_sess41 = input.session('2000-2001', 'Time', group=g111_41)
i_sess41_max = input.int(30,'Max box size', group=g111_41)

i_show_sess42 = input.bool(true, 'Session 42 ', group=g111_42,


inline='session42_1') and i_show
i_sess42_label = input.string('20h30', '', group=g111_42,
inline='session42_1')
i_sess42 = input.session('2030-2031', 'Time', group=g111_42)
i_sess42_max = input.int(30,'Max box size', group=g111_42)

i_show_sess43 = input.bool(true, 'Session 43 ', group=g111_43,


inline='session43_1') and i_show
i_sess43_label = input.string('21h00', '', group=g111_43,
inline='session43_1')
i_sess43 = input.session('2100-2101', 'Time', group=g111_43)
i_sess43_max = input.int(30,'Max box size', group=g111_43)

i_show_sess44 = input.bool(true, 'Session 44 ', group=g111_44,


inline='session44_1') and i_show
i_sess44_label = input.string('21h30', '', group=g111_44,
inline='session44_1')
i_sess44 = input.session('2130-2131', 'Time', group=g111_44)
i_sess44_max = input.int(30,'Max box size', group=g111_44)

i_show_sess45 = input.bool(true, 'Session 45 ', group=g111_45,


inline='session45_1') and i_show
i_sess45_label = input.string('22h00', '', group=g111_45,
inline='session45_1')
i_sess45 = input.session('2200-2201', 'Time', group=g111_45)
i_sess45_max = input.int(30,'Max box size', group=g111_45)

i_show_sess46 = input.bool(true, 'Session 46 ', group=g111_46,


inline='session46_1') and i_show
i_sess46_label = input.string('22h30', '', group=g111_46,
inline='session46_1')
i_sess46 = input.session('2230-2231', 'Time', group=g111_46)
i_sess46_max = input.int(30,'Max box size', group=g111_46)

i_show_sess47 = input.bool(true, 'Session 47 ', group=g111_47,


inline='session47_1') and i_show
i_sess47_label = input.string('23h00', '', group=g111_47,
inline='session47_1')
i_sess47 = input.session('2300-2301', 'Time', group=g111_47)
i_sess47_max = input.int(30,'Max box size', group=g111_47)

i_show_sess48 = input.bool(true, 'Session 48 ', group=g111_48,


inline='session48_1') and i_show
i_sess48_label = input.string('23h30', '', group=g111_48,
inline='session48_1')
i_sess48 = input.session('2330-2331', 'Time', group=g111_48)
i_sess48_max = input.int(30,'Max box size', group=g111_48)

// Show & Styles


i_sess_border_style = f_border_style(input.string(option_border_style2, '',
options=[option_border_style1, option_border_style2, option_border_style3],
group=g1, inline='box_style'))
i_sess_border_width = input.int(1, '', minval=0, group=g1, inline='box_style')
i_sess_box_background = input.bool(true, 'BG color', group=g1,
inline='box_style_options')
i_sess_bgopacitys = input.int(84, 'Background opacity', minval=0,maxval=100,
group=g1)
//i_sess_bgopacity = i_sess_box_background ? i_sess_bgopacitys : 100

// ------------------------
// ------------------------
// Drawing
// ------------------------
draw (_show, Session data, max_box_size) =>
session = data.session()
col = data.colour
lbcolor = data.lbcolour
name = data.name
var box my_box = na
is_started = f_get_started(session)
if _show and is_started
my_box := box.new(bar_index, low, bar_index, high, col,
i_sess_border_width, i_sess_border_style, bgcolor=color.new(col,
i_sess_box_background ? i_sess_bgopacitys : 100),text = name,text_size = text_size,
text_halign = text_Hali, text_color = lbcolor)
array.push(data.boxes, my_box)

util.clear_boxes(data.boxes, i_history_period)
f_set_box_right(my_box, bar_index + max_box_size)
[session]

string tz = (i_tz == option_no or i_tz == '') ? na : i_tz


var sess1_data = Session.new(i_sess1, tz, i_sess1_label, boxColor,
labelColor).create()
var sess2_data = Session.new(i_sess2, tz, i_sess2_label, boxColor,
labelColor).create()
var sess3_data = Session.new(i_sess3, tz, i_sess3_label, boxColor,
labelColor).create()
var sess4_data = Session.new(i_sess4, tz, i_sess4_label, boxColor,
labelColor).create()
var sess5_data = Session.new(i_sess5, tz, i_sess5_label, boxColor,
labelColor).create()
var sess6_data = Session.new(i_sess6, tz, i_sess6_label, boxColor,
labelColor).create()
var sess7_data = Session.new(i_sess7, tz, i_sess7_label, boxColor,
labelColor).create()
var sess8_data = Session.new(i_sess8, tz, i_sess8_label, boxColor,
labelColor).create()
var sess9_data = Session.new(i_sess9, tz, i_sess9_label, boxColor,
labelColor).create()
var sess10_data = Session.new(i_sess10, tz, i_sess10_label, boxColor,
labelColor).create()
var sess11_data = Session.new(i_sess11, tz, i_sess11_label, boxColor,
labelColor).create()
var sess12_data = Session.new(i_sess12, tz, i_sess12_label, boxColor,
labelColor).create()
var sess13_data = Session.new(i_sess13, tz, i_sess13_label, boxColor,
labelColor).create()
var sess14_data = Session.new(i_sess14, tz, i_sess14_label, boxColor,
labelColor).create()
var sess15_data = Session.new(i_sess15, tz, i_sess15_label, boxColor,
labelColor).create()
var sess16_data = Session.new(i_sess16, tz, i_sess16_label, boxColor,
labelColor).create()
var sess17_data = Session.new(i_sess17, tz, i_sess17_label, boxColor,
labelColor).create()
var sess18_data = Session.new(i_sess18, tz, i_sess18_label, boxColor,
labelColor).create()
var sess19_data = Session.new(i_sess19, tz, i_sess19_label, boxColor,
labelColor).create()
var sess20_data = Session.new(i_sess20, tz, i_sess20_label, boxColor,
labelColor).create()
var sess21_data = Session.new(i_sess21, tz, i_sess21_label, boxColor,
labelColor).create()
var sess22_data = Session.new(i_sess22, tz, i_sess22_label, boxColor,
labelColor).create()
var sess23_data = Session.new(i_sess23, tz, i_sess23_label, boxColor,
labelColor).create()
var sess24_data = Session.new(i_sess24, tz, i_sess24_label, boxColor,
labelColor).create()
var sess25_data = Session.new(i_sess25, tz, i_sess25_label, boxColor,
labelColor).create()
var sess26_data = Session.new(i_sess26, tz, i_sess26_label, boxColor,
labelColor).create()
var sess27_data = Session.new(i_sess27, tz, i_sess27_label, boxColor,
labelColor).create()
var sess28_data = Session.new(i_sess28, tz, i_sess28_label, boxColor,
labelColor).create()
var sess29_data = Session.new(i_sess29, tz, i_sess29_label, boxColor,
labelColor).create()
var sess30_data = Session.new(i_sess30, tz, i_sess30_label, boxColor,
labelColor).create()
var sess31_data = Session.new(i_sess31, tz, i_sess31_label, boxColor,
labelColor).create()
var sess32_data = Session.new(i_sess32, tz, i_sess32_label, boxColor,
labelColor).create()
var sess33_data = Session.new(i_sess33, tz, i_sess33_label, boxColor,
labelColor).create()
var sess34_data = Session.new(i_sess34, tz, i_sess34_label, boxColor,
labelColor).create()
var sess35_data = Session.new(i_sess35, tz, i_sess35_label, boxColor,
labelColor).create()
var sess36_data = Session.new(i_sess36, tz, i_sess36_label, boxColor,
labelColor).create()
var sess37_data = Session.new(i_sess37, tz, i_sess37_label, boxColor,
labelColor).create()
var sess38_data = Session.new(i_sess38, tz, i_sess38_label, boxColor,
labelColor).create()
var sess39_data = Session.new(i_sess39, tz, i_sess39_label, boxColor,
labelColor).create()
var sess40_data = Session.new(i_sess40, tz, i_sess40_label, boxColor,
labelColor).create()
var sess41_data = Session.new(i_sess41, tz, i_sess41_label, boxColor,
labelColor).create()
var sess42_data = Session.new(i_sess42, tz, i_sess42_label, boxColor,
labelColor).create()
var sess43_data = Session.new(i_sess43, tz, i_sess43_label, boxColor,
labelColor).create()
var sess44_data = Session.new(i_sess44, tz, i_sess44_label, boxColor,
labelColor).create()
var sess45_data = Session.new(i_sess45, tz, i_sess45_label, boxColor,
labelColor).create()
var sess46_data = Session.new(i_sess46, tz, i_sess46_label, boxColor,
labelColor).create()
var sess47_data = Session.new(i_sess47, tz, i_sess47_label, boxColor,
labelColor).create()
var sess48_data = Session.new(i_sess48, tz, i_sess48_label, boxColor,
labelColor).create()

if timeframe.period=='1'
[is_sess1] = draw(i_show_sess1, sess1_data,i_sess1_max)
[is_sess2] = draw(i_show_sess2, sess2_data,i_sess2_max)
[is_sess3] = draw(i_show_sess3, sess3_data,i_sess3_max)
[is_sess4] = draw(i_show_sess4, sess4_data,i_sess4_max)
[is_sess5] = draw(i_show_sess5, sess5_data,i_sess5_max)
[is_sess6] = draw(i_show_sess6, sess6_data,i_sess6_max)
[is_sess7] = draw(i_show_sess7, sess7_data,i_sess7_max)
[is_sess8] = draw(i_show_sess8, sess8_data,i_sess8_max)
[is_sess9] = draw(i_show_sess9, sess9_data,i_sess9_max)
[is_sess10] = draw(i_show_sess10, sess10_data,i_sess10_max)
[is_sess11] = draw(i_show_sess11, sess11_data,i_sess11_max)
[is_sess12] = draw(i_show_sess12, sess12_data,i_sess12_max)
[is_sess13] = draw(i_show_sess13, sess13_data,i_sess13_max)
[is_sess14] = draw(i_show_sess14, sess14_data,i_sess14_max)
[is_sess15] = draw(i_show_sess15, sess15_data,i_sess15_max)
[is_sess16] = draw(i_show_sess16, sess16_data,i_sess16_max)
[is_sess17] = draw(i_show_sess17, sess17_data,i_sess17_max)
[is_sess18] = draw(i_show_sess18, sess18_data,i_sess18_max)
[is_sess19] = draw(i_show_sess19, sess19_data, i_sess19_max)
[is_sess20] = draw(i_show_sess20, sess20_data, i_sess20_max)
[is_sess21] = draw(i_show_sess21, sess21_data, i_sess21_max)
[is_sess22] = draw(i_show_sess22, sess22_data, i_sess22_max)
[is_sess23] = draw(i_show_sess23, sess23_data, i_sess23_max)
[is_sess24] = draw(i_show_sess24, sess24_data, i_sess24_max)
[is_sess25] = draw(i_show_sess25, sess25_data, i_sess25_max)
[is_sess26] = draw(i_show_sess26, sess26_data, i_sess26_max)
[is_sess27] = draw(i_show_sess27, sess27_data, i_sess27_max)
[is_sess28] = draw(i_show_sess28, sess28_data, i_sess28_max)
[is_sess29] = draw(i_show_sess29, sess29_data, i_sess29_max)
[is_sess30] = draw(i_show_sess30, sess30_data, i_sess30_max)
[is_sess31] = draw(i_show_sess31, sess31_data, i_sess31_max)
[is_sess32] = draw(i_show_sess32, sess32_data, i_sess32_max)
[is_sess33] = draw(i_show_sess33, sess33_data, i_sess33_max)
[is_sess34] = draw(i_show_sess34, sess34_data, i_sess34_max)
[is_sess35] = draw(i_show_sess35, sess35_data, i_sess35_max)
[is_sess36] = draw(i_show_sess36, sess36_data, i_sess36_max)
[is_sess37] = draw(i_show_sess37, sess37_data, i_sess37_max)
[is_sess38] = draw(i_show_sess38, sess38_data, i_sess38_max)
[is_sess39] = draw(i_show_sess39, sess39_data, i_sess39_max)
[is_sess40] = draw(i_show_sess40, sess40_data, i_sess40_max)
[is_sess41] = draw(i_show_sess41, sess41_data, i_sess41_max)
[is_sess42] = draw(i_show_sess42, sess42_data, i_sess42_max)
[is_sess43] = draw(i_show_sess43, sess43_data, i_sess43_max)
[is_sess44] = draw(i_show_sess44, sess44_data, i_sess44_max)
[is_sess45] = draw(i_show_sess45, sess45_data, i_sess45_max)
[is_sess46] = draw(i_show_sess46, sess46_data, i_sess46_max)
[is_sess47] = draw(i_show_sess47, sess47_data, i_sess47_max)
[is_sess48] = draw(i_show_sess48, sess48_data, i_sess48_max)
//--------------------------------------------------------------------
// Variables declarations
//--------------------------------------------------------------------

var a_lastOpens = array.new_float(4)


var canShowDaily = i_isDailyEnabled and timeframe.isintraday
var canShowWeekly = i_isWeeklyEnabled and (timeframe.isintraday or
timeframe.isdaily)
var canShowMonthly = i_isMonthlyEnabled and not timeframe.ismonthly
var canShowYearly = i_isYearlyEnabled and not (timeframe.ismonthly and
timeframe.multiplier >= 12)
var hasExtendedHours = i_extendedHours and syminfo.session ==
session.extended
var discoverPrices = i_discoverPrices or hasExtendedHours

[dailyTime, dailyOpen] = request.security(syminfo.tickerid, 'D', [time,


open], lookahead=barmerge.lookahead_on)
[weeklyTime, weeklyOpen] = request.security(syminfo.tickerid, 'W', [time,
open], lookahead=barmerge.lookahead_on)
[monthlyTime, monthlyOpen] = request.security(syminfo.tickerid, 'M', [time,
open], lookahead=barmerge.lookahead_on)
[yearlyTime, yearlyOpen] = request.security(syminfo.tickerid, '12M', [time,
open], lookahead=barmerge.lookahead_on)

hasDailyTimeChanged = hasExtendedHours ? time_tradingday !=


time_tradingday[1] : dailyTime != dailyTime[1]
hasWeekklyTimeChanged = hasExtendedHours ? weekofyear != weekofyear[1] :
weeklyTime != weeklyTime[1]
hasMonthlyTimeChanged = hasExtendedHours ? month != month[1] : monthlyTime !=
monthlyTime[1]
hasYearlyTimeChanged = hasExtendedHours ? year != year[1] : yearlyTime !=
yearlyTime[1]

//--------------------------------------------------------------------
// Functions
//--------------------------------------------------------------------

// If different opens share the same opening prices, their labels will overlap
// Instead, we pad the higher time frame ones for achieving a "separator sheet"
f_getPadding(int _index) =>
_padding = 0
// Weekly, monthly, or yearly overlaps the daily open
if _index > 0 and canShowDaily and array.get(a_lastOpens, 0) ==
array.get(a_lastOpens, _index)
_padding += 1
// Monthly or yearly overlaps the weekly open
if _index > 1 and canShowWeekly and array.get(a_lastOpens, 1) ==
array.get(a_lastOpens, _index)
_padding += 1
// Yearly overlaps the monthly open
if _index > 2 and canShowMonthly and array.get(a_lastOpens, 2) ==
array.get(a_lastOpens, _index)
_padding += 1
_padding

f_getRightBarIndex(int _padding) => bar_index + i_rightOffset + _padding *


OFFSET_PADDING

// On the weekly time frame, the monthly/yearly open is drawn from the first candle
of the month/year
// The first weekly candle is not necessarily containing the first day of the month
// In such case, we visually anchor the open of the previous weekly candle
f_isContainedOnPrevWeekly(int _time) => timeframe.isweekly and dayofmonth(time) >
dayofmonth(_time)

// Create and update an open level. An open is composed of a label, a "body" line,
and optional "tail" and "head" lines extensions
f_draw(bool _newOpen, float _y, int _lookback, int _padding, color _color, string
_text, bool _prevTime=false, int candle_index = bar_index) =>
var line _body = na
var _label = label.new(na, na, _text, style=LABEL_STYLE, textcolor=_color,
size=LABEL_SIZE)
var _tail = line.new(na, na, na, na, color=_color, style=TAIL_STYLE,
width=LINE_WIDTH, extend=extend.left)
var _bodies = array.new_line()
var _heads = array.new_line()
_start = _prevTime ? candle_index - 1 : candle_index
_end = f_getRightBarIndex(_padding)
if _newOpen
// Label
label.set_xy(_label, _end, _y)
label.set_tooltip(_label, str.tostring(_y, format.mintick))

// Body
line.set_x2(_body, candle_index)
_body := line.new(_start, _y, _end, _y, color=_color, style=LINE_STYLE,
width=LINE_WIDTH)
array.push(_bodies, _body)

// Head
if i_areHeadsEnabled
array.push(_heads, line.new(candle_index, _y, candle_index, _y,
color=color.new(_color, HEAD_TRANSP), style=LINE_STYLE, width=LINE_WIDTH))

// Tail
if i_areTailsEnabled
line.set_xy1(_tail, _start - 1, _y)
line.set_xy2(_tail, _start, _y)

if array.size(_bodies) > _lookback


line.delete(array.shift(_bodies))
if array.size(_heads) > _lookback
line.delete(array.shift(_heads))

if barstate.islast
line.set_x2(_body, _end)
label.set_x(_label, _end)

if i_areHeadsEnabled and array.size(_heads) > 1


// Not updating the last open's projection
for i = 0 to array.size(_heads) - 2
// Avoid projecting on last opens bodies
if not array.includes(a_lastOpens, line.get_y1(array.get(_heads,
i)))
line.set_x2(array.get(_heads, i),
f_getRightBarIndex(HEAD_PADDING))

//--------------------------------------------------------------------
// Logic
//--------------------------------------------------------------------

if canShowDaily and hasDailyTimeChanged


array.set(a_lastOpens, 0, discoverPrices ? open : dailyOpen)

if canShowWeekly and hasWeekklyTimeChanged


array.set(a_lastOpens, 1, discoverPrices ? open : weeklyOpen)

if canShowMonthly and hasMonthlyTimeChanged


array.set(a_lastOpens, 2, discoverPrices ? open : monthlyOpen)

if canShowYearly and hasYearlyTimeChanged


array.set(a_lastOpens, 3, discoverPrices ? open : yearlyOpen)

//--------------------------------------------------------------------
// Plotting & styling
//--------------------------------------------------------------------
if canShowYearly
f_draw(hasYearlyTimeChanged, array.get(a_lastOpens, 3), i_yearlyLookback,
f_getPadding(3), i_yearlyColor, "Y ", f_isContainedOnPrevWeekly(yearlyTime))

if canShowMonthly
f_draw(hasMonthlyTimeChanged, array.get(a_lastOpens, 2), i_monthlyLookback,
f_getPadding(2), i_monthlyColor, "M ", f_isContainedOnPrevWeekly(monthlyTime))

if canShowWeekly
f_draw(hasWeekklyTimeChanged, array.get(a_lastOpens, 1), i_weeklyLookback,
f_getPadding(1), i_weeklyColor, "W ")

if canShowDaily
f_draw(hasDailyTimeChanged, array.get(a_lastOpens, 0), i_dailyLookback,
f_getPadding(0), i_dailyColor, "D ")

// Plot invisible opens for displaying last values in `status line`, `scale`, `data
window` as well for providing defaults alert conditions

plot(array.get(a_lastOpens, 0), "D", color.new(i_dailyColor, 100),


editable=false)
plot(array.get(a_lastOpens, 1), "W", color.new(i_weeklyColor, 100),
editable=false)
plot(array.get(a_lastOpens, 2), "M", color.new(i_monthlyColor, 100),
editable=false)
plot(array.get(a_lastOpens, 3), "Y", color.new(i_yearlyColor, 100),
editable=false)

// Lấy giá thấp và giá cao của cây nến 30 phút gần nhất
[prev30mTime, previous_low] = request.security(syminfo.tickerid, prevHLTimeFrame,
[time, low[1]], lookahead=barmerge.lookahead_on)
[prev30mTimeHigh, previous_high] = request.security(syminfo.tickerid,
prevHLTimeFrame, [time, high[1]], lookahead=barmerge.lookahead_on)
previous_candle_bar_index = request.security(syminfo.tickerid, prevHLTimeFrame,
bar_index, lookahead=barmerge.lookahead_on)

// Hiển thị giá thấp và giá cao trên biểu đồ


if isShowPrevHL
f_draw(true, previous_low, 1, 0, prevHLColor, "PL ")
f_draw(true, previous_high, 1, 0, prevHLColor, "PH ")

plot(previous_low, "L", color.new(prevHLColor, 100), editable=false)


plot(previous_high, "H", color.new(prevHLColor, 100), editable=false)

// MISC
TokyoOpen = time ("1", i_sess_tokyo, i_tz)
LonDonOpen = time ("1", i_sess_london, i_tz)
CMEOpen = time ("1", i_sess_cme, i_tz)

linestyle = i_linestyle == "Solid" ? line.style_solid : i_linestyle ==


"Dotted" ? line.style_dotted : line.style_dashed

// CALC
var openpriceTokyo = 0.0
var openpriceLD = 0.0
var openpriceCME = 0.0

if TokyoOpen
if not TokyoOpen[1]
openpriceTokyo := open
else
openpriceTokyo := math.max(open, openpriceTokyo)

if openpriceTokyo != openpriceTokyo[1] and i_show_sess_tokyo


var line lne = na
line.set_extend(lne, extend.none)
lne := line.new(TokyoOpen, openpriceTokyo, TokyoOpen + i_sess_tokyo_hours *
3600000 , openpriceTokyo, xloc.bar_time, extend.none, TokyoOpenColor, linestyle,
i_linewidth)

if LonDonOpen
if not LonDonOpen[1]
openpriceLD := open
else
openpriceLD := math.max(open, openpriceLD)

if openpriceLD != openpriceLD[1] and i_show_sess_london


var line lne = na
line.set_extend(lne, extend.none)
lne := line.new(LonDonOpen, openpriceLD, LonDonOpen + i_sess_LD_hours * 3600000
, openpriceLD, xloc.bar_time, extend.none, LDOpenColor, linestyle, i_linewidth)

if CMEOpen
if not CMEOpen[1]
openpriceCME := open
else
openpriceCME := math.max(open, openpriceCME)

if openpriceCME != openpriceCME[1] and i_show_sess_cme


var line lne = na
line.set_extend(lne, extend.none)
lne := line.new(CMEOpen, openpriceCME, CMEOpen + i_sess_CME_hours * 3600000 ,
openpriceCME, xloc.bar_time, extend.none, CMEOpenColor, linestyle, i_linewidth)

You might also like