ACE444

BB - LTF

Mar 7th, 2026
1,405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.31 KB | None | 0 0
  1. //@version=6
  2. indicator("BB LTF", overlay=true, max_boxes_count=500, max_lines_count=500)
  3.  
  4. // ─────────────────────────────────────────────────────────
  5. // INPUTS
  6. // ─────────────────────────────────────────────────────────
  7. lookback = input.int(100, "Lookback (bars)", minval=10, maxval=500, group="General")
  8. ob_min_overlap = input.float(50, "Min FVG overlap % of OB", minval=1, maxval=100, group="General")
  9. fvg_strict_pct = input.float(25, "x2+ block mitigation threshold %", minval=1, maxval=49, step=1, group="General")
  10. bb_col = input.color(color.new(#0097a7, 75), "BB colour (x1)", group="Visual")
  11. bb_col_x2 = input.color(color.new(#0097a7, 75), "BB colour (x2)", group="Visual")
  12. bb_col_x3 = input.color(color.new(#0097a7, 75), "BB colour (x3)", group="Visual")
  13. bb_col_x4 = input.color(color.new(#0097a7, 75), "BB colour (x4+)",group="Visual")
  14. mid_col = input.color(color.new(#7a808d, 20), "Midline colour", group="Visual")
  15. show_mid = input.bool(false, "Show midline", group="Visual")
  16. show_labels = input.bool(true, "Show labels", group="Visual")
  17. border_col = input.color(color.new(#000000, 100), "Border colour", group="Visual")
  18. border_width = input.int(1, "Border width", minval=1, maxval=5, group="Visual")
  19. show_current_only = input.bool(false, "Show current TF only", group="Timeframes")
  20. show_1m = input.bool(false, "1M", group="Timeframes", inline="tfs1")
  21. show_2m = input.bool(false, "2M", group="Timeframes", inline="tfs1")
  22. show_5m = input.bool(false, "5M", group="Timeframes", inline="tfs1")
  23. show_10m = input.bool(false, "10M", group="Timeframes", inline="tfs1")
  24. show_15m = input.bool(false, "15M", group="Timeframes", inline="tfs2")
  25. show_30m = input.bool(false, "30M", group="Timeframes", inline="tfs2")
  26. show_1h = input.bool(true, "1H", group="Timeframes", inline="tfs2")
  27.  
  28. // ─────────────────────────────────────────────────────────
  29. // HELPERS
  30. // ─────────────────────────────────────────────────────────
  31. body_high(i) => math.max(open[i], close[i])
  32. body_low(i) => math.min(open[i], close[i])
  33. is_bull(i) => close[i] > open[i]
  34. is_bear(i) => close[i] < open[i]
  35.  
  36. // ─────────────────────────────────────────────────────────
  37. // CORE LOGIC
  38. // Returns event string: "B|top|bot|mid|left_t|is_bear|is_partial|fvg_cnt"
  39. // or "D|top|bot|mid|left_t|right_t|is_bear|is_partial|fvg_cnt"
  40. // Multiple events separated by ";"
  41. // ─────────────────────────────────────────────────────────
  42. bb_logic(simple int lb, simple float min_overlap, simple float strict_pct) =>
  43. var float[] a_top = array.new<float>()
  44. var float[] a_bot = array.new<float>()
  45. var float[] a_mid = array.new<float>()
  46. var int[] a_left = array.new<int>()
  47. var bool[] a_is_bear = array.new<bool>()
  48. var bool[] a_is_partial = array.new<bool>()
  49. var int[] a_fvg_cnt = array.new<int>()
  50.  
  51. var float[] p_top = array.new<float>()
  52. var float[] p_bot = array.new<float>()
  53. var float[] p_mid = array.new<float>()
  54. var int[] p_left = array.new<int>()
  55. var bool[] p_is_bear = array.new<bool>()
  56. var bool[] p_is_partial = array.new<bool>()
  57. var int[] p_fvg_cnt = array.new<int>()
  58.  
  59. events = ""
  60.  
  61. // ── Resolve pending
  62. if array.size(p_top) > 0
  63. j = 0
  64. while j < array.size(p_top)
  65. mid_level = array.get(p_mid, j)
  66. fvg_cnt_p = array.get(p_fvg_cnt, j)
  67. p_top_v = array.get(p_top, j)
  68. p_bot_v = array.get(p_bot, j)
  69. p_bear_v = array.get(p_is_bear, j)
  70. eff_p_lvl = fvg_cnt_p >= 2 ? (p_bear_v ? p_top_v - (p_top_v - p_bot_v) * (strict_pct / 100) : p_bot_v + (p_top_v - p_bot_v) * (strict_pct / 100)) : mid_level
  71. bear_fvg = low[2] > high[0]
  72. bull_fvg = high[2] < low[0]
  73. c2_top = math.max(open[1], close[1])
  74. c2_bot = math.min(open[1], close[1])
  75. c2_crosses = c2_top >= eff_p_lvl and c2_bot <= eff_p_lvl
  76. fvg_exempt = (bear_fvg or bull_fvg) and c2_crosses
  77. if fvg_exempt
  78. new_cnt = array.get(p_fvg_cnt, j) + 1
  79. array.push(a_top, array.get(p_top, j))
  80. array.push(a_bot, array.get(p_bot, j))
  81. array.push(a_mid, array.get(p_mid, j))
  82. array.push(a_left, array.get(p_left, j))
  83. array.push(a_is_bear, array.get(p_is_bear, j))
  84. array.push(a_is_partial, array.get(p_is_partial, j))
  85. array.push(a_fvg_cnt, new_cnt)
  86. // Fire update event so chart side can refresh the label
  87. u = "U|" + str.tostring(array.get(p_left, j)) + "|" + str.tostring(new_cnt) + "|" + (array.get(p_is_partial, j) ? "1" : "0")
  88. events := events == "" ? u : events + ";" + u
  89. else
  90. e = "D|" + str.tostring(array.get(p_top, j)) + "|" + str.tostring(array.get(p_bot, j)) + "|" + str.tostring(array.get(p_mid, j)) + "|" + str.tostring(array.get(p_left, j)) + "|" + str.tostring(time[1]) + "|" + (array.get(p_is_bear, j) ? "1" : "0") + "|" + (array.get(p_is_partial, j) ? "1" : "0") + "|" + str.tostring(array.get(p_fvg_cnt, j))
  91. events := events == "" ? e : events + ";" + e
  92. array.remove(p_top, j)
  93. array.remove(p_bot, j)
  94. array.remove(p_mid, j)
  95. array.remove(p_left, j)
  96. array.remove(p_is_bear, j)
  97. array.remove(p_is_partial, j)
  98. array.remove(p_fvg_cnt, j)
  99.  
  100. // ── Check active
  101. if array.size(a_top) > 0
  102. i = 0
  103. while i < array.size(a_top)
  104. mid_level = array.get(a_mid, i)
  105. fvg_cnt_a = array.get(a_fvg_cnt, i)
  106. a_top_v = array.get(a_top, i)
  107. a_bot_v = array.get(a_bot, i)
  108. a_bear_v = array.get(a_is_bear, i)
  109. // For x2+ blocks use stricter threshold — % from near edge instead of midpoint
  110. // Bearish BB: price approaches from above, strict level is just below top
  111. // Bullish BB: price approaches from below, strict level is just above bottom
  112. eff_level = fvg_cnt_a >= 2 ? (a_bear_v ? a_top_v - (a_top_v - a_bot_v) * (strict_pct / 100) : a_bot_v + (a_top_v - a_bot_v) * (strict_pct / 100)) : mid_level
  113. body_top_now = math.max(open, close)
  114. body_bot_now = math.min(open, close)
  115. body_crosses = body_top_now >= eff_level and body_bot_now <= eff_level
  116. wick_crosses = (high >= eff_level and low <= eff_level) and not body_crosses
  117. if wick_crosses
  118. e = "D|" + str.tostring(array.get(a_top, i)) + "|" + str.tostring(array.get(a_bot, i)) + "|" + str.tostring(array.get(a_mid, i)) + "|" + str.tostring(array.get(a_left, i)) + "|" + str.tostring(time) + "|" + (array.get(a_is_bear, i) ? "1" : "0") + "|" + (array.get(a_is_partial, i) ? "1" : "0") + "|" + str.tostring(array.get(a_fvg_cnt, i))
  119. events := events == "" ? e : events + ";" + e
  120. array.remove(a_top, i)
  121. array.remove(a_bot, i)
  122. array.remove(a_mid, i)
  123. array.remove(a_left, i)
  124. array.remove(a_is_bear, i)
  125. array.remove(a_is_partial, i)
  126. array.remove(a_fvg_cnt, i)
  127. else if body_crosses
  128. array.push(p_top, array.get(a_top, i))
  129. array.push(p_bot, array.get(a_bot, i))
  130. array.push(p_mid, array.get(a_mid, i))
  131. array.push(p_left, array.get(a_left, i))
  132. array.push(p_is_bear, array.get(a_is_bear, i))
  133. array.push(p_is_partial, array.get(a_is_partial, i))
  134. array.push(p_fvg_cnt, array.get(a_fvg_cnt, i))
  135. array.remove(a_top, i)
  136. array.remove(a_bot, i)
  137. array.remove(a_mid, i)
  138. array.remove(a_left, i)
  139. array.remove(a_is_bear, i)
  140. array.remove(a_is_partial, i)
  141. array.remove(a_fvg_cnt, i)
  142. else
  143. i += 1
  144.  
  145. // ── Detect new BBs
  146. if bar_index >= lb + 3
  147. fvg_c1 = 2
  148. fvg_c2 = 1
  149. fvg_c3 = 0
  150. fvg_bear_top = low[fvg_c1]
  151. fvg_bear_bot = high[fvg_c3]
  152. valid_bear_fvg = is_bear(fvg_c2) and fvg_bear_top > fvg_bear_bot
  153. fvg_bull_bot = high[fvg_c1]
  154. fvg_bull_top = low[fvg_c3]
  155. valid_bull_fvg = is_bull(fvg_c2) and fvg_bull_top > fvg_bull_bot
  156.  
  157. if valid_bear_fvg or valid_bull_fvg
  158. fvg_top = valid_bear_fvg ? fvg_bear_top : fvg_bull_top
  159. fvg_bot = valid_bear_fvg ? fvg_bear_bot : fvg_bull_bot
  160. looking_for_bear_ob = valid_bear_fvg
  161.  
  162. // Precompute prefix min/max arrays for the lookback window once,
  163. // so the inner mitigation check (was O(n)) becomes O(1) per ob_i.
  164. // prefix_low[k] = lowest low from bar fvg_c1+1 to bar fvg_c1+1+k
  165. // prefix_high[k] = highest high from bar fvg_c1+1 to bar fvg_c1+1+k
  166. prefix_low = array.new<float>()
  167. prefix_high = array.new<float>()
  168. running_low = high[fvg_c1 + 1] // initialise to opposite extreme
  169. running_high = low[fvg_c1 + 1]
  170. for k = fvg_c1 + 1 to lb - 1
  171. running_low := math.min(running_low, low[k])
  172. running_high := math.max(running_high, high[k])
  173. array.push(prefix_low, running_low)
  174. array.push(prefix_high, running_high)
  175.  
  176. for ob_i = fvg_c1 + 1 to lb - 1
  177. ob_engulf = ob_i - 1
  178. ob_colour_match = (looking_for_bear_ob and is_bear(ob_i)) or (not looking_for_bear_ob and is_bull(ob_i))
  179. if ob_colour_match
  180. ob_bh = body_high(ob_i)
  181. ob_bl = body_low(ob_i)
  182. ob_mid = (ob_bh + ob_bl) / 2
  183. b_is_opposite = looking_for_bear_ob ? is_bull(ob_engulf) : is_bear(ob_engulf)
  184. b_closes_beyond = looking_for_bear_ob ? close[ob_engulf] > ob_bh : close[ob_engulf] < ob_bl
  185. if b_is_opposite and b_closes_beyond
  186. mitigated = false
  187. deepest_high = ob_bl
  188. deepest_low = ob_bh
  189. // Use prefix arrays for O(1) range min/max instead of inner loop
  190. // Range to check: bars fvg_c1+1 to ob_engulf-1
  191. // prefix arrays are 0-indexed from fvg_c1+1, so:
  192. // index of ob_engulf-1 in prefix = (ob_engulf-1) - (fvg_c1+1) = ob_engulf - fvg_c1 - 2
  193. range_end_idx = ob_engulf - fvg_c1 - 2
  194. if ob_engulf >= fvg_c1 + 2 and range_end_idx >= 0
  195. range_low = array.get(prefix_low, range_end_idx)
  196. range_high = array.get(prefix_high, range_end_idx)
  197. // Check if any bar in range entered the OB body
  198. if range_high > ob_bl and range_low < ob_bh
  199. if looking_for_bear_ob
  200. if range_low <= ob_mid
  201. mitigated := true
  202. else
  203. deepest_low := range_low
  204. else
  205. if range_high >= ob_mid
  206. mitigated := true
  207. else
  208. deepest_high := range_high
  209. if not mitigated
  210. overlap_top = math.min(ob_bh, fvg_top)
  211. overlap_bot = math.max(ob_bl, fvg_bot)
  212. overlap_range = overlap_top - overlap_bot
  213. ob_range = ob_bh - ob_bl
  214. overlap_pct = ob_range > 0 ? (overlap_range / ob_range) * 100 : 0.0
  215. if overlap_pct >= min_overlap
  216. draw_top = overlap_top
  217. draw_bot = overlap_bot
  218. if looking_for_bear_ob
  219. draw_top := math.min(draw_top, deepest_low)
  220. else
  221. draw_bot := math.max(draw_bot, deepest_high)
  222. draw_mid = (draw_top + draw_bot) / 2
  223. ob_touched = looking_for_bear_ob ? deepest_low < ob_bh : deepest_high > ob_bl
  224. is_partial = ob_touched or overlap_pct < 100
  225. array.push(a_top, draw_top)
  226. array.push(a_bot, draw_bot)
  227. array.push(a_mid, draw_mid)
  228. array.push(a_left, time[ob_i])
  229. array.push(a_is_bear, looking_for_bear_ob)
  230. array.push(a_is_partial, is_partial)
  231. array.push(a_fvg_cnt, 1)
  232. e = "B|" + str.tostring(draw_top) + "|" + str.tostring(draw_bot) + "|" + str.tostring(draw_mid) + "|" + str.tostring(time[ob_i]) + "|" + (looking_for_bear_ob ? "1" : "0") + "|" + (is_partial ? "1" : "0") + "|1"
  233. events := events == "" ? e : events + ";" + e
  234. events
  235.  
  236. // ─────────────────────────────────────────────────────────
  237. // SECURITY CALLS
  238. // ─────────────────────────────────────────────────────────
  239. chart_secs = timeframe.in_seconds()
  240.  
  241. safe_tf(simple string tf) =>
  242. timeframe.in_seconds(tf) <= chart_secs ? tf : timeframe.period
  243.  
  244. use_ltf_1m = chart_secs > timeframe.in_seconds("1")
  245. use_ltf_2m = chart_secs > timeframe.in_seconds("2")
  246. use_ltf_5m = chart_secs > timeframe.in_seconds("5")
  247. use_ltf_10m = chart_secs > timeframe.in_seconds("10")
  248. use_ltf_15m = chart_secs > timeframe.in_seconds("15")
  249. use_ltf_30m = chart_secs > timeframe.in_seconds("30")
  250. use_ltf_1h = chart_secs > timeframe.in_seconds("60")
  251.  
  252. events_1m_std = request.security(syminfo.tickerid, "1", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  253. events_2m_std = request.security(syminfo.tickerid, "2", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  254. events_5m_std = request.security(syminfo.tickerid, "5", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  255. events_10m_std = request.security(syminfo.tickerid, "10", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  256. events_15m_std = request.security(syminfo.tickerid, "15", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  257. events_30m_std = request.security(syminfo.tickerid, "30", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  258. events_1h_std = request.security(syminfo.tickerid, "60", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  259.  
  260. events_1m_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("1"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  261. events_2m_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("2"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  262. events_5m_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("5"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  263. events_10m_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("10"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  264. events_15m_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("15"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  265. events_30m_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("30"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  266. events_1h_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("60"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  267.  
  268. // ─────────────────────────────────────────────────────────
  269. // CHART-SIDE STATE
  270. // ─────────────────────────────────────────────────────────
  271. var box[] active_boxes = array.new<box>()
  272. var line[] active_mids = array.new<line>()
  273. var int[] seen_born = array.new<int>()
  274. var int[] seen_died = array.new<int>()
  275.  
  276. // Trim dedup arrays to a rolling window to reduce replay desync.
  277. // Keeps the 500 most recent entries — enough to cover normal lookback
  278. // while allowing replay re-fires of older bars to be reprocessed.
  279. max_dedup = 500
  280. if array.size(seen_born) > max_dedup
  281. array.shift(seen_born)
  282. if array.size(seen_died) > max_dedup
  283. array.shift(seen_died)
  284.  
  285. if array.size(active_boxes) > 0
  286. for k = 0 to array.size(active_boxes) - 1
  287. box.set_right(array.get(active_boxes, k), timenow)
  288. if array.size(active_mids) > 0
  289. for k = 0 to array.size(active_mids) - 1
  290. line.set_x2(array.get(active_mids, k), timenow)
  291.  
  292. // ─────────────────────────────────────────────────────────
  293. // EVENT PROCESSOR
  294. // ─────────────────────────────────────────────────────────
  295. pick_col(fvg_cnt) =>
  296. fvg_cnt == 1 ? bb_col : fvg_cnt == 2 ? bb_col_x2 : fvg_cnt == 3 ? bb_col_x3 : bb_col_x4
  297.  
  298. process_events(events, lbl, show_toggle, tf_str, tf_secs) =>
  299. if events != "" and show_toggle
  300. norm_tf = switch tf_str
  301. "D" => "1D"
  302. "W" => "1W"
  303. => tf_str
  304. visible = not show_current_only or timeframe.period == norm_tf
  305. entries = str.split(events, ";")
  306. for entry in entries
  307. if entry != ""
  308. parts = str.split(entry, "|")
  309. etype = array.get(parts, 0)
  310.  
  311. if etype == "U"
  312. left_t = int(str.tonumber(array.get(parts, 1)))
  313. fvg_cnt = int(str.tonumber(array.get(parts, 2)))
  314. is_part = array.get(parts, 3) == "1"
  315. // Update label and colour on matching active box
  316. i = 0
  317. while i < array.size(active_boxes)
  318. if int(box.get_left(array.get(active_boxes, i))) == left_t
  319. prefix = is_part ? "p" : ""
  320. base_lbl = lbl + " " + prefix + "BB"
  321. disp_lbl = fvg_cnt > 1 ? base_lbl + " x" + str.tostring(fvg_cnt) : base_lbl
  322. box.set_text(array.get(active_boxes, i), show_labels ? disp_lbl : "")
  323. box.set_bgcolor(array.get(active_boxes, i), pick_col(fvg_cnt))
  324. i += 1
  325. else
  326. i += 1
  327.  
  328. if etype == "B"
  329. top = str.tonumber(array.get(parts, 1))
  330. bot = str.tonumber(array.get(parts, 2))
  331. mid_v = str.tonumber(array.get(parts, 3))
  332. left_t = int(str.tonumber(array.get(parts, 4)))
  333. is_part = array.get(parts, 6) == "1"
  334. fvg_cnt = int(str.tonumber(array.get(parts, 7)))
  335. if array.indexof(seen_born, left_t) < 0
  336. array.push(seen_born, left_t)
  337. if visible
  338. prefix = is_part ? "p" : ""
  339. base_lbl = lbl + " " + prefix + "BB"
  340. disp_lbl = fvg_cnt > 1 ? base_lbl + " x" + str.tostring(fvg_cnt) : base_lbl
  341. b = box.new(xloc=xloc.bar_time, left=left_t, right=timenow, top=top, bottom=bot, bgcolor=pick_col(fvg_cnt), border_color=border_col, border_width=border_width, extend=extend.right, text=show_labels ? disp_lbl : "", text_color=color.new(#7a808d, 20), text_size=size.small, text_halign=text.align_center, text_valign=text.align_center)
  342. l = line.new(xloc=xloc.bar_time, x1=left_t, y1=mid_v, x2=timenow, y2=mid_v, color=show_mid ? mid_col : color.new(color.white, 100), style=line.style_solid, extend=extend.right)
  343. array.push(active_boxes, b)
  344. array.push(active_mids, l)
  345.  
  346. if etype == "D"
  347. top = str.tonumber(array.get(parts, 1))
  348. bot = str.tonumber(array.get(parts, 2))
  349. mid_v = str.tonumber(array.get(parts, 3))
  350. left_t = int(str.tonumber(array.get(parts, 4)))
  351. right_t = int(str.tonumber(array.get(parts, 5)))
  352. is_part = array.get(parts, 7) == "1"
  353. fvg_cnt = int(str.tonumber(array.get(parts, 8)))
  354. already_died = array.indexof(seen_died, left_t) >= 0
  355. if not already_died
  356. array.push(seen_died, left_t)
  357. i = 0
  358. while i < array.size(active_boxes)
  359. if int(box.get_left(array.get(active_boxes, i))) == left_t
  360. box.delete(array.get(active_boxes, i))
  361. line.delete(array.get(active_mids, i))
  362. array.remove(active_boxes, i)
  363. array.remove(active_mids, i)
  364. else
  365. i += 1
  366. if not already_died and visible
  367. prefix = is_part ? "p" : ""
  368. base_lbl = lbl + " " + prefix + "BB"
  369. disp_lbl = fvg_cnt > 1 ? base_lbl + " x" + str.tostring(fvg_cnt) : base_lbl
  370. // Shift both edges left by one chart bar when source TF < chart TF
  371. shift = tf_secs < chart_secs ? timeframe.in_seconds() * 1000 : 0
  372. adj_left = left_t - shift
  373. adj_right = right_t - shift
  374. box.new(xloc=xloc.bar_time, left=adj_left, right=adj_right, top=top, bottom=bot, bgcolor=pick_col(fvg_cnt), border_color=border_col, border_width=border_width, extend=extend.none, text=show_labels ? disp_lbl : "", text_color=color.new(#7a808d, 20), text_size=size.small, text_halign=text.align_center, text_valign=text.align_center)
  375. line.new(xloc=xloc.bar_time, x1=adj_left, y1=mid_v, x2=adj_right, y2=mid_v, color=show_mid ? mid_col : color.new(color.white, 100), style=line.style_solid, extend=extend.none)
  376.  
  377. // ─────────────────────────────────────────────────────────
  378. // FIRE
  379. // ─────────────────────────────────────────────────────────
  380. fire(use_ltf, std, ltf, lbl, show_toggle, tf_str, tf_secs) =>
  381. if use_ltf
  382. if array.size(ltf) > 0
  383. for k = 0 to array.size(ltf) - 1
  384. process_events(array.get(ltf, k), lbl, show_toggle, tf_str, tf_secs)
  385. else
  386. process_events(std, lbl, show_toggle, tf_str, tf_secs)
  387.  
  388. fire(use_ltf_1m, events_1m_std, events_1m_ltf, "1M", show_1m, "1", timeframe.in_seconds("1"))
  389. fire(use_ltf_2m, events_2m_std, events_2m_ltf, "2M", show_2m, "2", timeframe.in_seconds("2"))
  390. fire(use_ltf_5m, events_5m_std, events_5m_ltf, "5M", show_5m, "5", timeframe.in_seconds("5"))
  391. fire(use_ltf_10m, events_10m_std, events_10m_ltf, "10M", show_10m, "10", timeframe.in_seconds("10"))
  392. fire(use_ltf_15m, events_15m_std, events_15m_ltf, "15M", show_15m, "15", timeframe.in_seconds("15"))
  393. fire(use_ltf_30m, events_30m_std, events_30m_ltf, "30M", show_30m, "30", timeframe.in_seconds("30"))
  394. fire(use_ltf_1h, events_1h_std, events_1h_ltf, "1H", show_1h, "60", timeframe.in_seconds("60"))
  395.  
Advertisement
Add Comment
Please, Sign In to add comment