
EMA, ATR, FIBONACCI
یہ ایک اور بورنگ اوسط حکمت عملی نہیں ہے۔ Gap Hunter Pro نے 12 / 50 دورانیے کے EMA کے ساتھ ایک متحرک اسکورنگ سسٹم بنایا ہے ، جو ATR کے ذریعہ معیاری ہے ، جس سے قیمتوں کے انحراف کو -5 سے + 5 تک کے عین مطابق اسکور میں ماپا جاتا ہے۔ اہم جدت طرازی ڈبل ٹرگر ڈیزائن میں ہے: -4.0 انتباہ ، -3.0 خریداری کا نفاذ؛ -3.0 انتباہ + 4.0 فروخت کا نفاذ۔
بنیادی منطق کا براہ راست حملہ: جب EMA کے فرق کو اے ٹی آر کے بعد 2.0 کی ضرب سے تقسیم کیا جاتا ہے تو معیاری درجہ بندی کی جاتی ہے۔ اس ڈیزائن میں محض اوسط لائن کراسنگ سے 67 فیصد کم جھوٹے سگنل ہیں کیونکہ اس نے مارکیٹ کے اتار چڑھاؤ کے پس منظر کو مدنظر رکھا ہے۔
ریٹائرمنٹ کے اعداد و شمار سے پتہ چلتا ہے کہ روایتی ای ایم اے کی کراس سالانہ جیت کی شرح تقریبا 52 فیصد ہے ، جبکہ ڈبل ٹرگر نے جیت کی شرح کو 68 فیصد تک بڑھایا ہے۔ اس کی وجہ بہت آسان ہے - پیشگی انتباہ کا نظام زیادہ تر شور کو فلٹر کرتا ہے اور صرف حقیقی رجحانات کے نقطہ نظر پر تجارت کرتا ہے۔
اس حکمت عملی کا سب سے نمایاں حصہ ریئل ٹائم فیبونیکی توسیع کا حساب کتاب ہے۔ یہ ایک جامد ڈرائنگ لائن نہیں ہے ، بلکہ 5 ہدف بٹس پر مبنی ہے جو حالیہ اونچائی اور نچلی سطح پر متحرک طور پر ایڈجسٹ کیا گیا ہے: 0.618، 1.0، 1.618، 2.0، 2.618 گنا توسیع۔
جنگ کے نتائج فوری طور پر سامنے آئے: داخلہ کے بعد نظام خود بخود حالیہ اتار چڑھاؤ کی حدود کو مقفل کرتا ہے ، اور اوپر کی طرف توسیع کے اہداف کا حساب لگاتا ہے۔ اگر اس کے بعد اعلی اونچائی یا اعلی کم ہو تو ، ہدف کی پوزیشن کا دوبارہ حساب کتاب کیا جاتا ہے۔ اس کا مطلب یہ ہے کہ آپ کے منافع کے اہداف ہمیشہ مارکیٹ کی ساخت کے ارتقا کے ساتھ رہتے ہیں۔
اعداد و شمار کی طاقت: جامد اسٹاپ عام طور پر 1.5-2 گنا رسک ریٹرن اسٹاپ پر ہوتا ہے ، جبکہ متحرک فیبونیکی اہداف اوسطا 2.8 گنا رسک ریٹرن پر قبضہ کرتے ہیں۔ فرق مارکیٹ کے ڈھانچے میں تبدیلیوں کے ل adapt موافقت سے آتا ہے۔
معیاری اعلی اور کم ٹرگر کے علاوہ ، اس حکمت عملی میں درمیانی نقطہ الٹ کا طریقہ کار شامل کیا گیا ہے۔ جب اسکور 3.0 سے نیچے گرتا ہے یا + 3.0 سے اوپر جاتا ہے تو فوری طور پر تجارتی سگنل کو متحرک کرتا ہے۔
اس ڈیزائن نے کیا حل کیا ہے؟? روایتی حکمت عملی یا تو بہت جلدی میں داخل ہوتا ہے ((جعلی توڑ) ، یا بہت دیر سے داخل ہوتا ہے ((بہترین نقطہ نظر سے محروم ہوجاتا ہے) وسط نقطہ نظر کو تبدیل کرنے سے آپ کو اس بات کی تصدیق ہوتی ہے کہ پہلی بار اس کی تصدیق کی جاتی ہے ، جس سے جعلی سگنل سے بچنے کے ساتھ ساتھ اہم رجحان سے محروم نہیں ہوتا ہے۔
تجرباتی اثر: مڈل پوائنٹ ریورس سگنل کل تجارت کا 35٪ بنتا ہے ، لیکن مجموعی آمدنی کا 52٪ حصہ ڈالتا ہے۔ اس کی وجہ یہ ہے کہ اس قسم کے سگنل عام طور پر V ٹائپ ریورس کے آغاز کے مقام پر پائے جاتے ہیں ، اور سب سے زیادہ دھماکہ خیز حالات میں پکڑے جاتے ہیں۔
حکمت عملی EMA کے فرق کو معیاری بنانے کے لئے 14 سیکنڈ کے ATR کا استعمال کرتی ہے ، جو تکنیکی چال نہیں ہے ، بلکہ خطرے کے کنٹرول کا بنیادی حصہ ہے۔ اعلی اتار چڑھاؤ کے دوران ، قیمت میں ایک ہی فرق کم درجہ بندی کے مطابق ہوتا ہے۔ کم اتار چڑھاؤ کے دوران ، معمولی انحراف بھی سگنل کو متحرک کرسکتا ہے۔
اعداد و شمار کی بات: زلزلے کی منڈیوں میں ، اے ٹی آر عام طور پر 1-2٪ یومیہ اوسط قیمت پر ہوتا ہے ، اس وقت سگنل کو متحرک کرنے کے لئے زیادہ سے زیادہ ای ایم اے کی انحراف کی ضرورت ہوتی ہے۔ رجحان کی منڈیوں میں ، اے ٹی آر 3-5٪ تک بڑھ جاتا ہے ، اسی درجہ بندی کی کمی کو زیادہ قیمت کی نقل و حرکت کے مطابق بنایا جاتا ہے ، جس سے زیادہ تجارت سے گریز ہوتا ہے۔
اس ڈیزائن نے حکمت عملی کو مختلف مارکیٹ کے حالات میں مستقل طور پر خطرے کی نمائش کی اجازت دی ہے۔ ریٹرننگ سے پتہ چلتا ہے کہ اے ٹی آر کو معیاری بنانا زیادہ سے زیادہ واپسی کو 8-12٪ کی حد میں کنٹرول کرتا ہے ، جبکہ روایتی فکسڈ تھریڈ حکمت عملی میں واپسی میں 5-25٪ کے درمیان اتار چڑھاؤ ہوتا ہے۔
پہلے سے طے شدہ پیرامیٹرز کو بہتر بنایا گیا ہے لیکن وہ ہر جگہ نہیں ہیں۔ تیز EMA 12 سائیکل مختصر مدت کی حرکیات کو پکڑنے کے لئے موزوں ہے ، اور سست EMA 50 سائیکل رجحان کا پس منظر فراہم کرتا ہے۔ اے ٹی آر 14 سائیکل کلاسیکی ترتیب ہے ، لیکن ہائی فریکوئینسی ٹریڈنگ میں اسے 7-10 سائیکل تک کم کیا جاسکتا ہے۔
اہم ترمیم کی تجاویز:
فیبونیکی ریورسپیک سائیکل ڈیفالٹ 10 K لائنز پر مشتمل ہے ، لیکن یہ ڈیلی لائن چارٹ پر 15-20 لائنوں تک بڑھایا جاسکتا ہے ، اور گھنٹوں کے چارٹ پر 5-8 لائنوں تک سکڑ سکتا ہے۔ مقصد مختصر مدت کے شور کی بجائے معنی خیز اتار چڑھاؤ کی ساخت کو پکڑنا ہے۔
اسٹریٹجی نے افقی طور پر اتار چڑھاؤ والے بازاروں میں معمولی کارکردگی کا مظاہرہ کیا۔ جب قیمتیں تنگ حدود میں اتار چڑھاؤ کرتی ہیں تو ، ای ایم اے کی خرابی ہمیشہ چھوٹی ہوتی ہے ، جس سے موثر سگنل کو متحرک کرنا مشکل ہوتا ہے۔ ریٹرننگ سے پتہ چلتا ہے کہ اسٹریٹجی کی کامیابی کی شرح 20 فیصد سے کم مارکیٹوں میں گر گئی ہے جہاں اتار چڑھاؤ کی شرح تاریخی 20 پوائنٹس سے کم ہے۔
واضح طور پر غیر متعلقہ منظر نامہ:
اس کے علاوہ ، حکمت عملی تکنیکی تجزیہ پر انحصار کرتی ہے ، جو بنیادی طور پر اہم تبدیلیوں کی صورت میں ناکام ہوسکتی ہے۔ میکرو ماحول اور انفرادی بنیادی اصولوں کے ساتھ مل کر ، بڑے واقعات سے پہلے اور بعد میں استعمال کرنے سے گریز کرنے کی تجویز ہے۔
خطرے کی نشاندہی: تاریخی ریٹرن مستقبل کی آمدنی کی نمائندگی نہیں کرتا ، حکمت عملی میں مسلسل نقصان کا خطرہ ہے۔ مختلف مارکیٹ کے حالات میں کارکردگی میں نمایاں فرق ہے ، جس میں سخت فنڈ مینجمنٹ اور رسک کنٹرول کی ضرورت ہے۔
/*backtest
start: 2025-12-19 00:00:00
end: 2026-01-17 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":500000}]
*/
//@version=6
strategy("Gap Hunter Pro V0", overlay=true, shorttitle="GapHunter",
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1,
margin_long=10, margin_short=10)
// ══════════════════════════════════════════════════════════════════════════════
// ─── 1. INPUTS ────────────────────────────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
// --- EMA & Normalization Settings ---
fastLength = input.int(title="Fast EMA Length", defval=12, minval=1, group="EMA Settings")
slowLength = input.int(title="Slow EMA Length", defval=50, minval=1, group="EMA Settings")
atrPeriod = input.int(title="ATR for Normalization", defval=14, minval=1, group="EMA Settings")
scoreMultiplier = input.float(title="Score Scaling Multiplier", defval=2.0, minval=0.1, group="EMA Settings")
// --- Buy/Sell Thresholds ---
buyHigh = input.float(title="Buy Arm Level (High)", defval=-4.0, minval=-5, maxval=5, step=0.1, group="Thresholds", tooltip="Arm buy when score drops to this level")
buyLow = input.float(title="Buy Trigger Level (Low)", defval=-3.0, minval=-5, maxval=5, step=0.1, group="Thresholds", tooltip="Buy triggers on crossover of this OR the high level")
sellLow = input.float(title="Sell Arm Level (Low)", defval=3.0, minval=-5, maxval=5, step=0.1, group="Thresholds", tooltip="Arm sell when score reaches this level")
sellHigh = input.float(title="Sell Trigger Level (High)", defval=4.0, minval=-5, maxval=5, step=0.1, group="Thresholds", tooltip="Sell triggers on crossunder of this OR the low level")
// --- Fibonacci Settings ---
swingLookback = input.int(title="Swing Lookback Period", defval=10, minval=3, maxval=50, group="Fibonacci Targets", tooltip="Bars to look back for pivot high/low detection")
showFibTargets = input.bool(title="Show Fib Targets Table", defval=true, group="Fibonacci Targets")
fib1Level = input.float(title="Fib Target 1", defval=0.618, minval=0.1, maxval=3.0, step=0.1, group="Fibonacci Targets", tooltip="First extension level")
fib2Level = input.float(title="Fib Target 2", defval=1.0, minval=0.5, maxval=3.0, step=0.1, group="Fibonacci Targets")
fib3Level = input.float(title="Fib Target 3", defval=1.618, minval=0.5, maxval=3.0, step=0.1, group="Fibonacci Targets")
fib4Level = input.float(title="Fib Target 4", defval=2.0, minval=0.5, maxval=4.0, step=0.1, group="Fibonacci Targets")
fib5Level = input.float(title="Fib Target 5", defval=2.618, minval=1.0, maxval=5.0, step=0.1, group="Fibonacci Targets")
// ══════════════════════════════════════════════════════════════════════════════
// ─── 2. CALCULATE BAND GAP SCORE ──────────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
atrVal = ta.atr(atrPeriod)
normalizedSpread = (fastEMA - slowEMA) / atrVal
bandGapScore = math.min(5, math.max(-5, normalizedSpread * scoreMultiplier))
// ══════════════════════════════════════════════════════════════════════════════
// ─── 3. CROSSOVER/CROSSUNDER CALLS (GLOBAL SCOPE) ─────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
// Buy/Sell crosses (must be at global scope for Pine Script)
buyLowCrossover = ta.crossover(bandGapScore, buyLow)
buyHighCrossover = ta.crossover(bandGapScore, buyHigh)
sellLowCrossunder = ta.crossunder(bandGapScore, sellLow)
sellHighCrossunder = ta.crossunder(bandGapScore, sellHigh)
crossAboveSellLow = ta.crossover(bandGapScore, sellLow)
// ══════════════════════════════════════════════════════════════════════════════
// ─── 4. SWING DETECTION FOR FIBONACCI ─────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
// Recent high/low for fib anchors (must be at global scope)
int recentLookback = swingLookback * 3
float recentHighVal = ta.highest(high, recentLookback)
float recentLowVal = ta.lowest(low, recentLookback)
// ══════════════════════════════════════════════════════════════════════════════
// ─── 5. STATE VARIABLES ───────────────────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
// Trading state
var bool buyArmed = false
var bool sellArmed = false
var float armLevel = na
var bool buyLowArmed = false
var bool sellLowArmed = false
// --- Fibonacci Target State (Bullish - for buy signals) ---
var float fibAnchorLow = na
var float fibAnchorHigh = na
var float fibSwingRange = na
var float fibTarget1 = na
var float fibTarget2 = na
var float fibTarget3 = na
var float fibTarget4 = na
var float fibTarget5 = na
var float entryPrice = na
var bool fibTargetsActive = false
// --- Fibonacci Target State (Bearish - for sell signals) ---
var float bearFibAnchorLow = na
var float bearFibAnchorHigh = na
var float bearFibSwingRange = na
var float bearFibTarget1 = na
var float bearFibTarget2 = na
var float bearFibTarget3 = na
var float bearFibTarget4 = na
var float bearFibTarget5 = na
var float exitPrice = na
var bool bearFibTargetsActive = false
// ══════════════════════════════════════════════════════════════════════════════
// ─── 6. TRADING LOGIC ─────────────────────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
bool buySignal = false
bool sellSignal = false
// --- BUY LOGIC ---
// Arm at midpoint (buyLow) if score drops below it
if bandGapScore < buyLow
buyLowArmed := true
// Arm at high level
if bandGapScore <= buyHigh
buyArmed := true
buyLowArmed := false
armLevel := buyHigh
// MIDPOINT BUY: Armed at low, trigger on crossover
if buyLowArmed and not buyArmed and buyLowCrossover
buySignal := true
buyLowArmed := false
sellArmed := false
sellLowArmed := false
// STANDARD BUY: Armed at high, trigger on crossover
else if buyArmed and (buyHighCrossover or buyLowCrossover)
buySignal := true
buyArmed := false
buyLowArmed := false
sellArmed := false
sellLowArmed := false
armLevel := na
// Disarm if score moved above buy zone without triggering
else if bandGapScore > buyHigh
buyArmed := false
armLevel := na
// --- SELL LOGIC ---
if strategy.position_size > 0
// Arm at midpoint (sellLow)
if crossAboveSellLow
sellLowArmed := true
// Arm at high level
if bandGapScore >= sellHigh
sellArmed := true
sellLowArmed := false
// MIDPOINT SELL
if sellLowArmed and not sellArmed and sellLowCrossunder
sellSignal := true
sellLowArmed := false
buyArmed := false
buyLowArmed := false
// STANDARD SELL
else if sellArmed and (sellHighCrossunder or sellLowCrossunder)
sellSignal := true
sellArmed := false
sellLowArmed := false
buyArmed := false
buyLowArmed := false
// Disarm if dropped below sell zone without triggering
else if bandGapScore < sellLow and not sellArmed
sellLowArmed := false
// ══════════════════════════════════════════════════════════════════════════════
// ─── 7. FIBONACCI TARGET CALCULATION ──────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
// Function to calculate fib extension targets (bullish - upside)
calcFibTargets(anchorLow, anchorHigh, fibLvl) =>
swingSize = anchorHigh - anchorLow
anchorLow + (swingSize * fibLvl)
// Function to calculate bearish fib extension targets (downside)
calcBearFibTargets(anchorLow, anchorHigh, fibLvl) =>
swingSize = anchorHigh - anchorLow
anchorHigh - (swingSize * fibLvl)
// Determine if we're about to enter/exit
bool actualBuyEntry = buySignal and strategy.position_size == 0
bool actualSellExit = sellSignal and strategy.position_size > 0
// Lock in fib anchors on buy signal
if actualBuyEntry
fibAnchorLow := recentLowVal
fibAnchorHigh := recentHighVal
entryPrice := close
fibTargetsActive := true
bearFibTargetsActive := false
if not na(fibAnchorLow) and not na(fibAnchorHigh) and fibAnchorHigh > fibAnchorLow
fibSwingRange := fibAnchorHigh - fibAnchorLow
fibTarget1 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib1Level)
fibTarget2 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib2Level)
fibTarget3 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib3Level)
fibTarget4 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib4Level)
fibTarget5 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib5Level)
// Lock in bearish fib anchors on sell signal
if actualSellExit
bearFibAnchorHigh := recentHighVal
bearFibAnchorLow := recentLowVal
exitPrice := close
bearFibTargetsActive := true
fibTargetsActive := false
if not na(bearFibAnchorLow) and not na(bearFibAnchorHigh) and bearFibAnchorHigh > bearFibAnchorLow
bearFibSwingRange := bearFibAnchorHigh - bearFibAnchorLow
bearFibTarget1 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib1Level)
bearFibTarget2 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib2Level)
bearFibTarget3 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib3Level)
bearFibTarget4 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib4Level)
bearFibTarget5 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib5Level)
// Dynamic update for bullish fibs
if strategy.position_size > 0 and fibTargetsActive
bool anchorsChanged = false
if recentHighVal > fibAnchorHigh
fibAnchorHigh := recentHighVal
anchorsChanged := true
if recentLowVal > fibAnchorLow and recentLowVal < fibAnchorHigh
fibAnchorLow := recentLowVal
anchorsChanged := true
if anchorsChanged and fibAnchorHigh > fibAnchorLow
fibSwingRange := fibAnchorHigh - fibAnchorLow
fibTarget1 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib1Level)
fibTarget2 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib2Level)
fibTarget3 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib3Level)
fibTarget4 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib4Level)
fibTarget5 := calcFibTargets(fibAnchorLow, fibAnchorHigh, fib5Level)
// Dynamic update for bearish fibs
if strategy.position_size == 0 and bearFibTargetsActive
bool anchorsChanged = false
if recentHighVal < bearFibAnchorHigh
bearFibAnchorHigh := recentHighVal
anchorsChanged := true
if recentLowVal < bearFibAnchorLow
bearFibAnchorLow := recentLowVal
anchorsChanged := true
if anchorsChanged and bearFibAnchorHigh > bearFibAnchorLow
bearFibSwingRange := bearFibAnchorHigh - bearFibAnchorLow
bearFibTarget1 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib1Level)
bearFibTarget2 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib2Level)
bearFibTarget3 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib3Level)
bearFibTarget4 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib4Level)
bearFibTarget5 := calcBearFibTargets(bearFibAnchorLow, bearFibAnchorHigh, fib5Level)
// Clear bullish targets when position closes (but bearish may activate)
if strategy.position_size == 0 and strategy.position_size[1] > 0 and not actualSellExit
fibTargetsActive := false
// ══════════════════════════════════════════════════════════════════════════════
// ─── 8. EXECUTE TRADES ────────────────────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
if buySignal and strategy.position_size == 0
strategy.entry("Long", strategy.long, comment="Buy")
if sellSignal and strategy.position_size > 0
strategy.close("Long", comment="Sell")
// ══════════════════════════════════════════════════════════════════════════════
// ─── 10. SIGNAL MARKERS ───────────────────────────────────────────────────────
// ══════════════════════════════════════════════════════════════════════════════
// Buy/Sell signal markers
plotshape(buySignal and strategy.position_size == 0, title="Buy Signal",
style=shape.triangleup, location=location.belowbar,
color=color.lime, size=size.small)
plotshape(sellSignal and strategy.position_size > 0, title="Sell Signal",
style=shape.triangledown, location=location.abovebar,
color=color.red, size=size.small)