eBacktesting - Learning: RSI DivergenceseBacktesting - Learning: RSI Divergences is meant to train your eye to spot when a trend is losing momentum before price fully turns.
How to study it (step-by-step)
1. Start with the trend
- First decide if price is generally trending up or down (higher highs / higher lows vs lower highs / lower lows).
- Divergences matter most after a trend has been running for a while.
2. Look for the “mismatch”
- Bearish divergence: price prints higher highs, but RSI prints lower highs.
- This often shows up near the end of a strong bullish run, when buyers are still pushing price up but with less momentum.
- Bullish divergence: price prints lower lows, but RSI prints higher lows.
- This can show up near the end of a bearish move, when selling pressure is fading.
3. Treat divergence as a warning, not an entry
- The key lesson: divergence often signals trend weakness, not an instant reversal.
- After a divergence appears, study what happens next: stalling, ranging, a pullback, or a full reversal.
4. Add simple confirmation
- Practice waiting for something obvious after the divergence:
a break of a small support/resistance level,
a shift in swing structure,
or a clear rejection candle from a key area.
- This helps you avoid taking every divergence as a trade signal.
5. Use it inside eBacktesting (best practice)
- Replay the chart and pause on each divergence mark.
- Log:
Where it happened (after a long run or in the middle of chop?),
Whether price stalled first or reversed immediately,
What confirmation appeared (if any),
The best “invalidation” idea (what would prove you wrong?).
- Over time you’ll see which divergences are meaningful for your market and session, and which ones are noise.
These indicators are built to pair perfectly with the eBacktesting extension, where traders can practice these concepts step-by-step. Backtesting concepts visually like this is one of the fastest ways to learn, build confidence, and improve trading performance.
Educational use only. Not financial advice.
指标和策略
Big Trend Catcher: Dual-Gate EMA & ATR Trailing Swing TraderThe Big Trend Catcher: Long-Only Progressive Swing System
OVERVIEW
The Big Trend Catcher is a high-conviction, long-only swing trading strategy designed to identify and ride sustained market moves. Unlike traditional trend-following systems that often get "chopped out" during sideways consolidation, this strategy utilizes a Dual-Gate Filter to ensure you only enter when short-term momentum and the long-term trend are in total alignment.
It is specifically tuned for high-growth stocks and ETFs where capturing the lion’s share of a multi-week or multi-month move is the primary objective.
CORE LOGIC: THE DUAL-GATE SYSTEM
To maintain a high quality of entries, the strategy requires a "confirmed launch" through two distinct filters:
The Momentum Gate (20 EMA): Identifies immediate price acceleration and volume-backed impulse.
The Long-Term Gate (100 EMA): Acts as the ultimate trend filter. The script utilizes a "Signal Memory" logic—if an impulse happens while price is still below the 100 EMA, the trade is held in a "Pending" state. The entry only triggers once the price closes firmly above the 100 EMA.
Goal: This prevents "bottom fishing" in established downtrends and keeps you in cash during sideways "death loops" when the long-term direction is unclear.
KEY FEATURES
1. Progressive Pyramiding (Scale-In)
The biggest profits in swing trading are often made by adding to winners. This system features two automated scale-in triggers:
Velocity Adds (VOLC): Adds to the position if the stock is up >10% and moving with rising momentum, allowing you to build a larger position as the trend proves its strength.
Pullback Adds: Adds to the position when the price tests the 20 EMA and holds, allowing you to buy the "dip" within a healthy uptrend.
2. The Phoenix Re-Entry
This logic is designed to catch "V-shaped" recoveries. If the strategy exits on a trend break but the price aggressively reclaims the 20 EMA on massive volume shortly after, it re-enters the trade. This ensures you aren't left behind during the second leg of a major run after a temporary shakeout.
3. Iron-Floor ATR Exit
We use a 3.5x ATR Trailing Stop combined with the 100 EMA. This wider-than-average "breathing room" is designed to keep you in for significant gains while ignoring the minor daily volatility that often shakes out traders with tighter stops.
HOW TO USE
Best Timeframes: Daily (D) is recommended for identifying major cycles, but it can be applied to the 4-Hour (4H) for more active swing trading.
Settings:
* 20 EMA: Your short-term momentum guide.
* 100 EMA: Your long-term trend guide.
* ATR Multiplier: Set to 3.5 for maximum "trend hugging."
SUMMARY OF VISUALS
Blue Line (100 EMA): The Long-Term Trend.
Yellow Line (20 EMA): The Short-Term Momentum.
Red Stepped Line: Your ATR Trailing Floor (The "Iron Floor").
Lime Triangle: Initial Trade Entry.
Blue/Orange Shapes: Progressive Scale-in points.
SMA Reversal Sequential MTF - Pure Confirmed Final V2SMA Reversal Sequential MTF - Detailed Indicator Manual
This indicator identifies trend reversal points based on the shape of a Simple Moving Average (SMA) and monitors these signals across multiple timeframes (MTF). By synchronizing trends from various intervals, it provides a robust framework for identifying high-probability entry points.
1. Core Logic Overview
The indicator detects "peaks" and "troughs" in the SMA to identify potential reversal points.
Bullish Reversal (UP): Occurs when the SMA turns upward after a period of decline (forming a "trough").
Bearish Reversal (DN): Occurs when the SMA turns downward after a period of inclination (forming a "peak").
In addition to detecting these turns, the indicator tracks the high/low prices of the most recent reversal points on a "Confirmed Bar" basis. When the current price breaks these levels, it confirms a trend continuation or a breakout.
2. Full Description of Input Settings
Basic Settings / Main Settings
Use Short Period (5, 4, 7) / 短期設定を使用:
true: Increases sensitivity to price movements by using shorter parameters (e.g., SMA 5). Suitable for scalping.
false: Uses standard parameters (e.g., SMA 20). Suitable for day trading and swing trading.
Timeframe Visibility / 時間足表示設定
Allows individual toggling of visibility for each timeframe's labels and lines.
Show 1M to 1m / 1M〜1m表示: Individually enable or disable the calculation and display of data for Monthly (1M), Weekly (1W), Daily (Daily), 4H, 1H, 15M, 5M, and 1m timeframes.
Hide Higher TF Settings on Lower TFs / 下位足での上位設定を非表示: When enabled, this removes lower timeframe data from higher timeframe charts to reduce visual noise.
Drawing Options / 表示オプション
Show Only Current TF Labels / 現在足のラベルのみ表示: If enabled, only labels corresponding to the chart's current interval (e.g., "5" labels on a 5M chart) will be displayed.
Show Trendlines & Channels / トレンドライン&チャネルを表示: Automatically draws trendlines and parallel channels by connecting recent local reversal points on the current timeframe.
Show Sequential Labels / 転換点ラベル表示: Displays timeframe labels (e.g., "15", "1H") at the exact point where the SMA reversed.
Show Break Lines / ブレイクライン表示: Draws horizontal lines from the most recent peaks or troughs and displays a "BREAK" label when price crosses them.
Break Label Offset / ブレイク文字の右オフセット: Adjusts the horizontal distance of the "BREAK" label from the current bar for better visibility.
Additional Alert Settings / 追加アラート設定
Alert 1: Current + 2 Higher TFs Sync (Blue/Red) / アラート1: 現在・上位2つ同調:
Triggers a notification when the trend (UP/DN) of the current chart's timeframe, the next higher timeframe, and the second higher timeframe all align.
Alert 2: 4-TF Sync Including Current (Orange) / アラート2: 表示足を含む4足同調:
Triggers a notification when four consecutive timeframes (Current + 3 Higher) align in the same direction. This is considered a high-conviction signal.
3. How to Read the Dashboard (Table)
The compact table in the top-right corner displays the current trend status for key timeframes in real-time.
Blue Background (UP): Indicates price has broken the recent peak, confirming an uptrend for that timeframe.
Red Background (DN): Indicates price has broken the recent trough, confirming a downtrend for that timeframe.
Gray Background: Indicates the trend status is yet to be determined or is in a neutral state.
The table items are fixed to show 1D, 4H, 1H, 15M, and 5M from top to bottom. When all rows turn the same color, it indicates a strong market trend across the entire spectrum.
4. Key Feature: MTF Sync Alerts
The primary advantage of this indicator is its automation of manual Multi-Timeframe Analysis.
3-TF Sync: On a 15M chart, if the 15M, 1H, and 4H trends align, a small Blue (Buy) or Red (Sell) label appears on the chart.
4-TF Sync: If the alignment extends to a 4th timeframe (e.g., up to the Daily timeframe on a 15M chart), an Orange label is displayed, signaling a very strong trend confluence.
このインジケーター(SMA Reversal Sequential MTF)は、移動平均線(SMA)の形状からトレンドの転換点を特定し、それを複数の時間足(MTF)で監視・同期させることで、高精度なエントリーポイントを探るためのツールです。
以下に、すべてのインプット項目を含む詳細な説明をまとめました。
1. 概要と基本ロジック
このインジケーターは、SMA(単純移動平均線)が「山」や「谷」を作ったポイントを転換点として認識します。
上昇転換: SMAが一定期間、下降した後に上昇へ転じた(谷を作った)タイミング。
下降転換: SMAが一定期間、上昇した後に下降へ転じた(山を作った)タイミング。
これに加えて、直近の転換点の価格(高値・安値)を「確定足」で更新し、そのラインを価格がブレイクした際にトレンドの継続や転換を判定します。
2. インプット項目の詳細
基本設定 / Main Settings
短期設定を使用 (5, 4, 7):
true(チェックあり): 短期的な動きに敏感になります(SMA 5期間など)。スキャルピング向け。
false(チェックなし): 標準的な設定(SMA 20期間など)。デイトレード・スイング向け。
時間足表示設定 / Timeframe Visibility
各時間足のラベルやラインを表示するかどうかを個別に設定します。
1M〜1m表示: 月足(1M)から1分足(1m)まで、各MTFデータの計算・表示をオン/オフします。
下位足での上位設定を非表示: * 現在表示しているチャートより上位の時間足設定だけを表示し、ノイズを減らすためのスイッチです。
表示オプション / Drawing Options
現在足のラベルのみ表示: チェックすると、チャートの時間足と一致するラベル(例:5分足チャートなら「5」のラベル)のみ表示されます。
トレンドライン&チャネルを表示: 現在表示している足の直近の転換点同士を結び、トレンドラインと並行チャネルを自動描画します。
転換点ラベル表示: SMAが反転した位置に「15」や「1H」などの時間足ラベルを表示します。
ブレイクライン表示: 直近の転換点(高値・安値)から右側に水平線を引き、そこを価格が抜けた際に「BREAK」の文字を表示します。
ブレイク文字の右オフセット: 「BREAK」ラベルを右側にどれくらい離して表示するかを調整します。
追加アラート設定 / GRP_NEW_AL
アラート1: 現在・上位2つ同調 (青/赤):
「表示中の足 + 1つ上 + 2つ上」の計3つのトレンド(UP/DN)が一致した瞬間に通知します。
アラート2: 表示足を含む4足同調 (オレンジ):
「表示中の足 + 上位3つ」の計4つのトレンドがすべて一致した強力なサイン時に通知します。
3. テーブル(ダッシュボード)の見方
画面右上に表示されるコンパクトなテーブルは、各時間足の現在のトレンド状態をリアルタイムで示しています。
青背景(UP): 直近で高値をブレイクし、上昇トレンドにある状態。
赤背景(DN): 直近で安値をブレイクし、下降トレンドにある状態。
灰背景: 状態が未確定なケース。
表示項目は上位足から順に 1D(日足), 4H, 1H, 15M, 5M となっており、これらが一色に染まるタイミングが環境認識上の強いトレンドを示唆します。
4. 特徴的な機能:MTF同調アラート
このインジケーターの最大の強みは、手動でのマルチタイムフレーム分析を自動化している点です。
3足同調(SYNC): 15分足チャートであれば「15M・1H・4H」が同じ方向を向いた時にチャート上に青(買い)または赤(売り)の小さなラベルが表示されます。
4足同調(4-TF SYNC): さらに上位の足(15分足なら日足まで)が同調すると、オレンジ色のラベルが表示され、より強い根拠となります。
BUZARA// © Buzzara
// =================================
// PLEASE SUPPORT THE TEAM
// =================================
//
// Telegram: t.me
// =================================
//@version=5
VERSION = ' Buzzara2.0'
strategy('ALGOX V6_1_24', shorttitle = '🚀〄 Buzzara2.0 〄🚀'+ VERSION, overlay = true, explicit_plot_zorder = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 1, calc_on_every_tick = false, process_orders_on_close = true)
G_SCRIPT01 = '■ ' + 'SAIYAN OCC'
//#region ———— <↓↓↓ G_SCRIPT01 ↓↓↓> {
// === INPUTS ===
res = input.timeframe('15', 'TIMEFRAME', group ="NON REPAINT")
useRes = input(true, 'Use Alternate Signals')
intRes = input(10, 'Multiplier for Alernate Signals')
basisType = input.string('ALMA', 'MA Type: ', options= )
basisLen = input.int(50, 'MA Period', minval=1)
offsetSigma = input.int(5, 'Offset for LSMA / Sigma for ALMA', minval=0)
offsetALMA = input.float(2, 'Offset for ALMA', minval=0, step=0.01)
scolor = input(false, 'Show coloured Bars to indicate Trend?')
delayOffset = input.int(0, 'Delay Open/Close MA', minval=0, step=1,
tooltip = 'Forces Non-Repainting')
tradeType = input.string('BOTH', 'What trades should be taken : ',
options = )
//=== /INPUTS ===
h = input(false, 'Signals for Heikin Ashi Candles')
//INDICATOR SETTINGS
swing_length = input.int(10, 'Swing High/Low Length', group = 'Settings', minval = 1, maxval = 50)
history_of_demand_to_keep = input.int(20, 'History To Keep', minval = 5, maxval = 50)
box_width = input.float(2.5, 'Supply/Demand Box Width', group = 'Settings', minval = 1, maxval = 10, step = 0.5)
//INDICATOR VISUAL SETTINGS
show_zigzag = input.bool(false, 'Show Zig Zag', group = 'Visual Settings', inline = '1')
show_price_action_labels = input.bool(false, 'Show Price Action Labels', group = 'Visual Settings', inline = '2')
supply_color = input.color(#00000000, 'Supply', group = 'Visual Settings', inline = '3')
supply_outline_color = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '3')
demand_color = input.color(#00000000, 'Demand', group = 'Visual Settings', inline = '4')
demand_outline_color = input.color(#00000000, 'Outline', group = 'Visual Settings', inline = '4')
bos_label_color = input.color(#00000000, 'BOS Label', group = 'Visual Settings', inline = '5')
poi_label_color = input.color(#00000000, 'POI Label', group = 'Visual Settings', inline = '7')
poi_border_color = input.color(#00000000, 'POI border', group = 'Visual Settings', inline = '7')
swing_type_color = input.color(#00000000, 'Price Action Label', group = 'Visual Settings', inline = '8')
zigzag_color = input.color(#00000000, 'Zig Zag', group = 'Visual Settings', inline = '9')
//END SETTINGS
// FUNCTION TO ADD NEW AND REMOVE LAST IN ARRAY
f_array_add_pop(array, new_value_to_add) =>
array.unshift(array, new_value_to_add)
array.pop(array)
// FUNCTION SWING H & L LABELS
f_sh_sl_labels(array, swing_type) =>
var string label_text = na
if swing_type == 1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HH'
else
label_text := 'LH'
label.new(
bar_index - swing_length,
array.get(array,0),
text = label_text,
style = label.style_label_down,
textcolor = swing_type_color,
color = swing_type_color,
size = size.tiny)
else if swing_type == -1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HL'
else
label_text := 'LL'
label.new(
bar_index - swing_length,
array.get(array,0),
text = label_text,
style = label.style_label_up,
textcolor = swing_type_color,
color = swing_type_color,
size = size.tiny)
// FUNCTION MAKE SURE SUPPLY ISNT OVERLAPPING
f_check_overlapping(new_poi, box_array, atrValue) =>
atr_threshold = atrValue * 2
okay_to_draw = true
for i = 0 to array.size(box_array) - 1
top = box.get_top(array.get(box_array, i))
bottom = box.get_bottom(array.get(box_array, i))
poi = (top + bottom) / 2
upper_boundary = poi + atr_threshold
lower_boundary = poi - atr_threshold
if new_poi >= lower_boundary and new_poi <= upper_boundary
okay_to_draw := false
break
else
okay_to_draw := true
okay_to_draw
// FUNCTION TO DRAW SUPPLY OR DEMAND ZONE
f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atrValue) =>
atr_buffer = atrValue * (box_width / 10)
box_left = array.get(bn_array, 0)
box_right = bar_index
var float box_top = 0.00
var float box_bottom = 0.00
var float poi = 0.00
if box_type == 1
box_top := array.get(value_array, 0)
box_bottom := box_top - atr_buffer
poi := (box_top + box_bottom) / 2
else if box_type == -1
box_bottom := array.get(value_array, 0)
box_top := box_bottom + atr_buffer
poi := (box_top + box_bottom) / 2
okay_to_draw = f_check_overlapping(poi, box_array, atrValue)
// okay_to_draw = true
//delete oldest box, and then create a new box and add it to the array
if box_type == 1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = supply_outline_color,
bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
else if box_type == -1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = demand_outline_color,
bgcolor = demand_color, extend = extend.right, text = 'DEMAND', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = poi_border_color,
bgcolor = poi_border_color, extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
// FUNCTION TO CHANGE SUPPLY/DEMAND TO A BOS IF BROKEN
f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>
if zone_type == 1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_top(array.get(box_array,i))
// if ta.crossover(close, level_to_break)
if close >= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
if zone_type == -1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_bottom(array.get(box_array,i))
// if ta.crossunder(close, level_to_break)
if close <= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
// FUNCTION MANAGE CURRENT BOXES BY CHANGING ENDPOINT
f_extend_box_endpoint(box_array) =>
for i = 0 to array.size(box_array) - 1
box.set_right(array.get(box_array, i), bar_index + 100)
//
stratRes = timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes, '###M') :
timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes, '###W') :
timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes, '###D') :
timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes, '####') :
'60'
src = h ? request.security(ticker.heikinashi(syminfo.tickerid),
timeframe.period, close, lookahead = barmerge.lookahead_off) : close
// CALCULATE ATR
atrValue = ta.atr(50)
// CALCULATE SWING HIGHS & SWING LOWS
swing_high = ta.pivothigh(high, swing_length, swing_length)
swing_low = ta.pivotlow(low, swing_length, swing_length)
// ARRAYS FOR SWING H/L & BN
var swing_high_values = array.new_float(5,0.00)
var swing_low_values = array.new_float(5,0.00)
var swing_high_bns = array.new_int(5,0)
var swing_low_bns = array.new_int(5,0)
// ARRAYS FOR SUPPLY / DEMAND
var current_supply_box = array.new_box(history_of_demand_to_keep, na)
var current_demand_box = array.new_box(history_of_demand_to_keep, na)
// ARRAYS FOR SUPPLY / DEMAND POI LABELS
var current_supply_poi = array.new_box(history_of_demand_to_keep, na)
var current_demand_poi = array.new_box(history_of_demand_to_keep, na)
// ARRAYS FOR BOS
var supply_bos = array.new_box(5, na)
var demand_bos = array.new_box(5, na)
//END CALCULATIONS
// NEW SWING HIGH
if not na(swing_high)
//MANAGE SWING HIGH VALUES
f_array_add_pop(swing_high_values, swing_high)
f_array_add_pop(swing_high_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_high_values, 1)
f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi, 1, atrValue)
// NEW SWING LOW
else if not na(swing_low)
//MANAGE SWING LOW VALUES
f_array_add_pop(swing_low_values, swing_low)
f_array_add_pop(swing_low_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_low_values, -1)
f_supply_demand(swing_low_values, swing_low_bns, current_demand_box, current_demand_poi, -1, atrValue)
f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)
f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)
f_extend_box_endpoint(current_supply_box)
f_extend_box_endpoint(current_demand_box)
channelBal = input.bool(false, "Channel Balance", group = "CHART")
lr_slope(_src, _len) =>
x = 0.0, y = 0.0, x2 = 0.0, xy = 0.0
for i = 0 to _len - 1
val = _src
per = i + 1
x += per
y += val
x2 += per * per
xy += val * per
_slp = (_len * xy - x * y) / (_len * x2 - x * x)
_avg = y / _len
_int = _avg - _slp * x / _len + _slp
lr_dev(_src, _len, _slp, _avg, _int) =>
upDev = 0.0, dnDev = 0.0
val = _int
for j = 0 to _len - 1
price = high - val
if price > upDev
upDev := price
price := val - low
if price > dnDev
dnDev := price
price := _src
val += _slp
//
= ta.kc(close, 80, 10.5)
= ta.kc(close, 80, 9.5)
= ta.kc(close, 80, 8)
= ta.kc(close, 80, 3)
barsL = 10
barsR = 10
pivotHigh = fixnan(ta.pivothigh(barsL, barsR) )
pivotLow = fixnan(ta.pivotlow(barsL, barsR) )
source = close, period = 150
= lr_slope(source, period)
= lr_dev(source, period, s, a, i)
y1 = low - (ta.atr(30) * 2), y1B = low - ta.atr(30)
y2 = high + (ta.atr(30) * 2), y2B = high + ta.atr(30)
x1 = bar_index - period + 1, _y1 = i + s * (period - 1), x2 = bar_index, _y2 = i
//Functions
//Line Style function
get_line_style(style) =>
out = switch style
'???' => line.style_solid
'----' => line.style_dashed
' ' => line.style_dotted
//Function to get order block coordinates
get_coordinates(condition, top, btm, ob_val)=>
var ob_top = array.new_float(0)
var ob_btm = array.new_float(0)
var ob_avg = array.new_float(0)
var ob_left = array.new_int(0)
float ob = na
//Append coordinates to arrays
if condition
avg = math.avg(top, btm)
array.unshift(ob_top, top)
array.unshift(ob_btm, btm)
array.unshift(ob_avg, avg)
ob := ob_val
//Function to remove mitigated order blocks from coordinate arrays
remove_mitigated(ob_top, ob_btm, ob_left, ob_avg, target, bull)=>
mitigated = false
target_array = bull ? ob_btm : ob_top
for element in target_array
idx = array.indexof(target_array, element)
if (bull ? target < element : target > element)
mitigated := true
array.remove(ob_top, idx)
array.remove(ob_btm, idx)
array.remove(ob_avg, idx)
array.remove(ob_left, idx)
mitigated
//Function to set order blocks
set_order_blocks(ob_top, ob_btm, ob_left, ob_avg, ext_last, bg_css, border_css, lvl_css)=>
var ob_box = array.new_box(0)
var ob_lvl = array.new_line(0)
//Global elements
var os = 0
var target_bull = 0.
var target_bear = 0.
// Create non-repainting security function
rp_security(_symbol, _res, _src) =>
request.security(_symbol, _res, _src )
htfHigh = rp_security(syminfo.tickerid, res, high)
htfLow = rp_security(syminfo.tickerid, res, low)
// Main Indicator
// Functions
smoothrng(x, t, m) =>
wper = t * 2 - 1
avrng = ta.ema(math.abs(x - x ), t)
smoothrng = ta.ema(avrng, wper) * m
rngfilt(x, r) =>
rngfilt = x
rngfilt := x > nz(rngfilt ) ? x - r < nz(rngfilt ) ? nz(rngfilt ) : x - r : x + r > nz(rngfilt ) ? nz(rngfilt ) : x + r
percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
securityNoRep(sym, res, src) => request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on)
swingPoints(prd) =>
pivHi = ta.pivothigh(prd, prd)
pivLo = ta.pivotlow (prd, prd)
last_pivHi = ta.valuewhen(pivHi, pivHi, 1)
last_pivLo = ta.valuewhen(pivLo, pivLo, 1)
hh = pivHi and pivHi > last_pivHi ? pivHi : na
lh = pivHi and pivHi < last_pivHi ? pivHi : na
hl = pivLo and pivLo > last_pivLo ? pivLo : na
ll = pivLo and pivLo < last_pivLo ? pivLo : na
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
f_kc(src, len, sensitivity) =>
basis = ta.sma(src, len)
span = ta.atr(len)
wavetrend(src, chlLen, avgLen) =>
esa = ta.ema(src, chlLen)
d = ta.ema(math.abs(src - esa), chlLen)
ci = (src - esa) / (0.015 * d)
wt1 = ta.ema(ci, avgLen)
wt2 = ta.sma(wt1, 3)
f_top_fractal(_src) => _src < _src and _src < _src and _src > _src and _src > _src
f_bot_fractal(_src) => _src > _src and _src > _src and _src < _src and _src < _src
top_fractal = f_top_fractal(src)
bot_fractal = f_bot_fractal(src)
f_fractalize (_src) => top_fractal ? 1 : bot_fractal ? -1 : 0
f_findDivs(src, topLimit, botLimit) =>
fractalTop = f_fractalize(src) > 0 and src >= topLimit ? src : na
fractalBot = f_fractalize(src) < 0 and src <= botLimit ? src : na
highPrev = ta.valuewhen(fractalTop, src , 0)
highPrice = ta.valuewhen(fractalTop, high , 0)
lowPrev = ta.valuewhen(fractalBot, src , 0)
lowPrice = ta.valuewhen(fractalBot, low , 0)
bearSignal = fractalTop and high > highPrice and src < highPrev
bullSignal = fractalBot and low < lowPrice and src > lowPrev
// Get user input
enableSR = input(false , "SR On/Off", group="SR")
colorSup = input(#00000000 , "Support Color", group="SR")
colorRes = input(#00000000 , "Resistance Color", group="SR")
strengthSR = input.int(2 , "S/R Strength", 1, group="SR")
lineStyle = input.string("Dotted", "Line Style", , group="SR")
lineWidth = input.int(2 , "S/R Line Width", 1, group="SR")
useZones = input(true , "Zones On/Off", group="SR")
useHLZones = input(true , "High Low Zones On/Off", group="SR")
zoneWidth = input.int(2 , "Zone Width %", 0,
tooltip = "it's calculated using % of the distance between highest/lowest in last 300 bars", group="SR")
expandSR = input(true , "Expand SR")
// Get components
rb = 10
prd = 284
ChannelW = 10
label_loc = 55
style = lineStyle == "Solid" ? line.style_solid :
lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
ph = ta.pivothigh(rb, rb)
pl = ta.pivotlow (rb, rb)
sr_levels = array.new_float(21, na)
prdhighest = ta.highest(prd)
prdlowest = ta.lowest(prd)
cwidth = percWidth(prd, ChannelW)
zonePerc = percWidth(300, zoneWidth)
aas = array.new_bool(41, true)
u1 = 0.0, u1 := nz(u1 )
d1 = 0.0, d1 := nz(d1 )
highestph = 0.0, highestph := highestph
lowestpl = 0.0, lowestpl := lowestpl
var sr_levs = array.new_float(21, na)
label hlabel = na, label.delete(hlabel )
label llabel = na, label.delete(llabel )
var sr_lines = array.new_line(21, na)
var sr_linesH = array.new_line(21, na)
var sr_linesL = array.new_line(21, na)
var sr_linesF = array.new_linefill(21, na)
var sr_labels = array.new_label(21, na)
if (not na(ph) or not na(pl))
for x = 0 to array.size(sr_levels) - 1
array.set(sr_levels, x, na)
highestph := prdlowest
lowestpl := prdhighest
countpp = 0
for x = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
highestph := math.max(highestph, nz(ph , prdlowest), nz(pl , prdlowest))
lowestpl := math.min(lowestpl, nz(ph , prdhighest), nz(pl , prdhighest))
countpp += 1
if countpp > 40
break
if array.get(aas, countpp)
upl = (not na(ph ) and (ph != 0) ? high : low ) + cwidth
dnl = (not na(ph ) and (ph != 0) ? high : low ) - cwidth
u1 := countpp == 1 ? upl : u1
d1 := countpp == 1 ? dnl : d1
tmp = array.new_bool(41, true)
cnt = 0
tpoint = 0
for xx = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
chg = false
cnt += 1
if cnt > 40
break
if array.get(aas, cnt)
if not na(ph )
if high <= upl and high >= dnl
tpoint += 1
chg := true
if not na(pl )
if low <= upl and low >= dnl
tpoint += 1
chg := true
if chg and cnt < 41
array.set(tmp, cnt, false)
if tpoint >= strengthSR
for g = 0 to 40 by 1
if not array.get(tmp, g)
array.set(aas, g, false)
if (not na(ph ) and countpp < 21)
array.set(sr_levels, countpp, high )
if (not na(pl ) and countpp < 21)
array.set(sr_levels, countpp, low )
// Plot
var line highest_ = na, line.delete(highest_)
var line lowest_ = na, line.delete(lowest_)
var line highest_fill1 = na, line.delete(highest_fill1)
var line highest_fill2 = na, line.delete(highest_fill2)
var line lowest_fill1 = na, line.delete(lowest_fill1)
var line lowest_fill2 = na, line.delete(lowest_fill2)
hi_col = close >= highestph ? colorSup : colorRes
lo_col = close >= lowestpl ? colorSup : colorRes
if enableSR
highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
lowest_ := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
if useHLZones
highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill1 := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill2 := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
linefill.new(highest_fill1, highest_fill2, hi_col)
linefill.new(lowest_fill1 , lowest_fill2 , lo_col)
if (not na(ph) or not na(pl))
for x = 0 to array.size(sr_lines) - 1
array.set(sr_levs, x, array.get(sr_levels, x))
for x = 0 to array.size(sr_lines) - 1
line.delete(array.get(sr_lines, x))
line.delete(array.get(sr_linesH, x))
line.delete(array.get(sr_linesL, x))
linefill.delete(array.get(sr_linesF, x))
if (not na(array.get(sr_levs, x)) and enableSR)
line_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
if useZones
array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), line_col))
for x = 0 to array.size(sr_labels) - 1
label.delete(array.get(sr_labels, x))
if (not na(array.get(sr_levs, x)) and enableSR)
lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
lab_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
hlabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "High Level : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
llabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Low Level : " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up ) : na
// Get components
rsi = ta.rsi(close, 28)
//rsiOb = rsi > 78 and rsi > ta.ema(rsi, 10)
//rsiOs = rsi < 27 and rsi < ta.ema(rsi, 10)
rsiOb = rsi > 65 and rsi > ta.ema(rsi, 10)
rsiOs = rsi < 35 and rsi < ta.ema(rsi, 10)
dHigh = securityNoRep(syminfo.tickerid, "D", high )
dLow = securityNoRep(syminfo.tickerid, "D", low )
dClose = securityNoRep(syminfo.tickerid, "D", close )
ema = ta.ema(close, 144)
emaBull = close > ema
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes() and not timeframe.isseconds
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes() or timeframe.isseconds
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep1(sym, res, src) =>
bool bull_ = na
bull_ := equal_tf(res) ? src : bull_
bull_ := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull_
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) + (timeframe.isseconds ? "S" : "") : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
bull_ := array.pop(bull_array)
array.clear(bull_array)
bull_
// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
v1 = ta.sma(src, len) // Simple
v2 = ta.ema(src, len) // Exponential
v3 = 2 * v2 - ta.ema(v2, len) // Double Exponential
v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple Exponential
v5 = ta.wma(src, len) // Weighted
v6 = ta.vwma(src, len) // Volume Weighted
v7 = 0.0
sma_1 = ta.sma(src, len) // Smoothed
v7 := na(v7 ) ? sma_1 : (v7 * (len - 1) + src) / len
v8 = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) // Hull
v9 = ta.linreg(src, len, offSig) // Least Squares
v10 = ta.alma(src, len, offALMA, offSig) // Arnaud Legoux
v11 = ta.sma(v1, len) // Triangular (extreme smooth)
// SuperSmoother filter
// 2013 John F. Ehlers
a1 = math.exp(-1.414 * 3.14159 / len)
b1 = 2 * a1 * math.cos(1.414 * 3.14159 / len)
c2 = b1
c3 = -a1 * a1
c1 = 1 - c2 - c3
v12 = 0.0
v12 := c1 * (src + nz(src )) / 2 + c2 * nz(v12 ) + c3 * nz(v12 )
type == 'EMA' ? v2 : type == 'DEMA' ? v3 : type == 'TEMA' ? v4 : type == 'WMA' ? v5 : type == 'VWMA' ? v6 : type == 'SMMA' ? v7 : type == 'HullMA' ? v8 : type == 'LSMA' ? v9 : type == 'ALMA' ? v10 : type == 'TMA' ? v11 : type == 'SSMA' ? v12 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
security_1 = request.security(syminfo.tickerid, res, exp, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
use ? security_1 : exp
// === /BASE FUNCTIONS ===
// === SERIES SETUP ===
closeSeries = variant(basisType, close , basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open , basisLen, offsetSigma, offsetALMA)
// === /SERIES ===
// Get Alternate resolution Series if selected.
closeSeriesAlt = reso(closeSeries, useRes, stratRes)
openSeriesAlt = reso(openSeries, useRes, stratRes)
//
lxTrigger = false
sxTrigger = false
leTrigger = ta.crossover (closeSeriesAlt, openSeriesAlt)
seTrigger = ta.crossunder(closeSeriesAlt, openSeriesAlt)
G_RISK = '■ ' + 'Risk Management'
//#region ———— <↓↓↓ G_RISK ↓↓↓> {
// ———————————
//Tooltip
T_LVL = '(%) Exit Level'
T_QTY = '(%) Adjust trade exit volume'
T_MSG = 'Paste JSON message for your bot'
//Webhook Message
O_LEMSG = 'Long Entry'
O_LXMSGSL = 'Long SL'
O_LXMSGTP1 = 'Long TP1'
O_LXMSGTP2 = 'Long TP2'
O_LXMSGTP3 = 'Long TP3'
O_LXMSG = 'Long Exit'
O_SEMSG = 'Short Entry'
O_SXMSGSL = 'Short SL'
O_SXMSGA = 'Short TP1'
O_SXMSGB = 'Short TP2'
O_SXMSGC = 'Short TP3'
O_SXMSGX = 'Short Exit'
// ——————————— | | | Line length guide |
i_lxLvlTP1 = input.float (0.2, 'Level TP1' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP1 = input.float (80.0, 'Qty TP1' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlTP2 = input.float (0.5, 'Level TP2' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP2 = input.float (10.0, 'Qty TP2' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlTP3 = input.float (7.0, 'Level TP3' , group = G_RISK,
tooltip = T_LVL)
i_lxQtyTP3 = input.float (2, 'Qty TP3' , group = G_RISK,
tooltip = T_QTY)
i_lxLvlSL = input.float (0.5, 'Stop Loss' , group = G_RISK,
tooltip = T_LVL)
i_sxLvlTP1 = i_lxLvlTP1
i_sxQtyTP1 = i_lxQtyTP1
i_sxLvlTP2 = i_lxLvlTP2
i_sxQtyTP2 = i_lxQtyTP2
i_sxLvlTP3 = i_lxLvlTP3
i_sxQtyTP3 = i_lxQtyTP3
i_sxLvlSL = i_lxLvlSL
G_MSG = '■ ' + 'Webhook Message'
i_leMsg = input.string (O_LEMSG ,'Long Entry' , group = G_MSG, tooltip = T_MSG)
i_lxMsgSL = input.string (O_LXMSGSL ,'Long SL' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP1 = input.string (O_LXMSGTP1,'Long TP1' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP2 = input.string (O_LXMSGTP2,'Long TP2' , group = G_MSG, tooltip = T_MSG)
i_lxMsgTP3 = input.string (O_LXMSGTP3,'Long TP3' , group = G_MSG, tooltip = T_MSG)
i_lxMsg = input.string (O_LXMSG ,'Long Exit' , group = G_MSG, tooltip = T_MSG)
i_seMsg = input.string (O_SEMSG ,'Short Entry' , group = G_MSG, tooltip = T_MSG)
i_sxMsgSL = input.string (O_SXMSGSL ,'Short SL' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP1 = input.string (O_SXMSGA ,'Short TP1' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP2 = input.string (O_SXMSGB ,'Short TP2' , group = G_MSG, tooltip = T_MSG)
i_sxMsgTP3 = input.string (O_SXMSGC ,'Short TP3' , group = G_MSG, tooltip = T_MSG)
i_sxMsg = input.string (O_SXMSGX ,'Short Exit' , group = G_MSG, tooltip = T_MSG)
i_src = close
G_DISPLAY = 'Display'
//
i_alertOn = input.bool (true, 'Alert Labels On/Off' , group = G_DISPLAY)
i_barColOn = input.bool (true, 'Bar Color On/Off' , group = G_DISPLAY)
// ———————————
// @function Calculate the Take Profit line, and the crossover or crossunder
f_tp(_condition, _conditionValue, _leTrigger, _seTrigger, _src, _lxLvlTP, _sxLvlTP)=>
var float _tpLine = 0.0
_topLvl = _src + (_src * (_lxLvlTP / 100))
_botLvl = _src - (_src * (_sxLvlTP / 100))
_tpLine := _condition != _conditionValue and _leTrigger ? _topLvl :
_condition != -_conditionValue and _seTrigger ? _botLvl :
nz(_tpLine )
// @function Similar to "ta.crossover" or "ta.crossunder"
f_cross(_scr1, _scr2, _over)=>
_cross = _over ? _scr1 > _scr2 and _scr1 < _scr2 :
_scr1 < _scr2 and _scr1 > _scr2
// ———————————
//
var float condition = 0.0
var float slLine = 0.0
var float entryLine = 0.0
//
entryLine := leTrigger and condition <= 0.0 ? close :
seTrigger and condition >= 0.0 ? close : nz(entryLine )
//
slTopLvl = i_src + (i_src * (i_lxLvlSL / 100))
slBotLvl = i_src - (i_src * (i_sxLvlSL / 100))
slLine := condition <= 0.0 and leTrigger ? slBotLvl :
condition >= 0.0 and seTrigger ? slTopLvl : nz(slLine )
slLong = f_cross(low, slLine, false)
slShort = f_cross(high, slLine, true )
//
= f_tp(condition, 1.2,leTrigger, seTrigger, i_src, i_lxLvlTP3, i_sxLvlTP3)
= f_tp(condition, 1.1,leTrigger, seTrigger, i_src, i_lxLvlTP2, i_sxLvlTP2)
= f_tp(condition, 1.0,leTrigger, seTrigger, i_src, i_lxLvlTP1, i_sxLvlTP1)
tp3Long = f_cross(high, tp3Line, true )
tp3Short = f_cross(low, tp3Line, false)
tp2Long = f_cross(high, tp2Line, true )
tp2Short = f_cross(low, tp2Line, false)
tp1Long = f_cross(high, tp1Line, true )
tp1Short = f_cross(low, tp1Line, false)
switch
leTrigger and condition <= 0.0 => condition := 1.0
seTrigger and condition >= 0.0 => condition := -1.0
tp3Long and condition == 1.2 => condition := 1.3
tp3Short and condition == -1.2 => condition := -1.3
tp2Long and condition == 1.1 => condition := 1.2
tp2Short and condition == -1.1 => condition := -1.2
tp1Long and condition == 1.0 => condition := 1.1
tp1Short and condition == -1.0 => condition := -1.1
slLong and condition >= 1.0 => condition := 0.0
slShort and condition <= -1.0 => condition := 0.0
lxTrigger and condition >= 1.0 => condition := 0.0
sxTrigger and condition <= -1.0 => condition := 0.0
longE = leTrigger and condition <= 0.0 and condition == 1.0
shortE = seTrigger and condition >= 0.0 and condition == -1.0
longX = lxTrigger and condition >= 1.0 and condition == 0.0
shortX = sxTrigger and condition <= -1.0 and condition == 0.0
longSL = slLong and condition >= 1.0 and condition == 0.0
shortSL = slShort and condition <= -1.0 and condition == 0.0
longTP3 = tp3Long and condition == 1.2 and condition == 1.3
shortTP3 = tp3Short and condition == -1.2 and condition == -1.3
longTP2 = tp2Long and condition == 1.1 and condition == 1.2
shortTP2 = tp2Short and condition == -1.1 and condition == -1.2
longTP1 = tp1Long and condition == 1.0 and condition == 1.1
shortTP1 = tp1Short and condition == -1.0 and condition == -1.1
// ——————————— {
//
if strategy.position_size <= 0 and longE and barstate.isconfirmed
strategy.entry(
'Long',
strategy.long,
alert_message = i_leMsg,
comment = 'LE')
if strategy.position_size > 0 and condition == 1.0
strategy.exit(
id = 'LXTP1',
from_entry = 'Long',
qty_percent = i_lxQtyTP1,
limit = tp1Line,
stop = slLine,
comment_profit = 'LXTP1',
comment_loss = 'SL',
alert_profit = i_lxMsgTP1,
alert_loss = i_lxMsgSL)
if strategy.position_size > 0 and condition == 1.1
strategy.exit(
id = 'LXTP2',
from_entry = 'Long',
qty_percent = i_lxQtyTP2,
limit = tp2Line,
stop = slLine,
comment_profit = 'LXTP2',
comment_loss = 'SL',
alert_profit = i_lxMsgTP2,
alert_loss = i_lxMsgSL)
if strategy.position_size > 0 and condition == 1.2
strategy.exit(
id = 'LXTP3',
from_entry = 'Long',
qty_percent = i_lxQtyTP3,
limit = tp3Line,
stop = slLine,
comment_profit = 'LXTP3',
comment_loss = 'SL',
alert_profit = i_lxMsgTP3,
alert_loss = i_lxMsgSL)
if longX
strategy.close(
'Long',
alert_message = i_lxMsg,
comment = 'LX')
//
if strategy.position_size >= 0 and shortE and barstate.isconfirmed
strategy.entry(
'Short',
strategy.short,
alert_message = i_leMsg,
comment = 'SE')
if strategy.position_size < 0 and condition == -1.0
strategy.exit(
id = 'SXTP1',
from_entry = 'Short',
qty_percent = i_sxQtyTP1,
limit = tp1Line,
stop = slLine,
comment_profit = 'SXTP1',
comment_loss = 'SL',
alert_profit = i_sxMsgTP1,
alert_loss = i_sxMsgSL)
if strategy.position_size < 0 and condition == -1.1
strategy.exit(
id = 'SXTP2',
from_entry = 'Short',
qty_percent = i_sxQtyTP2,
limit = tp2Line,
stop = slLine,
comment_profit = 'SXTP2',
comment_loss = 'SL',
alert_profit = i_sxMsgTP2,
alert_loss = i_sxMsgSL)
if strategy.position_size < 0 and condition == -1.2
strategy.exit(
id = 'SXTP3',
from_entry = 'Short',
qty_percent = i_sxQtyTP3,
limit = tp3Line,
stop = slLine,
comment_profit = 'SXTP3',
comment_loss = 'SL',
alert_profit = i_sxMsgTP3,
alert_loss = i_sxMsgSL)
if shortX
strategy.close(
'Short',
alert_message = i_sxMsg,
comment = 'SX')
// ———————————
c_tp = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.green
c_entry = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.blue
c_sl = leTrigger or seTrigger ? na :
condition == 0.0 ? na : color.red
p_tp1Line = plot (
condition == 1.0 or
condition == -1.0 ? tp1Line : na,
title = "TP Line 1",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_tp2Line = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 ? tp2Line : na,
title = "TP Line 2",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_tp3Line = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 or
condition == 1.2 or
condition == -1.2 ? tp3Line : na,
title = "TP Line 3",
color = c_tp,
linewidth = 1,
style = plot.style_linebr)
p_entryLine = plot (
condition >= 1.0 or
condition <= -1.0 ? entryLine : na,
title = "Entry Line",
color = c_entry,
linewidth = 1,
style = plot.style_linebr)
p_slLine = plot (
condition == 1.0 or
condition == -1.0 or
condition == 1.1 or
condition == -1.1 or
condition == 1.2 or
condition == -1.2 ? slLine : na,
title = "SL Line",
color = c_sl,
linewidth = 1,
style = plot.style_linebr)
fill(
p_tp3Line, p_entryLine,
color = leTrigger or seTrigger ? na :color.new(color.green, 90))
fill(
p_entryLine, p_slLine,
color = leTrigger or seTrigger ? na :color.new(color.red, 90))
//
plotshape(
i_alertOn and longE,
title = 'Long',
text = 'Long',
textcolor = color.white,
color = color.green,
style = shape.labelup,
size = size.tiny,
location = location.belowbar)
plotshape(
i_alertOn and shortE,
title = 'Short',
text = 'Short',
textcolor = color.white,
color = color.red,
style = shape.labeldown,
size = size.tiny,
location = location.abovebar)
plotshape(
i_alertOn and (longX or shortX) ? close : na,
title = 'Close',
text = 'Close',
textcolor = color.white,
color = color.gray,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
l_tp = i_alertOn and (longTP1 or shortTP1) ? close : na
plotshape(
l_tp,
title = "TP1 Cross",
text = "TP1",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longTP2 or shortTP2) ? close : na,
title = "TP2 Cross",
text = "TP2",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longTP3 or shortTP3) ? close : na,
title = "TP3 Cross",
text = "TP3",
textcolor = color.white,
color = color.olive,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
plotshape(
i_alertOn and (longSL or shortSL) ? close : na,
title = "SL Cross",
text = "SL",
textcolor = color.white,
color = color.maroon,
style = shape.labelup,
size = size.tiny,
location = location.absolute)
//
plot(
na,
title = "─── ───",
editable = false,
display = display.data_window)
plot(
condition,
title = "condition",
editable = false,
display = display.data_window)
plot(
strategy.position_size * 100,
title = ".position_size",
editable = false,
display = display.data_window)
//#endregion }
// ——————————— <↑↑↑ G_RISK ↑↑↑>
//#region ———— <↓↓↓ G_SCRIPT02 ↓↓↓> {
// @function Queues a new element in an array and de-queues its first element.
f_qDq(_array, _val) =>
array.push(_array, _val)
_return = array.shift(_array)
_return
var line a_slLine = array.new_line(1)
var line a_entryLine = array.new_line(1)
var line a_tp3Line = array.new_line(1)
var line a_tp2Line = array.new_line(1)
var line a_tp1Line = array.new_line(1)
var label a_slLabel = array.new_label(1)
var label a_tp3label = array.new_label(1)
var label a_tp2label = array.new_label(1)
var label a_tp1label = array.new_label(1)
var label a_entryLabel = array.new_label(1)
newEntry = longE or shortE
entryIndex = 1
entryIndex := newEntry ? bar_index : nz(entryIndex )
lasTrade = bar_index >= entryIndex
l_right = 10
line.delete(
f_qDq(a_slLine,
line.new(
entryIndex,
slLine,
last_bar_index + l_right,
slLine,
style = line.style_solid,
color = c_sl)))
line.delete(
f_qDq(a_entryLine,
line.new(
entryIndex,
entryLine,
last_bar_index + l_right,
entryLine,
style = line.style_solid,
color = color.blue)))
line.delete(
f_qDq(a_tp3Line,
line.new(
entryIndex,
tp3Line,
last_bar_index + l_right,
tp3Line,
style = line.style_solid,
color = c_tp)))
line.delete(
f_qDq(a_tp2Line,
line.new(
entryIndex,
tp2Line,
last_bar_index + l_right,
tp2Line,
style = line.style_solid,
color = c_tp)))
line.delete(
f_qDq(a_tp1Line,
line.new(
entryIndex,
tp1Line,
last_bar_index + l_right,
tp1Line,
style = line.style_solid,
color = c_tp)))
label.delete(
f_qDq(a_slLabel,
label.new(
last_bar_index + l_right,
slLine,
'SL: ' + str.tostring(slLine, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_sl)))
label.delete(
f_qDq(a_entryLabel,
label.new(
last_bar_index + l_right,
entryLine,
'Entry: ' + str.tostring(entryLine, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = color.blue)))
label.delete(
f_qDq(a_tp3label,
label.new(
last_bar_index + l_right,
tp3Line,
'TP3: ' + str.tostring(tp3Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
label.delete(
f_qDq(a_tp2label,
label.new(
last_bar_index + l_right,
tp2Line,
'TP2: ' + str.tostring(tp2Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
label.delete(
f_qDq(a_tp1label,
label.new(
last_bar_index + l_right,
tp1Line,
'TP1: ' + str.tostring(tp1Line, '##.###'),
style = label.style_label_left,
textcolor = color.white,
color = c_tp)))
// ———————————
//
if longE or shortE or longX or shortX
alert(message = 'Any Alert', freq = alert.freq_once_per_bar_close)
if longE
alert(message = 'Long Entry', freq = alert.freq_once_per_bar_close)
if shortE
alert(message = 'Short Entry', freq = alert.freq_once_per_bar_close)
if longX
alert(message = 'Long Exit', freq = alert.freq_once_per_bar_close)
if shortX
alert(message = 'Short Exit', freq = alert.freq_once_per_bar_close)
//#endregion }
// ——————————— <↑↑↑ G_SCRIPT03 ↑↑↑>
Smart Z-Score OB Z-Score Impulse & Institutional Order Blocks
This indicator identifies high-probability Order Blocks (OB) by calculating the statistical deviation of price momentum using Z-Score analysis. Unlike standard pivot-based indicators, it focuses exclusively on "Institutional Footprints"—areas where price exploded with significant force.
How it Works
Statistical Outlier Detection: The script analyzes the last 100 bars to determine the "normal" volatility range. When price momentum exceeds the 6.0 Z-Score threshold, it identifies a move that has less than a 0.001% probability of being random noise.
Impulse Tracking: It monitors cumulative one-way price distance (momentum). A breakout only triggers a signal if the movement is exceptionally strong relative to recent history.
Smart Order Blocks: When a "Z-UP" or "Z-DOWN" impulse is detected, the script automatically draws a horizontal box at the origin of the move. These zones represent high-interest areas where institutional orders were likely placed.
Trading Strategy (SMC Focus)
Z-UP (Green): Indicates an aggressive institutional buy. The resulting green box acts as a Bullish Order Block (Demand Zone).
Z-DOWN (Red): Indicates aggressive institutional selling. The red box acts as a Bearish Order Block (Supply Zone).
Entry: Look for price to return (Retest) to these boxes. Since these zones were created by massive momentum, they often provide high-probability entry points with clear Stop-Loss levels just outside the zone.
"Higher Z-Score = Fewer, more potent Order Block signals."
Gold Scalp//@version=5
indicator("scalp strategy (Boxed)", overlay=true)
// Ensure 5-minute chart
isFiveMin = timeframe.isminutes and timeframe.multiplier == 5
// New York time (EST/EDT auto)
nyHour = hour(time, "America/New_York")
nyMinute = minute(time, "America/New_York")
// Target times (exact candle close)
triggerTime =
(nyHour == 11 and nyMinute == 0) or
(nyHour == 19 and nyMinute == 0) or
(nyHour == 14 and nyMinute == 0) or
(nyHour == 6 and nyMinute == 0) or
(nyHour == 8 and nyMinute == 0) or
(nyHour == 21 and nyMinute == 0) or
(nyHour == 00 and nyMinute == 0)
// Final trigger
trigger = isFiveMin and triggerTime and barstate.isconfirmed
// Draw box + label
if trigger
box.new(bar_index - -5, high, bar_index, low, bgcolor=color.new(#0e06eb, 76), border_color=color.rgb(4, 252, 136))
label.new(bar_index, high, "", style=label.style_label_down, color=color.rgb(11, 48, 3), textcolor=color.white, size=size.small)
// Alert
alertcondition(trigger, title="LETS GO", message="5-minute candle CLOSED at key EST time")
eBacktesting - Learning: InducementeBacktesting - Learning: Inducement
Inducement is the “trap” move that often shows up right before a real push. Price briefly takes an internal swing level (a small high/low), pulls traders in the wrong direction, and then snaps back — usually right before continuing toward the larger objective.
How to study it:
- First, get a simple trend bias (are we making higher highs/higher lows, or lower highs/lower lows?).
- Watch the most recent internal swing level inside that trend.
- An inducement often looks like a quick sweep through that internal level, followed by a close back on the “correct” side.
These indicators are built to pair perfectly with the eBacktesting extension, where traders can practice these concepts step-by-step. Backtesting concepts visually like this is one of the fastest ways to learn, build confidence, and improve trading performance.
Educational use only. Not financial advice.
KCP Volume Pro Indicator [Dr. K. C. Prakash]KCP Volume Pro Indicator
KCP Volume Pro Indicator is a professional, non-repainting momentum–volume confirmation tool designed to identify high-probability bullish and bearish phases in any market and timeframe.
It combines:
Dual QQE (Quantitative Qualitative Estimation) logic for trend strength
RSI momentum expansion for volume pressure
Volatility (Bollinger) filtering to eliminate weak and sideways moves
🔹 How it Works
Green volume bars indicate strong bullish momentum with volatility expansion
Red volume bars indicate strong bearish momentum
Grey bars signal low-conviction or consolidation zones
The KCP Trend Line dynamically tracks the dominant momentum direction
🔹 Key Advantages
Fully input-locked (only Style & Visibility available)
Noise-filtered signals suitable for intraday, swing, and positional trading
Works across equities, indices, commodities, and crypto
Ideal for trend confirmation, breakout validation, and trade filtering
👉 Best used alongside price action, VWAP, or moving averages for precision entries.
Built for serious traders. Designed for professional use.
eBacktesting - Learning: PD ArrayseBacktesting - Learning: PD Arrays helps you practice one of the most important “Smart Money” ideas: price tends to react from specific delivery areas (PD Arrays) like Imbalances (FVGs), Order Blocks, and Breakers.
Use this to train your eyes to:
- Spot where an imbalance/OB is created (often after displacement)
- Wait for price to return into that area
- Study the reaction (hold, reject, or slice through) and what that implies next
These indicators are built to pair perfectly with the eBacktesting extension, where traders can practice these concepts step-by-step. Backtesting concepts visually like this is one of the fastest ways to learn, build confidence, and improve trading performance.
Educational use only. Not financial advice.
LANZ Origins🔷 LANZ Origins – Multi-Framework Liquidity, Structure & Risk Management Overlay
LANZ Origins is a multi-tool TradingView indicator designed to provide session context, liquidity mapping, imbalance visualization, higher-timeframe candle projection, and a fixed-SL lot size calculator.
It includes:
Risk & Lot Size Panel (up to 5 accounts):
Calculates lot size using a fixed Stop Loss in pips and a standard pip value assumption ($10 per pip per 1.0 lot). For each enabled account, it displays the estimated lots and dollar risk based on account capital and risk %. The panel is fully customizable (colors, text size, visibility).
Session Backgrounds (New York time):
Colors the chart by time blocks: Day Division, No Action Zone, Killzone, and Hold Session, helping traders visually segment the trading day.
Asian Range Liquidity Box (19:00–02:00 NY):
Draws a dynamic box tracking the session high/low, plus an optional midline (50%) with optional label. The script correctly handles sessions that cross midnight.
Imbalance Detector:
Detects and draws Fair Value Gaps (FVG), Opening Gaps (OG), and Volume Imbalances (VI) with adjustable filters (min width by points/%/ATR and extension). Optionally shows a dashboard summarizing frequency and fill rate.
ICT HTF Candles Overlay:
Projects selected higher-timeframe candles to the right of price (e.g., 30m enabled by default), with optional labels, remaining time, trace lines (O/C/H/L) and internal imbalance highlights for those HTF candle sets.
30m ZigZag projected to all timeframes:
Computes ZigZag pivots from the 30-minute timeframe and draws them on any chart timeframe, including an optional live extending leg.
LANZ Origins does not execute trades and does not generate buy/sell entries. It is a visual framework for analysis, context, and risk planning.
Previous Hourly candle2 previous hourly high and low candle and last H4 high and low candle for intra or scalp strategy
IV History from Realized Volatility# Realized Volatility History - Quick Start Guide
## What This Does
Displays historical realized volatility (RV) calculated directly from price movements. Compare it against your current implied volatility to identify options trading opportunities and gauge whether premium is expensive or cheap.
## How to Use
1. **Get Current IV**: Check your broker's options chain and find the ATM (at-the-money) implied volatility for your ticker
2. **Input the Value**: Open indicator settings and enter the current IV (e.g., `0.15` for 15%) - this creates a reference line
3. **Read the Chart**:
- **Purple line** = Historical realized volatility from actual price movements
- **Red dashed line** = Your current ATM IV (reference)
- **Orange line** = 30-day moving average (optional)
4. **Interpret the Data**:
- **RV below IV** → Options premium is relatively expensive (consider selling premium)
- **RV above IV** → Options premium is relatively cheap (consider buying options)
- **IV Rank > 70%** → High volatility environment
- **IV Rank < 30%** → Low volatility environment
## Settings You Can Adjust
- **Current ATM IV**: Reference line for comparison (update periodically)
- **RV Rolling Window**: Calculation window for realized volatility (default: 10 days)
- **Lookback Period**: Period for IV rank calculation (default: 60 days)
- **Show 30-Day Average**: Toggle moving average line
## Limitations
This indicator requires manual IV updates since TradingView doesn't have direct access to options data. You'll need to check your broker periodically and update the input for accuracy.
---
*Method: Calculates annualized realized volatility using rolling standard deviation of log returns, providing a comparison baseline for evaluating implied volatility levels.*
Alg0 Hal0 Peekab00 WindowDescription: Alg0 Hal0 Peekaboo Window
The Alg0 Hal0 Peekaboo Window is a specialized volatility and breakout tracking tool designed to isolate price action within a specific rolling time window. By defining a custom lookback period (defaulting to 4.5 hours), this indicator identifies the "Peekaboo Window"—the high and low range established during that time—and provides real-time visual alerts when price "peeks" outside of that established zone.
This tool is particularly effective for intraday traders who look for volatility contraction (ranges) followed by expansion (breakouts).
How It Works
The indicator dynamically calculates the highest high and lowest low over a user-defined hourly duration. Unlike static daily ranges, the Peekaboo Window moves with the price, providing a "rolling" zone of support and resistance based on recent market history.
Key Features
Rolling Lookback Window: Define your duration in hours (e.g., 4.5h) to capture specific session cycles.
Dynamic Visual Range: High and low levels are automatically plotted and filled with a background color for instant visual recognition of the "value area."
Peak Markers: Small diamond markers identify exactly where the local peaks and valleys were formed within your window.
Breakout Signals: Triangle markers trigger the moment price closes outside the window, signaling a potential trend continuation or reversal.
Unified Alerting: Integrated alert logic notifies you the second a breakout occurs, including the exact price level of the breach.
How to Use the Peekaboo Window
1. Identify the "Squeeze"
When the Peekaboo Window (the shaded area) begins to narrow or "flatten," it indicates the market is entering a period of consolidation. During this time, price is contained within the green (High) and red (Low) lines.
2. Trading Breakouts
The primary signal occurs when a Breakout Triangle appears:
Green Triangle Up: Price has closed above the window's resistance. Look for long entries or a continuation of bullish momentum.
Red Triangle Down: Price has closed below the window's support. Look for short entries or a continuation of bearish momentum.
3. Support & Resistance Rejections
The yellow diamond Peak Markers show you where the market has previously struggled to move further. If the price approaches these levels again without a breakout signal, they can serve as high-probability areas for mean-reversion trades (trading back toward the center of the window).
4. Customizing Your Strategy
Scalping: Lower the Lookback Duration (e.g., 1.5 hours) to catch micro-breakouts.
Swing/Intraday: Keep the default 4.5 hours or increase it to 8+ hours to capture major session ranges (like the London or New York opens).
Settings Overview
Lookback Duration: Set the "width" of your window in hours.
Window Area Fill: Customize the color and transparency of the range background.
Line Customization: Adjust the thickness and style (Solid/Dashed/Dotted) of the boundary lines.
Breakout Markers: Toggle the visibility of the triangles and diamonds to keep your chart clean.
Tick-Tock (UT Bot Alert + Linear Regression Candles)The video stated to use LineReg Candels indicator combined with UT Bot Alerts
Setting the inputs to the defvalues i've setted
setting the chart on heiken ashi and a 30m interval
Have in mind to follow indicator signals as a strategy, the confirmation of the signal and the entry happen in the
next open. entering always late, yes but never failing and with automation possibilities. no fakouts real backtest
as proven by the backtest this is not a good strategy! i should make a ticktok strategies series to disprove them
Always backtest strategies published in ticktock! www.facebook.com
if you have more strategies from ticktok you want dissproven hit me.
Smart Money Concepts [LuxAlgo]//@version=5
indicator("Gold Price (Korea 1 Don)", overlay=true)
// 설정: 실시간 환율 데이터 가져오기 (FX_IDC:USDKRW)
usdKrw = request.security("FX_IDC:USDKRW", timeframe.period, close)
// 계산 로직
// 트레이딩뷰 XAUUSD는 1트로이온스(31.1034768g) 기준
// 공식: (국제시세 * 환율 / 31.1035) * 3.75
troyOunceToGram = 31.1034768
oneDonGram = 3.75
goldPriceKrw = (close * usdKrw / troyOunceToGram) * oneDonGram
// 화면 표시 (테이블 생성)
var table priceTable = table.new(position.top_right, 2, 2, bgcolor = color.new(color.black, 50), border_width = 1)
if barstate.islast
// 헤더
table.cell(priceTable, 0, 0, "한국 금시세 (1돈)", text_color = color.white, bgcolor=color.new(color.gray, 20), text_size=size.small)
// 가격 표시 (원화 형식으로 콤마 찍어서 출력)
table.cell(priceTable, 0, 1, str.format("{0,number,###,###} 원", goldPriceKrw), text_color = color.yellow, text_size=size.large, bgcolor=color.black)
// 참고용 환율 표시
table.cell(priceTable, 1, 0, "적용 환율", text_color = color.gray, text_size=size.small)
table.cell(priceTable, 1, 1, str.format("{0,number,#,###.##} 원/$", usdKrw), text_color = color.gray, text_size=size.small)
9 EMA Pullback Zones + Grade + VWAP Regime + VIX Filter (v6)Only for education purpose When 9 ema price above or below Vwap it will give you long or short entry
Heikin Ashi Swing Setup DailyTFHeikin Ashi Swing Setup is a trend-following swing trading indicator designed for Daily timeframe traders.
This indicator combines:
Heikin Ashi candle strength
EMA-based trend confirmation
RSI momentum filter
ATR-based price expansion logic
The goal is to capture strong directional swing moves while avoiding sideways and noisy markets.
BUY Signal Logic
Strong bullish Heikin Ashi candle (no lower wick)
Price above EMA 50
EMA slope upward (trend confirmation)
RSI between 50–70
Price sufficiently away from EMA (ATR filter)
SELL Signal Logic
Strong bearish Heikin Ashi candle (no upper wick)
Price below EMA 50
EMA slope downward
RSI between 30–50
ATR-based price expansion confirmed
Recommended Usage
Timeframe: Daily
Markets: Stocks & Indices
Holding Period: 5–20 trading days
Best used with:
Weekly trend analysis
Supply & Demand zones
Previous swing highs/lows
BK AK-Crosswind Falcon🦅👑 BK AK–Crosswind Falcon (Falcon) 👑🦅
All glory to Gd — the true source of wisdom, restraint, and right timing.
AK is honor — my mentor’s standard: clarity, patience, no shortcuts, no gambling.
Falcon is a DMI/ADX “Zenith” engine built to do one thing clean: separate real wind from fake wind.
🧠 What It Is
Falcon is a non-overlay oscillator that converts classic +DI / -DI / ADX into a single signed momentum line called Zenith.
You get:
Instant Bias (no neutral): flips exactly when +DI crosses -DI
Regime Detection: TREND vs RANGE using an ADX threshold
Zenith Signal Crosses: EMA cross logic for controlled triggers
Bands / Extremes: dynamic (stdev) or static bands for stretch/exhaustion context
Execution Gates (optional): VWAP position + swing-break confirmation
MTF Bias (optional): higher-timeframe sign filter
Tiny HUD: a compact table with regime, bias, ADX, Zenith, velocity/accel, exhaustion + master score
Alerts: long/short triggers + regime switch
⚙️ The Zenith Core (How the line is built)
Falcon uses classic DMI:
diff = +DI − -DI
ADX = trend strength (smoothed)
Zenith has 3 formula options:
DI Spread × ADX (default)
→ directional DI spread “weighted” by trend strength
ADX Signed
→ ADX with direction sign from DI dominance
DX Signed
→ signed DX for a more “raw” directional read
Signal line: EMA of Zenith (Zenith Signal EMA).
🎯 What Prints Signals (Permission Logic)
Falcon only triggers when trend is ON and direction is aligned:
Long requires:
TREND regime (ADX ≥ threshold)
Bull bias (DI dominance: diff ≥ 0)
Zenith crosses above Signal
Optional gates pass (VWAP / swing break)
Optional HTF filter agrees (Zenith ≥ 0 on HTF)
Short requires:
TREND regime (ADX ≥ threshold)
Bear bias (diff < 0)
Zenith crosses below Signal
Optional gates pass (VWAP / swing break)
Optional HTF filter agrees (Zenith < 0 on HTF)
Key point: Color/bias flips are instant (DI dominance). Signals require trend + cross + gates.
🧱 Regime + Background (Trend vs Range)
Trend threshold (ADX) controls when Falcon considers the environment tradable.
Optional background shading:
Trend + Bull = green tint
Trend + Bear = red tint
Range = gray tint
Optional flash on regime/bias switches so you notice transitions immediately.
📏 Bands / Extremes (Context, Not Hype)
Choose:
Dynamic bands = stdev(Zenith) over lookback × multiplier
Static bands = fixed ± level
Use bands to read stretch / exhaustion risk:
Above upper band = overbought stretch (optional dot)
Below lower band = oversold stretch (optional dot)
This is not an auto-reversal call. It’s the “don’t get greedy / manage risk” layer.
🧰 Execution Gates (Optional Filters)
Falcon can require extra proof before firing:
VWAP Gate
“Above=Long” or inverse rule
Helps enforce “with the tape” positioning
Swing-Break Gate
Requires breaking prior N-bar high for long / N-bar low for short
Simple structure confirmation so crosses don’t trigger inside dead chop
MTF Bias (Higher-Timeframe Alignment)
Optional HTF Zenith sign filter
Keeps you from counter-signaling into a higher court trend
🖥 Tiny HUD (What the dashboard means)
The HUD summarizes:
REG (TREND/RANGE)
BIAS (BULL/BEAR)
ADX (strength)
ZEN (current Zenith)
VEL (Zenith velocity)
ACC (Zenith acceleration)
EXH (exhaustion flag based on extremes + reversal impulse)
M (master score: strength + momentum + accel + alignment − exhaustion penalty)
It’s designed to be one glance → one decision.
✅ Suggested Use (Clean workflow)
Start with Regime: only press when TREND is on (ADX threshold).
Respect Bias: DI dominance is the “instant truth.”
Wait for Cross: Zenith vs Signal cross is your trigger layer.
Turn on Gates if you want fewer trades: VWAP + swing break + HTF.
Use Bands for management: stretch = protect, not chase.
🔔 Alerts Included
ZEN-DMI Long (trend on + bull + cross up + gates)
ZEN-DMI Short (trend on + bear + cross down + gates)
Regime switch (Trend/Ranging change)
👑 King Solomon Lens — Proverbs: Hidden Wind, Refined Signal, Just Weight
Proverbs says the glory is in concealing a matter, and the king’s glory is searching it out. Falcon is built for that: finding the hidden wind inside the noise.
Proverbs also says remove the dross and you get a vessel — that’s your regime + filters stripping chop so only tradeable force remains.
And it’s ruthless about honest weights: Zenith is a measured weight of direction × strength, not vibes.
ZENITH: search what’s hidden, refine what’s noisy, weigh what’s real — then execute with authority.
🙏 Respect + Seal
Respect to AK — discipline, patience, clean execution.
All glory to Gd — the source of wisdom and endurance.
🦅👑 BK AK–Crosswind Falcon — read the wind, earn the move. 👑🦅
Hyperfork Matrix🔱 Hyperfork Matrix 🔱 A manual Andrews Pitchfork tool with action/reaction propagation lines and lattice matrix functionality. This indicator extends Dr. Alan Andrews' and Patrick Mikula's median line methodology by automating the projection of reaction and action lines at equidistant intervals, creating a time-price grid that highlights where pivot levels intersect the matrix.
Three pitchfork variants are supported: Original, Schiff, and Modified Schiff. Each variant adjusts the anchor point position to accommodate different trend angles.
═══════════════════════════════════════════════════════════════
█ THE METHOD
Andrews Pitchfork
Dr. Alan Andrews developed the pitchfork as a trend channel tool. The core principle: price tends to return to the median line roughly 80% of the time. When it fails to reach the median, a reversal may be developing.
A pitchfork requires three pivot points:
• Point A — The anchor (starting pivot)
• Point B — First swing in the opposite direction
• Point C — Second swing, same direction as A
The median line runs from Point A through the midpoint of B-C. Parallel lines through B and C form the channel boundaries.
Action/Reaction Principle
Based on Newton's third law ("action and reaction are equal and opposite"), this principle suggests that price movements elicit proportional reactions in the future. By projecting lines at equal intervals along the pitchfork's slope, we anticipate where these reactions may occur.
Lattice Matrix
The lattice squares pivot price levels to the matrix structure. A horizontal from your selected pivot intersects the pitchfork and propagation lines, with verticals drawn at each intersection. These verticals mark time points where price-time geometry converges—potential areas to watch for trend changes.
═══════════════════════════════════════════════════════════════
█ HOW THE INDICATOR WORKS
This section explains the calculation flow from your inputs to the final drawing.
Step 1 — Pivot Selection
You click on the chart to select three timestamps. The indicator retrieves the high or low price at each timestamp based on your starting pivot type selection:
• Starting with "Low" creates a Low-High-Low pattern
• Starting with "High" creates a High-Low-High pattern
Step 2 — Anchor Calculation
The anchor position depends on your pitchfork variant:
• Original — Anchor stays at Point A
• Schiff — Anchor shifts 50% toward B in price (Y-axis only)
• Modified Schiff — Anchor shifts 50% toward B in both time and price
Step 3 — Median Line
A line is drawn from the anchor through the midpoint of the B-C segment. This median line defines the channel's slope and center.
Step 4 — Parallel Tines
Parallel lines are drawn through Points B and C, maintaining the median line's slope. These form the upper and lower channel boundaries.
Step 5 — Extra Parallels
If configured, additional parallel lines are drawn at equal spacing beyond B and C. The spacing equals the distance from the median to each tine.
Step 6 — Handle Length
The "handle" is the segment from the anchor to the B-C midpoint. This length becomes the unit of measurement for propagation.
Step 7 — Propagation Points
Points are placed along the median line at handle-length intervals:
• Forward points extend into the future
• Backward points extend into the past
Step 8 — Reaction Lines
Through each propagation point, a line is drawn parallel to B-C (the transversal slope). These reaction lines mark time-price zones based on the original swing rhythm, where trend changes may occur.
Step 9 — Action Lines
Through each propagation point, a line is drawn parallel to A-B (the initial move slope). These action lines project the original momentum into future price zones.
Step 10 — Lattice Grid
If enabled, a horizontal line is drawn at the price level of your selected pivot. Vertical lines are then drawn at every intersection between this horizontal and the selected line type (pitchfork, reaction, or action lines).
Step 11 — Alert Monitoring
On each bar, the indicator checks if the price has crossed any of the drawn lines. Crossings trigger alerts based on your configuration.
═══════════════════════════════════════════════════════════════
█ PITCHFORK VARIANTS
Original (Andrews)
The classic pitchfork. The anchor remains at Point A. Best suited for strong trending markets where price respects steep channels.
Schiff
Named after Jerome Schiff, a student of Andrews. The anchor shifts halfway toward Point B in price only—same time position as A, but price is the midpoint of A and B.
This produces a less steep channel, better suited for:
• Shallow trends
• Corrective phases
• Markets where the original pitchfork angle is too aggressive
Modified Schiff
The anchor shifts halfway toward Point B in both time and price—positioned at the midpoint of the A-B segment.
This creates an even gentler slope than the standard Schiff variant. Use when:
• Trends are weak or ranging
• Price doesn't respect steeper channel angles
• You need a middle ground between Original and Schiff
═══════════════════════════════════════════════════════════════
█ ACTION & REACTION LINES
Reaction Lines
These run parallel to the B-C segment (the "transversal"). They represent the market's response rhythm—the swing from B to C sets a pattern that may repeat at predictable intervals.
Action Lines
These run parallel to the A-B segment (the initial impulse). They project the original momentum forward, suggesting where similar price movements may begin or end.
Forward vs Backward
• Forward Lines — Project into the future beyond the B-C midpoint
• Backward Lines — Project into the past before Point A
Most analysis focuses on forward lines, but backward lines can reveal historical confluence with past pivots.
Propagation Spacing
Lines are spaced at equal intervals defined by the handle length (anchor to B-C midpoint). This creates a rhythmic structure where each segment equals the original pitchfork's core measurement.
Action Lines
Reaction Lines
Extra Parallels with/ both Action & Reactions Line extended within the grid
═══════════════════════════════════════════════════════════════
█ LATTICE MATRIX
The lattice creates a grid overlay within the pitchfork structure.
Horizontal Line
A horizontal line is drawn at the price level of your selected pivot (A, B, or C). This squares the pivot's price level to find where it aligns with the matrix structure. These confluences may represent higher-probability reaction points in time.
Vertical Lines
Vertical lines are drawn at every point where the horizontal intersects your selected line source. These verticals mark time points—potential areas to watch for trend changes.
• Pitchfork & Parallels — Intersections with median and all parallel tines
• Action Lines — Intersections with action transversals
• Reaction Lines — Intersections with reaction transversals
• Action & Reaction — Both types combined
Envelope Clamping
Lattice lines are automatically clamped to stay within the pitchfork's channel envelope (bounded by the outermost parallels). This keeps the grid visually clean and focused on relevant areas.
═══════════════════════════════════════════════════════════════
█ ALERTS
The indicator monitors price crossings and triggers alerts when the price moves through any drawn line type.
Available Alert Types
• Pitchfork Lines — Crossing the median or any parallel
• Action Lines — Crossing any action transversal (when action lines are drawn)
• Reaction Lines — Crossing any reaction transversal (when reaction lines are drawn)
• Lattice Horizontal — Crossing the horizontal price level (when lattice is enabled)
• Any Line Crossing — Combined alert for all of the above
Setting Up Alerts
1. Right-click on the indicator or use the alert menu
2. Select "Create Alert."
3. Choose the desired condition from the dropdown
4. Configure notification preferences (pop-up, email, webhook, etc.)
Alert Timing
Alerts trigger once per bar close when a crossing is detected between the previous and current bar's close prices.
═══════════════════════════════════════════════════════════════
█ HOW TO USE
Basic Setup
1. Add the indicator to your chart
2. When prompted, click on three pivot points in sequence: A, B, C
3. Choose starting pivot type: Auto (detects pattern), Low (LHL), or High (HLH)
4. The pitchfork draws automatically
Adjusting the Pitchfork
• Change the variant (Original/Schiff/Modified Schiff) if the angle doesn't suit your trend
• Add extra parallel levels to see where price might react beyond the main channel
• Disable or Adjust price range min/max to hide parallels outside your focus area
Adding Propagation Lines
• Adjust forward offset to add/remove lines beyond auto-extend (0 = to current bar)
• Choose which line types to display: Reaction Only, Action Only, or Both
• Customize colors to distinguish line types visually
Using the Lattice
• Enable "Draw Lattice" in the Lattice settings group
• Select which pivot's price level to use for the horizontal
• Choose the intersection source that matches your analysis style
• Look for time zones where verticals cluster—these may be significant dates
Log Scale Charts
If your chart uses logarithmic scale, enable "Logarithmic Scale" in Pitchfork Settings. This ensures all calculations transform correctly for log price axes.
═══════════════════════════════════════════════════════════════
█ SETTINGS REFERENCE
1. Pivot Points
• Starting Pivot Type — Auto (detect pattern), Low (force LHL), or High (force HLH)
• Pivot A/B/C Time — Timestamps for your three pivots (click to select)
• Show Pivot Labels — Display A, B, C labels at pivot locations
• Pivot Colors — Customize high/low label colors
• Label Size — Tiny, Small, Normal, or Large
2. Pitchfork Settings
• Logarithmic Scale — Enable for log charts
• Pitchfork Type — Original, Schiff, or Modified Schiff
• Extra Parallel Levels — Additional parallels beyond B and C
• Line styling (color, width, style)
• Extend Direction — Right only or Both directions
• Enable Price Range Filter — Toggle filtering of extra parallels
• Price Range Min/Max — Hide extra parallels outside this range
3. Action / Reaction Lines
• Draw Type — None, Reaction Only, Action Only, or Both
• Forward Lines Offset — Adjust from auto-extend (0 = to current bar, positive adds more)
• Backward Lines Count — Number of lines projected before Point A
• Separate styling for reaction and action lines
4. Lattice
• Draw Lattice — Master toggle
• Select Pivot for Horizontal — A, B, or C price level
• Intersection Source — Which lines to use for vertical placement
• Lattice styling
═══════════════════════════════════════════════════════════════
█ LIMITATIONS
• Maximum 500 lines — TradingView limits line objects; complex setups with many parallels and propagation lines may approach this limit
• Manual pivot selection — Pivots must be selected manually via timestamp inputs; no auto-detection
• Log scale requires toggle — You must enable "Logarithmic Scale" manually if your chart uses log axes
• Minor visual drift — Action/Reaction lines may shift slightly when toggling between odd and even extra parallel counts (cosmetic only)
• Backward lines visibility — When adding backward propagation lines, you may need to scroll the chart left for them to render
═══════════════════════════════════════════════════════════════
█ FURTHER READING
For deeper study of pitchfork analysis and action/reaction methodology:
• Patrick Mikula's "The Best Trendline Methods of Alan Andrews and Five New Trendline Techniques"
No affiliation implied. Referenced for educational context only.
═══════════════════════════════════════════════════════════════
█ RELATED
For a video walkthrough of the Super Pitchfork methodology that inspired this indicator:
How to Build a Super Pitchfork with Reaction & Trigger Lines
This tutorial covers manual pitchfork construction, reaction line projection, and timing techniques.
Premium Trading Dashboard 💎 Premium Trading Dashboard - Comprehensive Description
This Pine Script v5 indicator is an elite-level all-in-one trading system designed for sophisticated traders on Bursa Malaysia. It combines institutional-grade analysis with smart money detection in a premium visual dashboard.
🎯 Core Purpose:
A comprehensive decision-making tool that analyzes 10+ technical dimensionssimultaneously to provide clear BUY/SELL signals, position sizing recommendations, and complete trade plans with entry/exit levels.

🔥 Key Features & Analysis Systems:
1. 📊 Multi-Dimensional Scoring System
Technical Rating (0-100)
• Moving Average Signals (25 pts): Price vs SMA20/50/200, MA alignment
• RSI Analysis (15 pts): Optimal 50-60 range, avoid extremes
• MACD Signals (15 pts): Line crossovers, histogram momentum
• Bollinger Bands (10 pts): Price position relative to bands
• Stochastic (10 pts): Oversold/overbought conditions
• Volume Confirmation (10 pts): Above MA20 and MA50
• ADX Trend Strength (15 pts): Strong trends above 25
Rating Levels:
• 🚀 80+: STRONG BUY
• 📈 65-79: BUY
• ↔️ 50-64: NEUTRAL
• 📉 35-49: WEAK
• 🔻 <35: VERY WEAK

Shark/Smart Money Rating (0-100)
Detects institutional and smart money activity:
• Volume Spikes (30 pts): 2x+ above MA20
• Large Candles (20 pts): 1.5x+ average range
• Strong Candles (25 pts): 70%+ body-to-range ratio
• Accumulation/Distribution (15 pts): A/D line momentum
Shark Signals:
• 🦈💰 BUYING HARD (70+): Aggressive institutional accumulation
• 🦈📈 BUYING (50+): Smart money entering
• 🦈💸 SELLING HARD (70+): Distribution phase
• 🦈📉 SELLING (50+): Smart money exiting
• ⚡ ACTIVE (40+): Moderate activity
• 😴 QUIET (<40): Low institutional interest

Momentum Score (0-100)
Measures price acceleration across multiple timeframes:
• 1-Day Change (15 pts): >3% = strong, >1% = moderate
• 5-Day Change (15 pts): >5% = strong, >2% = moderate
• 20-Day Change (20 pts): >10% = strong, >5% = moderate
• RSI Momentum (25 pts): 60-70 optimal zone
• MACD Momentum (25 pts): Histogram rising + line above signal
Momentum Levels:
• 🚀 80+: VERY STRONG
• ⬆️ 65-79: STRONG
• ➡️ 50-64: MODERATE
• ⬇️ 35-49: WEAK
• 💤 <35: VERY WEAK

Quality Rating (QR Score 0-100)
Fundamental quality indicators:
• Price vs Key MAs (30 pts): Above SMA50 & SMA200
• MA Alignment (20 pts): Perfect 7>20>50>200 hierarchy
• Volume Consistency (20 pts): Above MA50, positive growth
• 52W Position (15 pts): Price in upper range (70%+)
• Trend Strength ADX (15 pts): Above 40
QR Rating:
• ⭐⭐⭐⭐⭐ 80+: EXCELLENT
• ⭐⭐⭐⭐ 65-79: GOOD
• ⭐⭐⭐ 50-64: AVERAGE
• ⭐⭐ 35-49: BELOW AVG
• ⭐ <35: POOR

2. 🔄 Market Phase Detection (Wyckoff Cycle)
Advanced cycle analysis identifying the 4 key market phases:
• 1️⃣ ACCUMULATION 🌊: "Smart money accumulating"
◦ Sideways at bottom, increasing volume, A/D rising
◦ Best phase for building positions
• 2️⃣ MARKUP 🚀: "Active buying phase"
◦ Strong uptrend, price above all MAs
◦ Momentum building, breakouts occurring
• 3️⃣ DISTRIBUTION ⚠️: "Smart money distributing"
◦ Sideways at top, high volume, A/D falling
◦ Warning phase - prepare to exit
• 4️⃣ MARKDOWN 📉: "Active selling phase"
◦ Downtrend, price below MAs
◦ Avoid new entries
• ↔️ TRANSITION: Between phases

3. 💎 Conviction Level (Composite Score)
Weighted combination of all ratings:
• Technical (30%) + Shark (25%) + Momentum (25%) + QR (20%)
Conviction Levels:
• 💎💎💎 80+: VERY HIGH - Maximum confidence
• 💎💎 65-79: HIGH - Strong confidence
• 💎 50-64: MODERATE - Reasonable confidence
• ⚠️ 35-49: LOW - Weak conviction
• ❌ <35: VERY LOW - Avoid

4. 📋 Analyst Rating (Overall Score)
Final composite recommendation:
• Technical (35%) + Shark (25%) + Momentum (25%) + QR (15%)
Analyst Ratings:
• ⭐⭐⭐⭐⭐ 80+: STRONG BUY
• ⭐⭐⭐⭐ 65-79: BUY
• ⭐⭐⭐ 50-64: HOLD
• ⭐⭐ 35-49: WEAK
• ⭐ <35: AVOID

5. 🎯 Trading Signal Generation (LONG Only)
Smart signal logic with multiple confirmations:
• 🚀 STRONG BUY: Tech 70+, Momentum 60+, Volume spike, Price > SMA20, RSI < 70
• 📈 BUY: Tech 60+, Momentum 50+, Price > SMA20, RSI < 65
• ⏳ WAIT & WATCH: Tech/Conviction 50+
• 🛑 AVOID: Below thresholds

6. 💰 Position Size Recommendation
Risk-based position sizing (% of capital):
• 💰 FULL (5%): Conviction 75+ - Highest confidence
• 💵 LARGE (3-4%): Conviction 60-74 - Strong confidence
• 💳 MEDIUM (2-3%): Conviction 45-59 - Moderate confidence
• 💸 SMALL (1-2%): Conviction 30-44 - Low confidence
• 🚫 AVOID: Conviction <30

7. 📊 Volume Analysis
Real-time volume assessment:
• 🔥🔥🔥 EXTREME: 3x+ above MA20
• 🔥🔥 VERY HIGH: 2x+ above MA20
• 🔥 HIGH: 1.5x+ above MA20
• ⬆️ ABOVE AVG: 1x-1.5x MA20
• ➡️ NORMAL: 0.7x-1x MA20
• ⬇️ LOW: Below 0.7x MA20

8. 📈 Trend Analysis
Dynamic trend detection with duration tracking:
• 📈 STRONG BULLISH: All MAs perfectly aligned (7>20>50>200)
• 📈 BULLISH: Major MAs aligned (20>50>200)
• 📉 STRONG BEARISH: All MAs reversed (7<20<50<200)
• 📉 BEARISH: Major MAs reversed
• ↔️ SIDEWAYS: Mixed alignment
Trend Duration Counter: Shows how many bars trend has persisted

9. 🔥 Catalysts Detection
Identifies multiple positive triggers simultaneously:
• 52-week high breakout
• Smart money buying
• Volume spike (2x+)
• Strong daily move (3%+)
• Bollinger Band breakout
Catalyst Status:
• 🔥🔥🔥 MULTIPLE (4-5): Explosive setup
• 🔥🔥 STRONG (3): Strong setup
• 🔥 PRESENT (2): Good setup
• ⚡ MINOR (1): Weak setup
• ➖ NONE (0): No catalysts

10. 🎮 Trading Mode Recommendation
Suggests optimal trading strategy:
• 🎯 TREND FOLLOW: ADX 40+, strong uptrend
• 📊 RANGE TRADE: ADX <20, sideways between SMAs
• 🦈 SMART MONEY: Following institutional activity
• 🚀 BREAKOUT: Breaking 52W or period high
• ⚡ MOMENTUM: Strong momentum score
• ⏸️ WAIT: No clear opportunity

11. ✅ Overall Status
Clear action recommendation:
• ✅ READY TO BUY: Analyst 75+, Conviction 70+
• 🟢 GOOD TO BUY: Analyst 60+, Conviction 55+
• 🟡 MONITOR: Analyst 45+
• 🟠 CAUTION: Analyst 30-44
• 🔴 AVOID: Analyst <30

12. 💰 Complete Trade Plan
Automatically calculates:
• 🎯 Entry Price: Current close
• 🛑 Stop Loss: ATR-based (2x for big cap, 2.5x for penny stocks)
• 💚 TP1: 1.5R risk-reward
• 💎 TP2: 2.5R risk-reward
• 🏆 TP3: 4.0R risk-reward
• 📊 Risk/Share: Amount risked per share

🎨 Visual Components:
Premium Dashboard (24-Row Table)
• Dark theme with blue frame (#0a0e27 bg, #1e88e5 frame)
• Gold headers (#ffd54f) for section labels
• Color-coded values based on conditions
• Customizable position: 4 corner options
• Real-time updates on every bar
Additional Indicators:
• Moving Averages: SMA 7/20/50/200, EMA 9/21
• Bollinger Bands: 20-period, 2 std dev
• 52-Week High/Low: 252 trading days
• Breakout Lines: Customizable period

🔔 Built-in Alerts:
1. Strong Buy Signal: Tech + Momentum + Volume aligned
2. Shark Buy Alert: Institutional buying detected
3. Multiple Catalysts: 3+ triggers present
4. Strong Buy Rating: Analyst score reaches 80+

⚙️ Customizable Parameters:
• Technical: RSI period, MACD settings
• Shark Detection: Volume multiplier, candle size
• Breakout: Lookback period
• TP/SL: Separate multipliers for big cap vs penny stocks
• Display: Dashboard on/off, position
• Risk-Reward Ratios: Customize TP1/2/3 levels

🎯 Best Use Cases:
✅ Bursa Malaysia LONG-only trading
✅ Swing trading with institutional confirmation
✅ Multi-timeframe analysis (Daily, 4H, 1H)
✅ Position sizing and risk management
✅ Identifying accumulation phases early
✅ High-probability breakout trading
✅ Avoiding distribution zones

🚀 Trading Workflow:
1. Check Overall Status - Ready to buy?
2. Review Analyst Rating - Overall score
3. Confirm Market Phase - Accumulation/Markup best
4. Verify Shark Activity - Smart money buying?
5. Check Catalysts - Multiple triggers?
6. Review Trade Plan - Entry/SL/TP levels
7. Set Position Size - Based on conviction
8. Monitor Trend and Volume - Stay aligned

This is a professional-grade institutional analysis tool condensed into one powerful indicator, perfect for serious traders who want data-driven decisions with smart money confirmation. 💎📈
Engulfing + EMA + WMA + ICT Alejandradetector de velas engulfing
7 emas disponibles
wma
detector de bos y choch
ImbalanceDetects and visualizes price imbalances across multiple higher timeframes (Monthly, Weekly, Daily, 4H, 1H, 15m, 5m).
The script draws color-coded bullish and bearish imbalance boxes with dotted midpoint lines, supports extending boxes to the right, optional reduction (shrink on partial fill), and automatic aging/removal of old zones — making it easy to spot persistent supply/demand imbalances at a glance.






















