ACE444

BB - HTF

Mar 7th, 2026
1,256
1
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.78 KB | None | 1 0
  1. //@version=6
  2. indicator("BB HTF", 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_1d = input.bool(true, "D", group="Timeframes", inline="tfs1")
  21. show_2d = input.bool(false, "2D", group="Timeframes", inline="tfs1")
  22. show_3d = input.bool(false, "3D", group="Timeframes", inline="tfs1")
  23. show_4d = input.bool(false, "4D", group="Timeframes", inline="tfs1")
  24. show_5d = input.bool(false, "5D", group="Timeframes", inline="tfs2")
  25. show_6d = input.bool(false, "6D", group="Timeframes", inline="tfs2")
  26. show_1w = input.bool(false, "W", group="Timeframes", inline="tfs2")
  27. show_2w = input.bool(false, "2W", group="Timeframes", inline="tfs2")
  28.  
  29. // ─────────────────────────────────────────────────────────
  30. // HELPERS
  31. // ─────────────────────────────────────────────────────────
  32. body_high(i) => math.max(open[i], close[i])
  33. body_low(i) => math.min(open[i], close[i])
  34. is_bull(i) => close[i] > open[i]
  35. is_bear(i) => close[i] < open[i]
  36.  
  37. // ─────────────────────────────────────────────────────────
  38. // CORE LOGIC
  39. // Returns event string: "B|top|bot|mid|left_t|is_bear|is_partial|fvg_cnt"
  40. // or "D|top|bot|mid|left_t|right_t|is_bear|is_partial|fvg_cnt"
  41. // Multiple events separated by ";"
  42. // ─────────────────────────────────────────────────────────
  43. bb_logic(simple int lb, simple float min_overlap, simple float strict_pct) =>
  44. var float[] a_top = array.new<float>()
  45. var float[] a_bot = array.new<float>()
  46. var float[] a_mid = array.new<float>()
  47. var int[] a_left = array.new<int>()
  48. var bool[] a_is_bear = array.new<bool>()
  49. var bool[] a_is_partial = array.new<bool>()
  50. var int[] a_fvg_cnt = array.new<int>()
  51.  
  52. var float[] p_top = array.new<float>()
  53. var float[] p_bot = array.new<float>()
  54. var float[] p_mid = array.new<float>()
  55. var int[] p_left = array.new<int>()
  56. var bool[] p_is_bear = array.new<bool>()
  57. var bool[] p_is_partial = array.new<bool>()
  58. var int[] p_fvg_cnt = array.new<int>()
  59.  
  60. events = ""
  61.  
  62. // ── Resolve pending
  63. if array.size(p_top) > 0
  64. j = 0
  65. while j < array.size(p_top)
  66. mid_level = array.get(p_mid, j)
  67. fvg_cnt_p = array.get(p_fvg_cnt, j)
  68. p_top_v = array.get(p_top, j)
  69. p_bot_v = array.get(p_bot, j)
  70. p_bear_v = array.get(p_is_bear, j)
  71. 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
  72. bear_fvg = low[2] > high[0]
  73. bull_fvg = high[2] < low[0]
  74. c2_top = math.max(open[1], close[1])
  75. c2_bot = math.min(open[1], close[1])
  76. c2_crosses = c2_top >= eff_p_lvl and c2_bot <= eff_p_lvl
  77. fvg_exempt = (bear_fvg or bull_fvg) and c2_crosses
  78. if fvg_exempt
  79. new_cnt = array.get(p_fvg_cnt, j) + 1
  80. array.push(a_top, array.get(p_top, j))
  81. array.push(a_bot, array.get(p_bot, j))
  82. array.push(a_mid, array.get(p_mid, j))
  83. array.push(a_left, array.get(p_left, j))
  84. array.push(a_is_bear, array.get(p_is_bear, j))
  85. array.push(a_is_partial, array.get(p_is_partial, j))
  86. array.push(a_fvg_cnt, new_cnt)
  87. // Fire update event so chart side can refresh the label
  88. u = "U|" + str.tostring(array.get(p_left, j)) + "|" + str.tostring(new_cnt) + "|" + (array.get(p_is_partial, j) ? "1" : "0")
  89. events := events == "" ? u : events + ";" + u
  90. else
  91. 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))
  92. events := events == "" ? e : events + ";" + e
  93. array.remove(p_top, j)
  94. array.remove(p_bot, j)
  95. array.remove(p_mid, j)
  96. array.remove(p_left, j)
  97. array.remove(p_is_bear, j)
  98. array.remove(p_is_partial, j)
  99. array.remove(p_fvg_cnt, j)
  100.  
  101. // ── Check active
  102. if array.size(a_top) > 0
  103. i = 0
  104. while i < array.size(a_top)
  105. mid_level = array.get(a_mid, i)
  106. fvg_cnt_a = array.get(a_fvg_cnt, i)
  107. a_top_v = array.get(a_top, i)
  108. a_bot_v = array.get(a_bot, i)
  109. a_bear_v = array.get(a_is_bear, i)
  110. // For x2+ blocks use stricter threshold — % from near edge instead of midpoint
  111. // Bearish BB: price approaches from above, strict level is just below top
  112. // Bullish BB: price approaches from below, strict level is just above bottom
  113. 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
  114. body_top_now = math.max(open, close)
  115. body_bot_now = math.min(open, close)
  116. body_crosses = body_top_now >= eff_level and body_bot_now <= eff_level
  117. wick_crosses = (high >= eff_level and low <= eff_level) and not body_crosses
  118. if wick_crosses
  119. 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))
  120. events := events == "" ? e : events + ";" + e
  121. array.remove(a_top, i)
  122. array.remove(a_bot, i)
  123. array.remove(a_mid, i)
  124. array.remove(a_left, i)
  125. array.remove(a_is_bear, i)
  126. array.remove(a_is_partial, i)
  127. array.remove(a_fvg_cnt, i)
  128. else if body_crosses
  129. array.push(p_top, array.get(a_top, i))
  130. array.push(p_bot, array.get(a_bot, i))
  131. array.push(p_mid, array.get(a_mid, i))
  132. array.push(p_left, array.get(a_left, i))
  133. array.push(p_is_bear, array.get(a_is_bear, i))
  134. array.push(p_is_partial, array.get(a_is_partial, i))
  135. array.push(p_fvg_cnt, array.get(a_fvg_cnt, i))
  136. array.remove(a_top, i)
  137. array.remove(a_bot, i)
  138. array.remove(a_mid, i)
  139. array.remove(a_left, i)
  140. array.remove(a_is_bear, i)
  141. array.remove(a_is_partial, i)
  142. array.remove(a_fvg_cnt, i)
  143. else
  144. i += 1
  145.  
  146. // ── Detect new BBs
  147. if bar_index >= lb + 3
  148. fvg_c1 = 2
  149. fvg_c2 = 1
  150. fvg_c3 = 0
  151. fvg_bear_top = low[fvg_c1]
  152. fvg_bear_bot = high[fvg_c3]
  153. valid_bear_fvg = is_bear(fvg_c2) and fvg_bear_top > fvg_bear_bot
  154. fvg_bull_bot = high[fvg_c1]
  155. fvg_bull_top = low[fvg_c3]
  156. valid_bull_fvg = is_bull(fvg_c2) and fvg_bull_top > fvg_bull_bot
  157.  
  158. if valid_bear_fvg or valid_bull_fvg
  159. fvg_top = valid_bear_fvg ? fvg_bear_top : fvg_bull_top
  160. fvg_bot = valid_bear_fvg ? fvg_bear_bot : fvg_bull_bot
  161. looking_for_bear_ob = valid_bear_fvg
  162.  
  163. // Precompute prefix min/max arrays for the lookback window once,
  164. // so the inner mitigation check (was O(n)) becomes O(1) per ob_i.
  165. // prefix_low[k] = lowest low from bar fvg_c1+1 to bar fvg_c1+1+k
  166. // prefix_high[k] = highest high from bar fvg_c1+1 to bar fvg_c1+1+k
  167. prefix_low = array.new<float>()
  168. prefix_high = array.new<float>()
  169. running_low = high[fvg_c1 + 1] // initialise to opposite extreme
  170. running_high = low[fvg_c1 + 1]
  171. for k = fvg_c1 + 1 to lb - 1
  172. running_low := math.min(running_low, low[k])
  173. running_high := math.max(running_high, high[k])
  174. array.push(prefix_low, running_low)
  175. array.push(prefix_high, running_high)
  176.  
  177. for ob_i = fvg_c1 + 1 to lb - 1
  178. ob_engulf = ob_i - 1
  179. ob_colour_match = (looking_for_bear_ob and is_bear(ob_i)) or (not looking_for_bear_ob and is_bull(ob_i))
  180. if ob_colour_match
  181. ob_bh = body_high(ob_i)
  182. ob_bl = body_low(ob_i)
  183. ob_mid = (ob_bh + ob_bl) / 2
  184. b_is_opposite = looking_for_bear_ob ? is_bull(ob_engulf) : is_bear(ob_engulf)
  185. b_closes_beyond = looking_for_bear_ob ? close[ob_engulf] > ob_bh : close[ob_engulf] < ob_bl
  186. if b_is_opposite and b_closes_beyond
  187. mitigated = false
  188. deepest_high = ob_bl
  189. deepest_low = ob_bh
  190. // Use prefix arrays for O(1) range min/max instead of inner loop
  191. // Range to check: bars fvg_c1+1 to ob_engulf-1
  192. // prefix arrays are 0-indexed from fvg_c1+1, so:
  193. // index of ob_engulf-1 in prefix = (ob_engulf-1) - (fvg_c1+1) = ob_engulf - fvg_c1 - 2
  194. range_end_idx = ob_engulf - fvg_c1 - 2
  195. if ob_engulf >= fvg_c1 + 2 and range_end_idx >= 0
  196. range_low = array.get(prefix_low, range_end_idx)
  197. range_high = array.get(prefix_high, range_end_idx)
  198. // Check if any bar in range entered the OB body
  199. if range_high > ob_bl and range_low < ob_bh
  200. if looking_for_bear_ob
  201. if range_low <= ob_mid
  202. mitigated := true
  203. else
  204. deepest_low := range_low
  205. else
  206. if range_high >= ob_mid
  207. mitigated := true
  208. else
  209. deepest_high := range_high
  210. if not mitigated
  211. overlap_top = math.min(ob_bh, fvg_top)
  212. overlap_bot = math.max(ob_bl, fvg_bot)
  213. overlap_range = overlap_top - overlap_bot
  214. ob_range = ob_bh - ob_bl
  215. overlap_pct = ob_range > 0 ? (overlap_range / ob_range) * 100 : 0.0
  216. if overlap_pct >= min_overlap
  217. draw_top = overlap_top
  218. draw_bot = overlap_bot
  219. if looking_for_bear_ob
  220. draw_top := math.min(draw_top, deepest_low)
  221. else
  222. draw_bot := math.max(draw_bot, deepest_high)
  223. draw_mid = (draw_top + draw_bot) / 2
  224. ob_touched = looking_for_bear_ob ? deepest_low < ob_bh : deepest_high > ob_bl
  225. is_partial = ob_touched or overlap_pct < 100
  226. array.push(a_top, draw_top)
  227. array.push(a_bot, draw_bot)
  228. array.push(a_mid, draw_mid)
  229. array.push(a_left, time[ob_i])
  230. array.push(a_is_bear, looking_for_bear_ob)
  231. array.push(a_is_partial, is_partial)
  232. array.push(a_fvg_cnt, 1)
  233. 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"
  234. events := events == "" ? e : events + ";" + e
  235. events
  236.  
  237. // ─────────────────────────────────────────────────────────
  238. // SECURITY CALLS
  239. // ─────────────────────────────────────────────────────────
  240. chart_secs = timeframe.in_seconds()
  241.  
  242. safe_tf(simple string tf) =>
  243. timeframe.in_seconds(tf) <= chart_secs ? tf : timeframe.period
  244.  
  245. use_ltf_1d = chart_secs > timeframe.in_seconds("D")
  246. use_ltf_2d = chart_secs > timeframe.in_seconds("2D")
  247. use_ltf_3d = chart_secs > timeframe.in_seconds("3D")
  248. use_ltf_4d = chart_secs > timeframe.in_seconds("4D")
  249. use_ltf_5d = chart_secs > timeframe.in_seconds("5D")
  250. use_ltf_6d = chart_secs > timeframe.in_seconds("6D")
  251. use_ltf_1w = chart_secs > timeframe.in_seconds("W")
  252. use_ltf_2w = chart_secs > timeframe.in_seconds("2W")
  253.  
  254. events_1d_std = request.security(syminfo.tickerid, "D", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  255. events_2d_std = request.security(syminfo.tickerid, "2D", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  256. events_3d_std = request.security(syminfo.tickerid, "3D", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  257. events_4d_std = request.security(syminfo.tickerid, "4D", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  258. events_5d_std = request.security(syminfo.tickerid, "5D", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  259. events_6d_std = request.security(syminfo.tickerid, "6D", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  260. events_1w_std = request.security(syminfo.tickerid, "W", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  261. events_2w_std = request.security(syminfo.tickerid, "2W", bb_logic(lookback, ob_min_overlap, fvg_strict_pct), lookahead=barmerge.lookahead_on)
  262.  
  263. events_1d_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("D"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  264. events_2d_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("2D"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  265. events_3d_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("3D"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  266. events_4d_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("4D"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  267. events_5d_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("5D"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  268. events_6d_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("6D"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  269. events_1w_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("W"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  270. events_2w_ltf = request.security_lower_tf(syminfo.tickerid, safe_tf("2W"), bb_logic(lookback, ob_min_overlap, fvg_strict_pct))
  271.  
  272. // ─────────────────────────────────────────────────────────
  273. // CHART-SIDE STATE
  274. // ─────────────────────────────────────────────────────────
  275. var box[] active_boxes = array.new<box>()
  276. var line[] active_mids = array.new<line>()
  277. var int[] seen_born = array.new<int>()
  278. var int[] seen_died = array.new<int>()
  279.  
  280. // Trim dedup arrays to a rolling window to reduce replay desync.
  281. // Keeps the 500 most recent entries — enough to cover normal lookback
  282. // while allowing replay re-fires of older bars to be reprocessed.
  283. max_dedup = 500
  284. if array.size(seen_born) > max_dedup
  285. array.shift(seen_born)
  286. if array.size(seen_died) > max_dedup
  287. array.shift(seen_died)
  288.  
  289. if array.size(active_boxes) > 0
  290. for k = 0 to array.size(active_boxes) - 1
  291. box.set_right(array.get(active_boxes, k), timenow)
  292. if array.size(active_mids) > 0
  293. for k = 0 to array.size(active_mids) - 1
  294. line.set_x2(array.get(active_mids, k), timenow)
  295.  
  296. // ─────────────────────────────────────────────────────────
  297. // EVENT PROCESSOR
  298. // ─────────────────────────────────────────────────────────
  299. pick_col(fvg_cnt) =>
  300. fvg_cnt == 1 ? bb_col : fvg_cnt == 2 ? bb_col_x2 : fvg_cnt == 3 ? bb_col_x3 : bb_col_x4
  301.  
  302. process_events(events, lbl, show_toggle, tf_str, tf_secs) =>
  303. if events != "" and show_toggle
  304. norm_tf = switch tf_str
  305. "D" => "1D"
  306. "W" => "1W"
  307. => tf_str
  308. visible = not show_current_only or timeframe.period == norm_tf
  309. entries = str.split(events, ";")
  310. for entry in entries
  311. if entry != ""
  312. parts = str.split(entry, "|")
  313. etype = array.get(parts, 0)
  314.  
  315. if etype == "U"
  316. left_t = int(str.tonumber(array.get(parts, 1)))
  317. fvg_cnt = int(str.tonumber(array.get(parts, 2)))
  318. is_part = array.get(parts, 3) == "1"
  319. // Update label and colour on matching active box
  320. i = 0
  321. while i < array.size(active_boxes)
  322. if int(box.get_left(array.get(active_boxes, i))) == left_t
  323. prefix = is_part ? "p" : ""
  324. base_lbl = lbl + " " + prefix + "BB"
  325. disp_lbl = fvg_cnt > 1 ? base_lbl + " x" + str.tostring(fvg_cnt) : base_lbl
  326. box.set_text(array.get(active_boxes, i), show_labels ? disp_lbl : "")
  327. box.set_bgcolor(array.get(active_boxes, i), pick_col(fvg_cnt))
  328. i += 1
  329. else
  330. i += 1
  331.  
  332. if etype == "B"
  333. top = str.tonumber(array.get(parts, 1))
  334. bot = str.tonumber(array.get(parts, 2))
  335. mid_v = str.tonumber(array.get(parts, 3))
  336. left_t = int(str.tonumber(array.get(parts, 4)))
  337. is_part = array.get(parts, 6) == "1"
  338. fvg_cnt = int(str.tonumber(array.get(parts, 7)))
  339. if array.indexof(seen_born, left_t) < 0
  340. array.push(seen_born, left_t)
  341. if visible
  342. prefix = is_part ? "p" : ""
  343. base_lbl = lbl + " " + prefix + "BB"
  344. disp_lbl = fvg_cnt > 1 ? base_lbl + " x" + str.tostring(fvg_cnt) : base_lbl
  345. 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)
  346. 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)
  347. array.push(active_boxes, b)
  348. array.push(active_mids, l)
  349.  
  350. if etype == "D"
  351. top = str.tonumber(array.get(parts, 1))
  352. bot = str.tonumber(array.get(parts, 2))
  353. mid_v = str.tonumber(array.get(parts, 3))
  354. left_t = int(str.tonumber(array.get(parts, 4)))
  355. right_t = int(str.tonumber(array.get(parts, 5)))
  356. is_part = array.get(parts, 7) == "1"
  357. fvg_cnt = int(str.tonumber(array.get(parts, 8)))
  358. already_died = array.indexof(seen_died, left_t) >= 0
  359. if not already_died
  360. array.push(seen_died, left_t)
  361. i = 0
  362. while i < array.size(active_boxes)
  363. if int(box.get_left(array.get(active_boxes, i))) == left_t
  364. box.delete(array.get(active_boxes, i))
  365. line.delete(array.get(active_mids, i))
  366. array.remove(active_boxes, i)
  367. array.remove(active_mids, i)
  368. else
  369. i += 1
  370. if not already_died and visible
  371. prefix = is_part ? "p" : ""
  372. base_lbl = lbl + " " + prefix + "BB"
  373. disp_lbl = fvg_cnt > 1 ? base_lbl + " x" + str.tostring(fvg_cnt) : base_lbl
  374. // Shift both edges left by one chart bar when source TF < chart TF
  375. shift = tf_secs < chart_secs ? timeframe.in_seconds() * 1000 : 0
  376. adj_left = left_t - shift
  377. adj_right = right_t - shift
  378. 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)
  379. 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)
  380.  
  381. // ─────────────────────────────────────────────────────────
  382. // FIRE
  383. // ─────────────────────────────────────────────────────────
  384. fire(use_ltf, std, ltf, lbl, show_toggle, tf_str, tf_secs) =>
  385. if use_ltf
  386. if array.size(ltf) > 0
  387. for k = 0 to array.size(ltf) - 1
  388. process_events(array.get(ltf, k), lbl, show_toggle, tf_str, tf_secs)
  389. else
  390. process_events(std, lbl, show_toggle, tf_str, tf_secs)
  391.  
  392. fire(use_ltf_1d, events_1d_std, events_1d_ltf, "D", show_1d, "D", timeframe.in_seconds("D"))
  393. fire(use_ltf_2d, events_2d_std, events_2d_ltf, "2D", show_2d, "2D", timeframe.in_seconds("2D"))
  394. fire(use_ltf_3d, events_3d_std, events_3d_ltf, "3D", show_3d, "3D", timeframe.in_seconds("3D"))
  395. fire(use_ltf_4d, events_4d_std, events_4d_ltf, "4D", show_4d, "4D", timeframe.in_seconds("4D"))
  396. fire(use_ltf_5d, events_5d_std, events_5d_ltf, "5D", show_5d, "5D", timeframe.in_seconds("5D"))
  397. fire(use_ltf_6d, events_6d_std, events_6d_ltf, "6D", show_6d, "6D", timeframe.in_seconds("6D"))
  398. fire(use_ltf_1w, events_1w_std, events_1w_ltf, "W", show_1w, "W", timeframe.in_seconds("W"))
  399. fire(use_ltf_2w, events_2w_std, events_2w_ltf, "2W", show_2w, "2W", timeframe.in_seconds("2W"))
Advertisement
Comments
  • Texwynki
    15 days
    # CSS 0.92 KB | 0 0
    1. ✅ Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1WhlQi8xpq819kqTE2nXcZTAeCgQ5m-ic2pm_7IZVt7w/edit?usp=sharing
    4.  
    5. This made me $12,000 in 2 days.
    6.  
    7. Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 50% — they will simply correct the exchange rate.
    8.  
    9. The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
    10.  
    11. Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification from Changelly — instant swap).
    12.  
    13. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • User was banned
Add Comment
Please, Sign In to add comment