Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=5
- // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
- // © GeorgHinn
- // original scrypt by boitoki
- indicator('.USD Sessions', overlay=true, max_boxes_count=500, max_labels_count=500, max_lines_count=500, max_bars_back=1000)
- g0 = 'GENERAL'
- g1 = '#1 SESSION'
- g2 = '#2 SESSION'
- g3 = '#3 SESSION'
- g4 = '#4 SESSION'
- g5 = '#5 SESSION'
- g7 = '#6 SESSION'
- g6 = 'LABELS'
- show = true
- pips = syminfo.mintick * 10
- max_bars = 500
- option_yes = 'Yes'
- option_no = ' No'
- fmt_price = '{0,number,#.#####}'
- fmt_pips = '{0,number,#.#}'
- icon_separator = ' • '
- c_none = color.new(color.black, 100)
- is_weekends = dayofweek == 7 or dayofweek == 1
- f_get_time_by_bar(bar_count) => timeframe.multiplier * bar_count * 60 * 1000
- f_get_period (_session, _start, _lookback) =>
- result = math.max(_start, 1)
- for i = result to _lookback
- if na(_session[i+1]) and _session[i]
- result := i+1
- break
- result
- f_get_label_position (_y, _side) =>
- switch _y
- 'top' => _side == 'outside' ? label.style_label_lower_left : label.style_label_upper_left
- 'bottom' => _side == 'outside' ? label.style_label_upper_left : label.style_label_lower_left
- f_get_day (n) =>
- switch n
- 1 => 'Sun'
- 2 => 'Mon'
- 3 => 'Tue'
- 4 => 'Wed'
- 5 => 'Thu'
- 6 => 'Fri'
- 7 => 'Sat'
- f_get_started (_session) => na(_session[1]) and _session
- f_get_ended (_session) => na(_session) and _session[1]
- // Timezone
- i_tz = input.string('GMT+1', 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', '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'], tooltip='e.g. \'America/New_York\', \'Asia/Tokyo\', \'GMT-4\', \'GMT+9\'...', group=g0)
- i_show_history = input.string(option_yes, 'History', options=[option_yes, option_no], group=g0) == option_yes
- i_lookback = 12 * 60
- // Sessions
- i_show_sess1 = input.bool(true, 'Session 1: ', group=g1, inline='session1_1') and show
- i_sess1_label = input.string('Asia', ' ', group=g1, inline='session1_1')
- i_sess1_color = input.color(#FFFFFF, ' ', group=g1, inline='session1_1')
- i_sess1 = input.session('0200-0800', 'Time', group=g1)
- i_sess1_extend = string(option_no)
- i_sess1_fib = string(option_no) != option_no
- i_sess1_op = string(option_no) != option_no and show
- i_show_sess2 = input.bool(true, 'Session 2: ', group=g2, inline='session2_1') and show
- i_sess2_label = input.string('Frankfurt', ' ', group=g2, inline='session2_1')
- i_sess2_color = input.color(#FFFFFF, ' ', group=g2, inline='session2_1')
- i_sess2 = input.session('0900-1000', 'Time', group=g2)
- i_sess2_extend = string(option_no)
- i_sess2_fib = string(option_no) != option_no
- i_sess2_op = string(option_no) != option_no and show
- i_show_sess3 = input.bool(true, 'Session 3: ', group=g3, inline='session3_1') and show
- i_sess3_label = input.string('London', ' ', group=g3, inline='session3_1')
- i_sess3_color = input.color(#FFFFFF, ' ', group=g3, inline='session3_1')
- i_sess3 = input.session('1000-1200', 'Time', group=g3)
- i_sess3_extend = string(option_no)
- i_sess3_fib = string(option_no) != option_no
- i_sess3_op = string(option_no) != option_no and show
- i_show_sess4 = input.bool(true, 'Session 4: ', group=g4, inline='session4_1') and show
- i_sess4_label = input.string('NY', ' ', group=g4, inline='session4_1')
- i_sess4_color = input.color(#FFFFFF, ' ', group=g4, inline='session4_1')
- i_sess4 = input.session('1500-1800', 'Time', group=g4)
- i_sess4_extend = string(option_no)
- i_sess4_fib = string(option_no) != option_no
- i_sess4_op = string(option_no) != option_no and show
- i_show_sess5 = input.bool(true, 'Session 5: ', group=g5, inline='session5_1') and show
- i_sess5_label = input.string('AM', ' ', group=g5, inline='session5_1')
- i_sess5_color = input.color(#FFFFFF, ' ', group=g5, inline='session5_1')
- i_sess5 = input.session('1530-1900', 'Time', group=g5)
- i_sess5_extend = string(option_no)
- i_sess5_fib = string(option_no) != option_no
- i_sess5_op = string(option_no) != option_no and show
- i_show_sess6 = input.bool(true, 'Session 6: ', group=g7, inline='session6_1') and show
- i_sess6_label = input.string('PM', ' ', group=g7, inline='session6_1')
- i_sess6_color = input.color(#FFFFFF, ' ', group=g7, inline='session6_1')
- i_sess6 = input.session('2000-2300', 'Time', group=g7)
- i_sess6_extend = string(option_no)
- i_sess6_fib = string(option_no) != option_no
- i_sess6_op = string(option_no) != option_no and show
- // Show & Styles
- i_sess_border_style = string(line.style_solid)
- i_sess_border_width = int(1)
- i_sess_bgopacity = int(100)
- // Labels
- i_label_show = input.bool(true, 'Show labels', inline='label_show', group=g6) and show
- i_label_size = str.lower(input.string('Small', '', options=['Auto', 'Tiny', 'Small', 'Normal', 'Large', 'Huge'], inline='label_show', group=g6))
- i_label_position_y = str.lower(input.string('Top', '', options=['Top', 'Bottom'], inline='label_show', group=g6))
- i_label_position_s = str.lower(input.string('Outside', '', options=['Inside', 'Outside'], inline='label_show', group=g6))
- i_label_position = f_get_label_position(i_label_position_y, i_label_position_s)
- i_label_format_name = input.bool(true, 'Name', inline='label_format', group=g6)
- i_label_format_day = input.bool(false, 'Day', inline='label_format', group=g6)
- i_label_format_price = input.bool(false, 'Price', inline='label_format', group=g6)
- i_label_format_pips = input.bool(false, 'Pips', inline='label_format', group=g6)
- // Oscillator mode
- i_osc = bool(false)
- i_osc_min = float(0)
- i_osc_max = float(100)
- f_render_label (_show, _session, _is_started, _color, _top, _bottom, _text, _delete_history) =>
- var label my_label = na
- var int start_time = na
- v_position_y = (i_label_position_y == 'top') ? _top : _bottom
- v_label = array.new_string()
- v_chg = _top - _bottom
- if _is_started
- start_time := time
- if i_label_format_name and not na(_text)
- array.push(v_label, _text)
- if i_label_format_day
- array.push(v_label, f_get_day(dayofweek(start_time, i_tz)))
- if i_label_format_price
- array.push(v_label, str.format(fmt_price, v_chg))
- if i_label_format_pips
- array.push(v_label, str.format(fmt_pips, v_chg / pips) + ' pips')
- if _show
- if _is_started
- my_label := label.new(time, v_position_y, array.join(v_label, icon_separator), textcolor=_color, color=c_none, size=i_label_size, style=i_label_position, xloc=xloc.bar_time)
- if _delete_history
- label.delete(my_label[1])
- if _session
- label.set_y(my_label, v_position_y)
- label.set_text(my_label, array.join(v_label, icon_separator))
- f_render_session (_show, _session, _is_started, _is_ended, _color, _top, _bottom, _extend, _is_extend, _delete_history) =>
- var box my_box = na
- var line line_1 = na
- var line line_2 = na
- x0_1 = ta.valuewhen(na(_session[1]) and _session, bar_index, 1)
- x0_2 = ta.valuewhen(na(_session) and _session[1], bar_index, 0)
- var x1 = 0
- var x2 = 0
- var session_open = 0.0
- var session_high = 0.0
- var session_low = 0.0
- if _show
- if _is_started
- diff = math.abs(x0_2 - x0_1)
- x1 := bar_index
- x2 := bar_index + (math.min(diff, max_bars))
- line_1 := line.new(x1, _top, x2, _top)
- line.set_color(line_1, _color)
- line.set_style(line_1, i_sess_border_style)
- line_2 := line.new(x1, _bottom, x2, _bottom)
- line.set_color(line_2, _color)
- line.set_style(line_2, i_sess_border_style)
- session_open := open
- session_high := _top
- session_low := _bottom
- if _delete_history
- line.delete(line_1[1])
- line.delete(line_2[1])
- else if _session
- line.set_y1(line_1, _top)
- line.set_y2(line_1, _top)
- line.set_y1(line_2, _bottom)
- line.set_y2(line_2, _bottom)
- session_high := _top
- session_low := _bottom
- else if _is_ended
- session_open := na
- [x1, x2, session_open, session_high, session_low]
- draw (_show, _session, _color, _label, _extend, _show_fib, _show_op, _lookback) =>
- max = f_get_period(_session, 1, _lookback)
- top = ta.highest(high, max)
- bottom = ta.lowest(low, max)
- if i_osc
- top := i_osc_max
- bottom := i_osc_min
- is_started = f_get_started(_session)
- is_ended = f_get_ended(_session)
- is_extend = _extend != option_no
- delete_history = (not i_show_history) or is_extend
- [x1, x2, _open, _high, _low] = f_render_session(_show, _session, is_started, is_ended, _color, top, bottom, _extend, is_extend, delete_history)
- if i_label_show
- f_render_label(_show, _session, is_started, _color, top, bottom, _label, delete_history)
- [_session, _open, _high, _low]
- string tz = (i_tz == option_no or i_tz == '') ? na : i_tz
- int sess1 = time(timeframe.period, i_sess1, tz)
- int sess2 = time(timeframe.period, i_sess2, tz)
- int sess3 = time(timeframe.period, i_sess3, tz)
- int sess4 = time(timeframe.period, i_sess4, tz)
- int sess5 = time(timeframe.period, i_sess5, tz)
- int sess6 = time(timeframe.period, i_sess6, tz)
- [is_sess1, sess1_open, sess1_high, sess1_low] = draw(i_show_sess1, sess1, i_sess1_color, i_sess1_label, i_sess1_extend, i_sess1_fib, i_sess1_op, i_lookback)
- [is_sess2, sess2_open, sess2_high, sess2_low] = draw(i_show_sess2, sess2, i_sess2_color, i_sess2_label, i_sess2_extend, i_sess2_fib, i_sess2_op, i_lookback)
- [is_sess3, sess3_open, sess3_high, sess3_low] = draw(i_show_sess3, sess3, i_sess3_color, i_sess3_label, i_sess3_extend, i_sess3_fib, i_sess3_op, i_lookback)
- [is_sess4, sess4_open, sess4_high, sess4_low] = draw(i_show_sess4, sess4, i_sess4_color, i_sess4_label, i_sess4_extend, i_sess4_fib, i_sess4_op, i_lookback)
- [is_sess5, sess5_open, sess5_high, sess5_low] = draw(i_show_sess5, sess5, i_sess5_color, i_sess5_label, i_sess5_extend, i_sess5_fib, i_sess5_op, i_lookback)
- [is_sess6, sess6_open, sess6_high, sess6_low] = draw(i_show_sess6, sess6, i_sess6_color, i_sess6_label, i_sess6_extend, i_sess6_fib, i_sess6_op, i_lookback)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement