ٹرینڈ شفٹ ٹرینڈ ریورسل اسٹریٹجی

Pivot ATR STRUCTURE BAND
تخلیق کی تاریخ: 2025-12-04 16:34:26 آخر میں ترمیم کریں: 2026-01-20 09:29:36
کاپی: 9 کلکس کی تعداد: 201
2
پر توجہ دیں
413
پیروکار

ٹرینڈ شفٹ ٹرینڈ ریورسل اسٹریٹجی ٹرینڈ شفٹ ٹرینڈ ریورسل اسٹریٹجی

اس حکمت عملی کا کیا مطلب ہے؟

کیا آپ جانتے ہیں؟ یہ حکمت عملی مارکیٹ کے جذبات کا پتہ لگانے والی مشین کی طرح ہے۔ یہ خاص طور پر ان اہم موڑ کو پکڑتی ہے جو خوردہ فروشوں کو نظر انداز کر دیتے ہیں۔ ذرا تصور کریں کہ اگر آپ اسٹاک کی قیمتوں میں تبدیلی کا وقت پہلے سے جان سکتے ہیں تو کیا یہ آپ کے پاس تجارت کرنے کی طاقت نہیں ہے؟

اس حکمت عملی کا بنیادی نظریہ انتہائی آسان ہے: مارکیٹ کی ساخت اس وقت بدل جاتی ہے جب قیمت ایک اہم اونچائی یا نچلی سطح کو عبور کرتی ہے۔ جیسا کہ جب آپ پہاڑ پر چڑھتے ہو تو اچانک پتہ چلتا ہے کہ آگے نیچے کی طرف ہے ، رجحانات میں تبدیلی اکثر اسی لمحے ہوتی ہے!

تین بنیادی میکانیزموں پر توجہ دیں!

1۔ سائیکلنگ پوائنٹ شناخت سسٹم 🎢 حکمت عملی خود بخود اہم عروج اور نچلے حصے کی نشاندہی کرتی ہے جو پچھلے دورانیے میں ہوا ہے ، جیسے مارکیٹ کو “ٹاپ” اور “وادی” کی تصویر بنانا۔ جب قیمت ان اہم مقامات سے ٹکرا جاتی ہے تو ، یہ ایک اشارہ ہے کہ رجحان تبدیل ہوسکتا ہے!

اے ٹی آر فلٹر 📏 یہاں ایک بہت ہی ذہین ڈیزائن ہے! حکمت عملی کو چھوٹی اتار چڑھاؤ سے نظرانداز نہیں کیا جاسکتا ہے ، اور اس کے لئے یہ ضروری ہے کہ ATR کی ایک خاص تعداد کو توڑنے کے ل.

3۔ پریمیم / ڈسکاؤنٹ رینج فریم ورک 💎 سب سے زیادہ دلچسپ بات یہ ہے کہ حکمت عملی قیمتوں میں “سستے زون” اور “مہنگے زون” کی تقسیم کرتی ہے۔ سستے زون میں خریدیں اور مہنگے زون میں فروخت کریں۔ کیا یہ سرمایہ کاری کا سنہری اصول نہیں ہے؟

جنگ کے فوائد کہاں ہیں؟

گڑھے سے بچنے کے لئے رہنمائییہ حکمت عملی خاص طور پر رجحانات کی تبدیلی کے پہلے لمحے میں کھیلنے کے لئے ڈیزائن کی گئی ہے ، جس سے آپ کو “سمارٹ پیسہ” بننے کے بجائے “ڈیسک باز” بننے کا موقع ملتا ہے۔

گڑھے سے بچنے کا گائیڈ IIآپ کے اکاؤنٹ کے تناسب پر مبنی پوزیشنوں کے سائز کا خود کار طریقے سے حساب لگایا جا سکتا ہے، اور آپ کو آرام سے سونے کے لئے وقفے کی بنیاد پر سٹاپ نقصان کی حد مقرر کی جا سکتی ہے.

گڑھے سے بچنے کے لئے گائیڈ IIIاس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ

کیا آپ کو لگتا ہے کہ آپ کے لئے بہترین ٹریڈر کون ہے؟

یہ حکمت عملی خاص طور پر درمیانی اور طویل مدتی تاجروں کے لئے موزوں ہے ، کیونکہ اس میں مارکیٹ کے ڈھانچے میں بنیادی تبدیلیوں پر توجہ دی جاتی ہے ، نہ کہ مختصر مدت کے شور پر۔

یاد رکھیں ، بہترین حکمت عملی یہ نہیں ہے کہ آپ ہر روز تجارت کریں ، بلکہ یہ ہے کہ آپ صحیح وقت پر صحیح کام کریں!

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-12-04 00:00:00
end: 2025-12-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/


//@version=6
strategy(title="Trendshift [CHE] Strategy", shorttitle="TrShStr", overlay=true)

// ——— SECTION: Constants & Enums
string GROUP_MARKET_STRUCTURE = "Market Structure"
string GROUP_FRAMEWORK = "Premium/Discount Framework"
string GROUP_VISUAL = "Visuals"
string GROUP_RISK = "Execution and Risk"

// ——— SECTION: Inputs (grouped; tooltips; one-row via inline)
swing_len_input = input.int(5, "Swing length", minval=1, group=GROUP_MARKET_STRUCTURE, inline="msw", tooltip="Bars left and right for major swing highs and lows.")
is_use_atr_filter_input = input.bool(true, "Use ATR filter", group=GROUP_MARKET_STRUCTURE, inline="msw", tooltip="Require breakout to exceed swing level by an ATR multiple.")
atr_len_input = input.int(14, "ATR length", minval=1, group=GROUP_MARKET_STRUCTURE, inline="atr", tooltip="ATR length for conviction and band checks.")
atr_mult_break_input = input.float(1.0, "Break ATR mult", minval=0.0, step=0.1, group=GROUP_MARKET_STRUCTURE, inline="atr", tooltip="Distance beyond swing, in ATR units, to confirm a structure shift.")

is_enable_framework_input = input.bool(true, "Enable framework", group=GROUP_FRAMEWORK, inline="fw", tooltip="Enable premium and discount band logic.")
is_persist_last_band_input = input.bool(true, "Persist band on timeout", group=GROUP_FRAMEWORK, inline="fw", tooltip="Keep last band after regime timeout.")
min_band_atr_mult_input = input.float(0.5, "Min band ATR mult", minval=0.0, step=0.1, group=GROUP_FRAMEWORK, inline="band", tooltip="Minimum band height relative to ATR.")
regime_timeout_bars_input = input.int(200, "Regime timeout bars", minval=0, group=GROUP_FRAMEWORK, inline="band", tooltip="Bars since last shift before regime reset. Zero disables timeout.")
is_invert_colors_input = input.bool(false, "Invert colors", group=GROUP_FRAMEWORK, inline="col", tooltip="Swap premium and discount colors.")

show_zone_tint_input = input.bool(true, "Show zone tint", group=GROUP_VISUAL, inline="vis", tooltip="Tint background in discount or premium bands.")
show_structure_marks_input = input.bool(true, "Show shift markers", group=GROUP_VISUAL, inline="vis", tooltip="Show first bullish and first bearish structure shift markers.")

risk_percent_input = input.float(1.0, "Risk per trade percent", minval=0.0, maxval=100.0, step=0.1, group=GROUP_RISK, inline="risk", tooltip="Account percent used to size position.")
is_use_band_for_size_input = input.bool(false, "Use band for size", group=GROUP_RISK, inline="risk", tooltip="If enabled, band height is used to scale position size.")
is_close_on_opposite_input = input.bool(true, "Flat on opposite shift", group=GROUP_RISK, inline="exit", tooltip="Close and reverse on opposite first shift.")
is_use_stop_band_input = input.bool(false, "Use stop at band", group=GROUP_RISK, inline="exit", tooltip="If enabled, band edge is used as stop distance.")
stop_band_side_input = input.string("Opposite band edge", "Stop band side", options=["Opposite band edge", "Same band edge"], group=GROUP_RISK, inline="exit", tooltip="Defines which band edge is used as stop reference.")

// ——— SECTION: Types
// (no custom types)

// ——— SECTION: Persistent Vars → Runtime Vars
var float last_swing_high = na
var float last_swing_low = na
var int last_swing_high_bar = na
var int last_swing_low_bar = na

var int regime = 0
var float band_low = na
var float band_high = na
var float struct_level = na

var int last_shift_bar = na
var bool is_last_shift_bullish = false

// ——— SECTION: Helpers (pure, no side effects)
stop_from_band(is_long, band_low_value, band_high_value, stop_side) =>
    float stop_price = na
    if is_long
        stop_price := stop_side == "Opposite band edge" ? band_low_value : band_high_value
    else
        stop_price := stop_side == "Opposite band edge" ? band_high_value : band_low_value
    stop_price

// ——— SECTION: Core Calculations

// Swings and ATR
pivot_high_value = ta.pivothigh(high, swing_len_input, swing_len_input)
pivot_low_value = ta.pivotlow(low, swing_len_input, swing_len_input)

if not na(pivot_high_value)
    last_swing_high := pivot_high_value
    last_swing_high_bar := bar_index - swing_len_input

if not na(pivot_low_value)
    last_swing_low := pivot_low_value
    last_swing_low_bar := bar_index - swing_len_input

atr_value = ta.atr(atr_len_input)

// Structure shifts
has_major_high = not na(last_swing_high)
has_major_low = not na(last_swing_low)

is_bullish_break_base = has_major_high and close > last_swing_high
is_bearish_break_base = has_major_low and close < last_swing_low

is_bullish_break = is_bullish_break_base
is_bearish_break = is_bearish_break_base

if is_use_atr_filter_input and atr_value > 0.0
    is_bullish_break := is_bullish_break_base and (close - last_swing_high) >= atr_mult_break_input * atr_value
    is_bearish_break := is_bearish_break_base and (last_swing_low - close) >= atr_mult_break_input * atr_value

is_bullish_shift = is_bullish_break and has_major_low
is_bearish_shift = is_bearish_break and has_major_high

if is_bullish_shift and is_bearish_shift
    is_bullish_shift := close >= open
    is_bearish_shift := not is_bullish_shift

is_bullish_shift_first = is_bullish_shift and (na(last_shift_bar) or not is_last_shift_bullish)
is_bearish_shift_first = is_bearish_shift and (na(last_shift_bar) or is_last_shift_bullish)

// Regime and band update
if is_bullish_shift
    regime := 1
    band_low := last_swing_low
    band_high := high
    struct_level := last_swing_high
    last_shift_bar := bar_index
    is_last_shift_bullish := true

if is_bearish_shift
    regime := -1
    band_low := low
    band_high := last_swing_high
    struct_level := last_swing_low
    last_shift_bar := bar_index
    is_last_shift_bullish := false

// Regime timeout and band clear
if regime_timeout_bars_input > 0 and regime != 0 and not is_bullish_shift and not is_bearish_shift and not na(last_shift_bar) and bar_index - last_shift_bar > regime_timeout_bars_input
    regime := 0
    if not is_persist_last_band_input
        band_low := na
        band_high := na
        struct_level := na

// Premium and discount band
is_base_valid_band = is_enable_framework_input and not na(band_low) and not na(band_high) and band_high > band_low
price_span = is_base_valid_band ? band_high - band_low : na
is_band_not_tiny = is_base_valid_band and atr_value > 0.0 and min_band_atr_mult_input > 0.0 and price_span >= min_band_atr_mult_input * atr_value or is_base_valid_band and (min_band_atr_mult_input == 0.0 or atr_value <= 0.0)
is_valid_band = is_base_valid_band and is_band_not_tiny

discount_threshold = is_valid_band ? band_low + 0.25 * price_span : na
premium_threshold = is_valid_band ? band_low + 0.75 * price_span : na

is_in_discount = is_valid_band and close <= discount_threshold
is_in_premium = is_valid_band and close >= premium_threshold

// Execution sizing and stops
acc_value = strategy.equity
base_qty = risk_percent_input > 0.0 ? acc_value * risk_percent_input * 0.01 / nz(close, 1.0) : 0.0
band_qty_factor = is_use_band_for_size_input and is_valid_band and atr_value > 0.0 ? math.min(2.0, math.max(0.25, price_span / atr_value)) : 1.0
trade_qty = base_qty * band_qty_factor

is_long_entry = is_bullish_shift_first
is_short_entry = is_bearish_shift_first

float long_stop = na
float short_stop = na

if is_use_stop_band_input and is_valid_band
    long_stop := stop_from_band(true, band_low, band_high, stop_band_side_input)
    short_stop := stop_from_band(false, band_low, band_high, stop_band_side_input)

// Strategy entries and exits
if is_long_entry and trade_qty > 0.0
    if is_close_on_opposite_input and strategy.position_size < 0
        strategy.close("Short")
    if is_use_stop_band_input and not na(long_stop)
        strategy.entry("Long", strategy.long, qty=trade_qty)
        strategy.exit("Long SL", "Long", stop=long_stop)
    else
        strategy.entry("Long", strategy.long, qty=trade_qty)

if is_short_entry and trade_qty > 0.0
    if is_close_on_opposite_input and strategy.position_size > 0
        strategy.close("Long")
    if is_use_stop_band_input and not na(short_stop)
        strategy.entry("Short", strategy.short, qty=trade_qty)
        strategy.exit("Short SL", "Short", stop=short_stop)
    else
        strategy.entry("Short", strategy.short, qty=trade_qty)

// ——— SECTION: Rendering/UI (GLOBAL ONLY; single-line calls)
discount_zone_color = is_invert_colors_input ? color.new(color.red, 30) : color.new(color.green, 30)
premium_zone_color = is_invert_colors_input ? color.new(color.green, 30) : color.new(color.red, 30)

discount_bg_color = show_zone_tint_input and is_in_discount ? color.new(discount_zone_color, 85) : na
premium_bg_color = show_zone_tint_input and is_in_premium ? color.new(premium_zone_color, 85) : na

bgcolor(discount_bg_color, title="Discount zone tint")
bgcolor(premium_bg_color, title="Premium zone tint")

plotshape(show_structure_marks_input and is_bullish_shift_first ? low : na, title="Bullish structure shift first", style=shape.triangleup, location=location.belowbar, size=size.small, color=color.new(color.lime, 0), text="Shift Up", textcolor=color.white)
plotshape(show_structure_marks_input and is_bearish_shift_first ? high : na, title="Bearish structure shift first", style=shape.triangledown, location=location.abovebar, size=size.small, color=color.new(color.red, 0), text="Shift Down", textcolor=color.white)