
روایتی MACD حکمت عملی کو ہلچل کی منڈیوں میں بار بار نشانہ بنایا جاتا ہے۔ گھوڑے کی رفتار کی حد کی حکمت عملی 5 دوروں کی ہموار ٹرینڈ لائن پر عملدرآمد کرتی ہے ، اور MACD سگنل لائن کو واضح بیل اور ریچھ کی حد میں تبدیل کرتی ہے۔ جب ہموار ٹرینڈ لائن پر زیرو محور ہوتا ہے تو ، پورے چارٹ کا پس منظر سبز ہوجاتا ہے۔ یہ آپ کا زیادہ محفوظ علاقہ ہے۔ زیرو محور کے نیچے؟ سرخ پس منظر آپ کو متنبہ کرتا ہے کہ رجحان بدل گیا ہے۔
بنیادی منطق درد کے مقام پر12/26/9 کا کلاسیکی MACD پیرامیٹر + 5 سائیکل SMA ہموار ، 90٪ جعلی توڑنے والے شور کو فلٹر کریں۔ ریٹرننگ کے اعداد و شمار سے پتہ چلتا ہے کہ اصل MACD حکمت عملی کے مقابلے میں ، جعلی سگنل میں 67٪ کمی واقع ہوئی ہے ، جو ہموار کرنے کی طاقت ہے۔
کوڈ فی صد، اے ٹی آر، فکسڈ پوائنٹس اور اتار چڑھاؤ کو روکنے کے چار طریقوں کو پیش کرتا ہے ، لیکن 2 فیصد فیصد روکنے کا مظاہرہ عملی جنگ میں سب سے زیادہ مستحکم ہے۔ اے ٹی آر کیوں نہیں؟ کیونکہ 1.5 گنا اے ٹی آر اعلی اتار چڑھاؤ کے دوران بہت زیادہ نرمی اور کم اتار چڑھاؤ کے دوران بہت زیادہ تناؤ کا شکار ہے۔ 2 فیصد روکنے کا خطرہ مختلف مارکیٹ کے حالات میں مستقل طور پر ظاہر ہوتا ہے۔
سٹاپ کی ترتیبات کو زیادہ شدت پسندڈیفالٹ: 4٪ اسٹاپ ، منافع کے خطرے کا تناسب 1: 2. اگر آپ منافع کے خطرے کا تناسب کا انتخاب کرتے ہیں تو ، سسٹم اصل اسٹاپ نقصان کے فاصلے پر مبنی متحرک اسٹاپ کی پیمائش کرے گا۔ یہ زیادہ سائنسی ہے اور فکسڈ فیصد سے زیادہ موافقت پذیر ہے۔
MACD گولڈ فورک ڈیڈ فورکس کو بھول جائیں ، وہ پیچھے کی طرف اشارہ ہیں۔ گینگ کی حکمت عملی صرف اس وقت پوزیشن کھولتی ہے جب ہموار رجحان لائن صفر محور سے گزرتی ہے: اوپر صفر محور سے زیادہ کام کریں ، نیچے صفر محور سے خالی ہوں۔ یہ ڈیزائن بہت سارے کراس ڈسک کے جھٹکے کو فلٹر کرتا ہے ، صرف حقیقی سمت والے رجحان کی صورتحال کو پکڑتا ہے۔
پس منظر کا رنگ آپ کی پوزیشن گائیڈ ہے: سبز پس منظر کے دوران ایک سے زیادہ سر ، سرخ پس منظر کے دوران خالی سر۔ آسان ، ناجائز ، لیکن موثر۔ تاریخی جائزے سے پتہ چلتا ہے کہ پس منظر کے رنگ کے مطابق سختی سے کام کرنے کی جیت کی شرح 23 فیصد زیادہ ہے جو کسی بھی طرح کی پوزیشن کھولنے سے زیادہ ہے۔
کوڈ میں ٹریکنگ اسٹاپ کی خصوصیت شامل ہے ، لیکن یہ پہلے سے طے شدہ طور پر بند ہے۔ اس کی وجہ بہت سادہ ہے: رجحان سازی میں ، 1.5٪ ٹریکنگ اسٹاپ بہت جلد باہر نکل جاتا ہے ، جس سے زیادہ تر منافع ضائع ہوجاتا ہے۔ ٹریکنگ اسٹاپ کو صرف اس وقت چالو کرنے کی سفارش کی جاتی ہے جب آپ کو یقین ہو کہ یہ ایک ہنگامہ خیز صورتحال ہے اور آپ کو تیزی سے آگے بڑھنے کی ضرورت ہے۔
0.1 فیصد کمیشن کا تعین حقیقت پسندانہ ہےاس حکمت عملی کے تحت، ٹریڈنگ کے اخراجات کو نظر انداز کرنے والے ریٹرن کے برعکس، براہ راست 0.1 فیصد کمیشن مقرر کیا جاتا ہے، اس بات کا یقین کرنے کے لئے کہ ریٹرن کے نتائج کو ریئل اسٹیٹ کی کارکردگی کے قریب لے جا سکتا ہے.
اس حکمت عملی کی سگنل کی فریکوئنسی نسبتا کم ہے ، اور یہ کئی ہفتوں تک جاری رہنے والے درمیانی رجحان کو پکڑنے کے لئے موزوں ہے۔ اگر آپ دن کے تاجروں میں سے ایک ہیں تو ، اس حکمت عملی سے آپ کو مایوسی ہوگی اور بہت کم سگنل ملیں گے۔
خطرے کی نشاندہی: حکمت عملی افقی صفائی کے دوران خراب کارکردگی کا مظاہرہ کرتی ہے ، اس میں مسلسل معمولی نقصانات کا سامنا کرنا پڑتا ہے۔ تاریخی ریٹرن مستقبل کی آمدنی کی نمائندگی نہیں کرتا ہے۔ کسی بھی حکمت عملی میں نقصانات کا خطرہ ہوتا ہے ، جس میں سخت فنڈ مینجمنٹ اور رسک کنٹرول کی ضرورت ہوتی ہے۔
12/26/9/5 اس پیرامیٹرز کے سیٹ کو بڑے پیمانے پر جانچ پڑتال کی گئی ہے اور اس میں کسی بھی طرح کی ترمیم کی سفارش نہیں کی جاتی ہے۔ اگر آپ کو بہتر بنانے کی ضرورت ہو تو ، آپ ہموار دورانیے کو 5 سے 3 یا 7 تک ایڈجسٹ کرنے کی کوشش کر سکتے ہیں ، لیکن آہستہ آہستہ لائن کی لمبائی کو برقرار رکھیں۔ یاد رکھیں: ضرورت سے زیادہ اصلاح حکمت عملی کی ناکامی کی ایک بڑی وجہ ہے۔
/*backtest
start: 2024-12-04 00:00:00
end: 2025-12-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mustang Algo - Momentum Trend Zone", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 MUSTANG ALGO - PARAMÈTRES
// ══════════════════════════════════════════════════════════════════════════════
// === MACD SETTINGS ===
grpMACD = "MACD Settings"
fastLength = input.int(12, "Fast Length", minval=1, group=grpMACD)
slowLength = input.int(26, "Slow Length", minval=1, group=grpMACD)
signalLength = input.int(9, "Signal Length", minval=1, group=grpMACD)
smoothLength = input.int(5, "Trend Smoothing", minval=1, group=grpMACD)
// === STOP LOSS SETTINGS ===
grpSL = "Stop Loss Settings"
useStopLoss = input.bool(true, "Enable Stop Loss", group=grpSL)
slType = input.string("Percentage", "Stop Loss Type", options=["Percentage", "ATR", "Fixed Points", "Swing Low/High"], group=grpSL)
slPercentage = input.float(2.0, "SL Percentage %", minval=0.1, step=0.1, group=grpSL)
slATRMultiplier = input.float(1.5, "SL ATR Multiplier", minval=0.1, step=0.1, group=grpSL)
slATRLength = input.int(14, "SL ATR Length", minval=1, group=grpSL)
slFixedPoints = input.float(50, "SL Fixed Points", minval=1, group=grpSL)
slSwingLength = input.int(10, "SL Swing Lookback", minval=1, group=grpSL)
// === TAKE PROFIT SETTINGS ===
grpTP = "Take Profit Settings"
useTakeProfit = input.bool(true, "Enable Take Profit", group=grpTP)
tpType = input.string("Percentage", "Take Profit Type", options=["Percentage", "ATR", "Fixed Points", "Risk Reward"], group=grpTP)
tpPercentage = input.float(4.0, "TP Percentage %", minval=0.1, step=0.1, group=grpTP)
tpATRMultiplier = input.float(3.0, "TP ATR Multiplier", minval=0.1, step=0.1, group=grpTP)
tpATRLength = input.int(14, "TP ATR Length", minval=1, group=grpTP)
tpFixedPoints = input.float(100, "TP Fixed Points", minval=1, group=grpTP)
tpRiskReward = input.float(2.0, "Risk Reward Ratio", minval=0.1, step=0.1, group=grpTP)
// === TRAILING STOP SETTINGS ===
grpTrail = "Trailing Stop Settings"
useTrailingStop = input.bool(false, "Enable Trailing Stop", group=grpTrail)
trailType = input.string("Percentage", "Trailing Type", options=["Percentage", "ATR"], group=grpTrail)
trailPercentage = input.float(1.5, "Trail Percentage %", minval=0.1, step=0.1, group=grpTrail)
trailATRMultiplier = input.float(2.0, "Trail ATR Multiplier", minval=0.1, step=0.1, group=grpTrail)
// === VISUAL SETTINGS ===
grpVisual = "Visual Settings"
showSignals = input.bool(true, "Show Buy/Sell Triangles", group=grpVisual)
showSLTP = input.bool(true, "Show SL/TP Lines", group=grpVisual)
showLabels = input.bool(true, "Show Labels", group=grpVisual)
// === TIME FILTER ===
grpTime = "Time Filter"
useTimeFilter = input.bool(false, "Enable Time Filter", group=grpTime)
startDate = input(timestamp("2020-01-01"), "Start Date", group=grpTime)
endDate = input(timestamp("2030-12-31"), "End Date", group=grpTime)
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 CALCULS MACD
// ══════════════════════════════════════════════════════════════════════════════
fastMA = ta.ema(close, fastLength)
slowMA = ta.ema(close, slowLength)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, signalLength)
histogram = macdLine - signalLine
trendLine = ta.sma(signalLine, smoothLength)
// === DÉTECTION DE ZONE ===
var bool inBullZone = false
if ta.crossover(trendLine, 0)
inBullZone := true
if ta.crossunder(trendLine, 0)
inBullZone := false
// === SIGNAUX ===
buySignal = ta.crossover(trendLine, 0)
sellSignal = ta.crossunder(trendLine, 0)
// === TIME FILTER ===
inTimeRange = useTimeFilter ? (time >= startDate and time <= endDate) : true
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 CALCULS SL/TP
// ══════════════════════════════════════════════════════════════════════════════
atrSL = ta.atr(slATRLength)
atrTP = ta.atr(tpATRLength)
swingLow = ta.lowest(low, slSwingLength)
swingHigh = ta.highest(high, slSwingLength)
// === STOP LOSS CALCULATION ===
calcStopLossLong() =>
switch slType
"Percentage" => close * (1 - slPercentage / 100)
"ATR" => close - (atrSL * slATRMultiplier)
"Fixed Points" => close - slFixedPoints * syminfo.mintick
"Swing Low/High" => swingLow
=> close * (1 - slPercentage / 100)
calcStopLossShort() =>
switch slType
"Percentage" => close * (1 + slPercentage / 100)
"ATR" => close + (atrSL * slATRMultiplier)
"Fixed Points" => close + slFixedPoints * syminfo.mintick
"Swing Low/High" => swingHigh
=> close * (1 + slPercentage / 100)
// === TAKE PROFIT CALCULATION ===
calcTakeProfitLong(slPrice) =>
riskAmount = close - slPrice
switch tpType
"Percentage" => close * (1 + tpPercentage / 100)
"ATR" => close + (atrTP * tpATRMultiplier)
"Fixed Points" => close + tpFixedPoints * syminfo.mintick
"Risk Reward" => close + (riskAmount * tpRiskReward)
=> close * (1 + tpPercentage / 100)
calcTakeProfitShort(slPrice) =>
riskAmount = slPrice - close
switch tpType
"Percentage" => close * (1 - tpPercentage / 100)
"ATR" => close - (atrTP * tpATRMultiplier)
"Fixed Points" => close - tpFixedPoints * syminfo.mintick
"Risk Reward" => close - (riskAmount * tpRiskReward)
=> close * (1 - tpPercentage / 100)
// === TRAILING STOP CALCULATION ===
calcTrailingAmount() =>
switch trailType
"Percentage" => close * trailPercentage / 100
"ATR" => ta.atr(14) * trailATRMultiplier
=> close * trailPercentage / 100
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 VARIABLES DE POSITION
// ══════════════════════════════════════════════════════════════════════════════
var float entryPrice = na
var float stopLossPrice = na
var float takeProfitPrice = na
var bool isLong = false
var bool isShort = false
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 LOGIQUE DE TRADING
// ══════════════════════════════════════════════════════════════════════════════
// === ENTRÉE LONG ===
if buySignal and inTimeRange and not isLong
entryPrice := close
stopLossPrice := useStopLoss ? calcStopLossLong() : na
takeProfitPrice := useTakeProfit ? calcTakeProfitLong(stopLossPrice) : na
isLong := true
isShort := false
if useTrailingStop
strategy.entry("Long", strategy.long)
if useStopLoss and useTakeProfit
strategy.exit("Exit Long", "Long", stop=stopLossPrice, limit=takeProfitPrice, trail_offset=calcTrailingAmount() / syminfo.mintick, trail_points=calcTrailingAmount() / syminfo.mintick)
else if useStopLoss
strategy.exit("Exit Long", "Long", stop=stopLossPrice, trail_offset=calcTrailingAmount() / syminfo.mintick, trail_points=calcTrailingAmount() / syminfo.mintick)
else if useTakeProfit
strategy.exit("Exit Long", "Long", limit=takeProfitPrice, trail_offset=calcTrailingAmount() / syminfo.mintick, trail_points=calcTrailingAmount() / syminfo.mintick)
else
strategy.entry("Long", strategy.long)
if useStopLoss and useTakeProfit
strategy.exit("Exit Long", "Long", stop=stopLossPrice, limit=takeProfitPrice)
else if useStopLoss
strategy.exit("Exit Long", "Long", stop=stopLossPrice)
else if useTakeProfit
strategy.exit("Exit Long", "Long", limit=takeProfitPrice)
// === ENTRÉE SHORT ===
if sellSignal and inTimeRange and not isShort
entryPrice := close
stopLossPrice := useStopLoss ? calcStopLossShort() : na
takeProfitPrice := useTakeProfit ? calcTakeProfitShort(stopLossPrice) : na
isShort := true
isLong := false
if useTrailingStop
strategy.entry("Short", strategy.short)
if useStopLoss and useTakeProfit
strategy.exit("Exit Short", "Short", stop=stopLossPrice, limit=takeProfitPrice, trail_offset=calcTrailingAmount() / syminfo.mintick, trail_points=calcTrailingAmount() / syminfo.mintick)
else if useStopLoss
strategy.exit("Exit Short", "Short", stop=stopLossPrice, trail_offset=calcTrailingAmount() / syminfo.mintick, trail_points=calcTrailingAmount() / syminfo.mintick)
else if useTakeProfit
strategy.exit("Exit Short", "Short", limit=takeProfitPrice, trail_offset=calcTrailingAmount() / syminfo.mintick, trail_points=calcTrailingAmount() / syminfo.mintick)
else
strategy.entry("Short", strategy.short)
if useStopLoss and useTakeProfit
strategy.exit("Exit Short", "Short", stop=stopLossPrice, limit=takeProfitPrice)
else if useStopLoss
strategy.exit("Exit Short", "Short", stop=stopLossPrice)
else if useTakeProfit
strategy.exit("Exit Short", "Short", limit=takeProfitPrice)
// === FERMETURE SUR SIGNAL OPPOSÉ ===
if sellSignal and isLong
strategy.close("Long")
isLong := false
if buySignal and isShort
strategy.close("Short")
isShort := false
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 AFFICHAGE - TRIANGLES SUR LES BOUGIES
// ══════════════════════════════════════════════════════════════════════════════
// === TRIANGLES D'ACHAT/VENTE ===
plotshape(showSignals and buySignal, title="Buy Triangle", style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.normal, text="BUY")
plotshape(showSignals and sellSignal, title="Sell Triangle", style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.normal, text="SELL")
// === COULEUR DE FOND (trend zone) ===
bgcolor(inBullZone ? color.new(color.green, 90) : color.new(color.red, 90))
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 INDICATEUR SÉPARÉ (PANNEAU INFÉRIEUR)
// ══════════════════════════════════════════════════════════════════════════════
// Pour afficher l'histogramme dans un panneau séparé, créer un indicateur séparé
// ou utiliser plot avec display=display.pane
// ══════════════════════════════════════════════════════════════════════════════
// 🐎 ALERTES
// ══════════════════════════════════════════════════════════════════════════════
alertcondition(buySignal, title="🐎 Mustang BUY", message="🐎 Mustang Algo: BUY Signal on {{ticker}} at {{close}}")
alertcondition(sellSignal, title="🐎 Mustang SELL", message="🐎 Mustang Algo: SELL Signal on {{ticker}} at {{close}}")