Advertisement
xmd79

USD Sessions

Jan 5th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.43 KB | None | 0 0
  1.  
  2. //@version=5
  3.  
  4.  
  5. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
  6. // © GeorgHinn
  7. // original scrypt by boitoki
  8.  
  9.  
  10. indicator('.USD Sessions', overlay=true, max_boxes_count=500, max_labels_count=500, max_lines_count=500, max_bars_back=1000)
  11.  
  12. g0 = 'GENERAL'
  13. g1 = '#1 SESSION'
  14. g2 = '#2 SESSION'
  15. g3 = '#3 SESSION'
  16. g4 = '#4 SESSION'
  17. g5 = '#5 SESSION'
  18. g7 = '#6 SESSION'
  19. g6 = 'LABELS'
  20.  
  21.  
  22. show = true
  23. pips = syminfo.mintick * 10
  24. max_bars = 500
  25.  
  26. option_yes = 'Yes'
  27. option_no = ' No'
  28.  
  29. fmt_price = '{0,number,#.#####}'
  30. fmt_pips = '{0,number,#.#}'
  31.  
  32. icon_separator = ' • '
  33.  
  34. c_none = color.new(color.black, 100)
  35.  
  36. is_weekends = dayofweek == 7 or dayofweek == 1
  37.  
  38.  
  39. f_get_time_by_bar(bar_count) => timeframe.multiplier * bar_count * 60 * 1000
  40.  
  41. f_get_period (_session, _start, _lookback) =>
  42. result = math.max(_start, 1)
  43. for i = result to _lookback
  44. if na(_session[i+1]) and _session[i]
  45. result := i+1
  46. break
  47. result
  48.  
  49. f_get_label_position (_y, _side) =>
  50. switch _y
  51. 'top' => _side == 'outside' ? label.style_label_lower_left : label.style_label_upper_left
  52. 'bottom' => _side == 'outside' ? label.style_label_upper_left : label.style_label_lower_left
  53.  
  54. f_get_day (n) =>
  55. switch n
  56. 1 => 'Sun'
  57. 2 => 'Mon'
  58. 3 => 'Tue'
  59. 4 => 'Wed'
  60. 5 => 'Thu'
  61. 6 => 'Fri'
  62. 7 => 'Sat'
  63.  
  64. f_get_started (_session) => na(_session[1]) and _session
  65.  
  66. f_get_ended (_session) => na(_session) and _session[1]
  67.  
  68. // Timezone
  69. 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)
  70. i_show_history = input.string(option_yes, 'History', options=[option_yes, option_no], group=g0) == option_yes
  71. i_lookback = 12 * 60
  72.  
  73. // Sessions
  74. i_show_sess1 = input.bool(true, 'Session 1: ', group=g1, inline='session1_1') and show
  75. i_sess1_label = input.string('Asia', ' ', group=g1, inline='session1_1')
  76. i_sess1_color = input.color(#FFFFFF, ' ', group=g1, inline='session1_1')
  77. i_sess1 = input.session('0200-0800', 'Time', group=g1)
  78. i_sess1_extend = string(option_no)
  79. i_sess1_fib = string(option_no) != option_no
  80. i_sess1_op = string(option_no) != option_no and show
  81.  
  82. i_show_sess2 = input.bool(true, 'Session 2: ', group=g2, inline='session2_1') and show
  83. i_sess2_label = input.string('Frankfurt', ' ', group=g2, inline='session2_1')
  84. i_sess2_color = input.color(#FFFFFF, ' ', group=g2, inline='session2_1')
  85. i_sess2 = input.session('0900-1000', 'Time', group=g2)
  86. i_sess2_extend = string(option_no)
  87. i_sess2_fib = string(option_no) != option_no
  88. i_sess2_op = string(option_no) != option_no and show
  89.  
  90. i_show_sess3 = input.bool(true, 'Session 3: ', group=g3, inline='session3_1') and show
  91. i_sess3_label = input.string('London', ' ', group=g3, inline='session3_1')
  92. i_sess3_color = input.color(#FFFFFF, ' ', group=g3, inline='session3_1')
  93. i_sess3 = input.session('1000-1200', 'Time', group=g3)
  94. i_sess3_extend = string(option_no)
  95. i_sess3_fib = string(option_no) != option_no
  96. i_sess3_op = string(option_no) != option_no and show
  97.  
  98. i_show_sess4 = input.bool(true, 'Session 4: ', group=g4, inline='session4_1') and show
  99. i_sess4_label = input.string('NY', ' ', group=g4, inline='session4_1')
  100. i_sess4_color = input.color(#FFFFFF, ' ', group=g4, inline='session4_1')
  101. i_sess4 = input.session('1500-1800', 'Time', group=g4)
  102. i_sess4_extend = string(option_no)
  103. i_sess4_fib = string(option_no) != option_no
  104. i_sess4_op = string(option_no) != option_no and show
  105.  
  106. i_show_sess5 = input.bool(true, 'Session 5: ', group=g5, inline='session5_1') and show
  107. i_sess5_label = input.string('AM', ' ', group=g5, inline='session5_1')
  108. i_sess5_color = input.color(#FFFFFF, ' ', group=g5, inline='session5_1')
  109. i_sess5 = input.session('1530-1900', 'Time', group=g5)
  110. i_sess5_extend = string(option_no)
  111. i_sess5_fib = string(option_no) != option_no
  112. i_sess5_op = string(option_no) != option_no and show
  113.  
  114. i_show_sess6 = input.bool(true, 'Session 6: ', group=g7, inline='session6_1') and show
  115. i_sess6_label = input.string('PM', ' ', group=g7, inline='session6_1')
  116. i_sess6_color = input.color(#FFFFFF, ' ', group=g7, inline='session6_1')
  117. i_sess6 = input.session('2000-2300', 'Time', group=g7)
  118. i_sess6_extend = string(option_no)
  119. i_sess6_fib = string(option_no) != option_no
  120. i_sess6_op = string(option_no) != option_no and show
  121.  
  122. // Show & Styles
  123. i_sess_border_style = string(line.style_solid)
  124. i_sess_border_width = int(1)
  125. i_sess_bgopacity = int(100)
  126.  
  127.  
  128. // Labels
  129. i_label_show = input.bool(true, 'Show labels', inline='label_show', group=g6) and show
  130. i_label_size = str.lower(input.string('Small', '', options=['Auto', 'Tiny', 'Small', 'Normal', 'Large', 'Huge'], inline='label_show', group=g6))
  131. i_label_position_y = str.lower(input.string('Top', '', options=['Top', 'Bottom'], inline='label_show', group=g6))
  132. i_label_position_s = str.lower(input.string('Outside', '', options=['Inside', 'Outside'], inline='label_show', group=g6))
  133. i_label_position = f_get_label_position(i_label_position_y, i_label_position_s)
  134. i_label_format_name = input.bool(true, 'Name', inline='label_format', group=g6)
  135. i_label_format_day = input.bool(false, 'Day', inline='label_format', group=g6)
  136. i_label_format_price = input.bool(false, 'Price', inline='label_format', group=g6)
  137. i_label_format_pips = input.bool(false, 'Pips', inline='label_format', group=g6)
  138.  
  139.  
  140. // Oscillator mode
  141. i_osc = bool(false)
  142. i_osc_min = float(0)
  143. i_osc_max = float(100)
  144.  
  145.  
  146. f_render_label (_show, _session, _is_started, _color, _top, _bottom, _text, _delete_history) =>
  147. var label my_label = na
  148. var int start_time = na
  149.  
  150. v_position_y = (i_label_position_y == 'top') ? _top : _bottom
  151. v_label = array.new_string()
  152. v_chg = _top - _bottom
  153.  
  154. if _is_started
  155. start_time := time
  156.  
  157. if i_label_format_name and not na(_text)
  158. array.push(v_label, _text)
  159.  
  160. if i_label_format_day
  161. array.push(v_label, f_get_day(dayofweek(start_time, i_tz)))
  162.  
  163. if i_label_format_price
  164. array.push(v_label, str.format(fmt_price, v_chg))
  165.  
  166. if i_label_format_pips
  167. array.push(v_label, str.format(fmt_pips, v_chg / pips) + ' pips')
  168.  
  169. if _show
  170. if _is_started
  171. 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)
  172.  
  173. if _delete_history
  174. label.delete(my_label[1])
  175.  
  176. if _session
  177. label.set_y(my_label, v_position_y)
  178. label.set_text(my_label, array.join(v_label, icon_separator))
  179.  
  180. f_render_session (_show, _session, _is_started, _is_ended, _color, _top, _bottom, _extend, _is_extend, _delete_history) =>
  181. var box my_box = na
  182. var line line_1 = na
  183. var line line_2 = na
  184.  
  185. x0_1 = ta.valuewhen(na(_session[1]) and _session, bar_index, 1)
  186. x0_2 = ta.valuewhen(na(_session) and _session[1], bar_index, 0)
  187. var x1 = 0
  188. var x2 = 0
  189. var session_open = 0.0
  190. var session_high = 0.0
  191. var session_low = 0.0
  192.  
  193. if _show
  194. if _is_started
  195. diff = math.abs(x0_2 - x0_1)
  196. x1 := bar_index
  197. x2 := bar_index + (math.min(diff, max_bars))
  198. line_1 := line.new(x1, _top, x2, _top)
  199. line.set_color(line_1, _color)
  200. line.set_style(line_1, i_sess_border_style)
  201.  
  202. line_2 := line.new(x1, _bottom, x2, _bottom)
  203. line.set_color(line_2, _color)
  204. line.set_style(line_2, i_sess_border_style)
  205.  
  206. session_open := open
  207. session_high := _top
  208. session_low := _bottom
  209.  
  210. if _delete_history
  211. line.delete(line_1[1])
  212. line.delete(line_2[1])
  213.  
  214. else if _session
  215. line.set_y1(line_1, _top)
  216. line.set_y2(line_1, _top)
  217. line.set_y1(line_2, _bottom)
  218. line.set_y2(line_2, _bottom)
  219.  
  220. session_high := _top
  221. session_low := _bottom
  222.  
  223. else if _is_ended
  224. session_open := na
  225.  
  226. [x1, x2, session_open, session_high, session_low]
  227.  
  228. draw (_show, _session, _color, _label, _extend, _show_fib, _show_op, _lookback) =>
  229. max = f_get_period(_session, 1, _lookback)
  230. top = ta.highest(high, max)
  231. bottom = ta.lowest(low, max)
  232.  
  233. if i_osc
  234. top := i_osc_max
  235. bottom := i_osc_min
  236.  
  237. is_started = f_get_started(_session)
  238. is_ended = f_get_ended(_session)
  239. is_extend = _extend != option_no
  240.  
  241. delete_history = (not i_show_history) or is_extend
  242. [x1, x2, _open, _high, _low] = f_render_session(_show, _session, is_started, is_ended, _color, top, bottom, _extend, is_extend, delete_history)
  243.  
  244. if i_label_show
  245. f_render_label(_show, _session, is_started, _color, top, bottom, _label, delete_history)
  246. [_session, _open, _high, _low]
  247.  
  248.  
  249. string tz = (i_tz == option_no or i_tz == '') ? na : i_tz
  250. int sess1 = time(timeframe.period, i_sess1, tz)
  251. int sess2 = time(timeframe.period, i_sess2, tz)
  252. int sess3 = time(timeframe.period, i_sess3, tz)
  253. int sess4 = time(timeframe.period, i_sess4, tz)
  254. int sess5 = time(timeframe.period, i_sess5, tz)
  255. int sess6 = time(timeframe.period, i_sess6, tz)
  256.  
  257. [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)
  258. [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)
  259. [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)
  260. [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)
  261. [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)
  262. [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)
  263.  
  264.  
  265.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement