
ایک کثیر دورانیہ متحرک اتار چڑھاؤ کی ٹریکنگ حکمت عملی ایک مختصر لائن ٹریڈنگ سسٹم ہے جس میں تیزی سے / آہستہ انڈیکس چلتی اوسط ((EMA) کراسنگ اور نسبتا strong مضبوط انڈیکس ((RSI) فلٹر شامل ہیں۔ اس حکمت عملی میں تجارت کے مواقع کو تلاش کرنے پر توجہ دی گئی ہے جس میں مختصر مدت کے رجحانات غالب ہیں اور متعدد تصدیق کے طریقہ کار کے ذریعہ تجارت کے شور کو کم کیا گیا ہے۔ اس کی بنیادی خصوصیات میں شامل ہیں خطرے پر قابو پانے ، اوسط حقیقی طول موج (ATR) پر مبنی موافقت پذیر ٹریکنگ اسٹاپ نقصان ، تجارت کے حجم پر مبنی اسٹاپ نقصان کی ایڈجسٹمنٹ ، اور اس کے ساتھ ساتھ منافع کے تین درجے کا ہدف۔ اس کے علاوہ ، حکمت عملی میں اعلی ٹائم فریم کا آر ایس آئی چیک بھی استعمال کیا گیا ہے تاکہ منفی رجحانات میں زیادہ دیر سے روکنے سے بچنے کے لئے ابتدائی انتباہی پیچھے ہٹنے کے طریقہ کار کے طور پر۔
یہ حکمت عملی ایک کثیر پرت سگنل اسٹیکلر فن تعمیر پر مبنی ہے:
اس حکمت عملی کی اہم جدت یہ ہے کہ متعدد تکنیکی اشارے اور مارکیٹ کے رویے کے اشارے (جیسے تجارت کا حجم ، اتار چڑھاؤ کی شرح) کو باضابطہ طور پر جوڑ کر ایک قابل موافقت تجارتی نظام تشکیل دیا گیا ہے جو مارکیٹ کے مختلف حالات میں پیرامیٹرز کو خود بخود ایڈجسٹ کرسکتا ہے۔
کثیر دورانیہ متحرک اتار چڑھاؤ کی ٹریکنگ حکمت عملی ایک مختصر لائن ٹریڈنگ سسٹم ہے جو کلاسیکی تکنیکی تجزیہ کے اوزار کو جدید مقداری رسک مینجمنٹ طریقوں کے ساتھ جوڑتا ہے۔ یہ ایک جامع تجارتی فیصلے کا فریم ورک تشکیل دیتا ہے جس میں ای ایم اے رجحان کی شناخت ، آر ایس آئی کی متحرک فلٹرنگ ، مسلسل کے لائن کی تصدیق کا طریقہ کار ، اے ٹی آر اتار چڑھاؤ کی ایڈجسٹمنٹ اور کثیر دورانیہ تجزیہ کے ساتھ مل کر ایک کثیر پرت سگنل اسٹیکلر فن تعمیر ہے۔ اس حکمت عملی کی سب سے نمایاں خصوصیت یہ ہے کہ اس کی خود کار طریقے سے ایڈجسٹ کرنے والی سلاخیں مارکیٹ میں اتار چڑھاؤ ، تجارتی حجم اور رجحان کی پختگی کے مطابق خود کار طریقے سے تجارتی پیرامیٹرز اور رسک کنٹرول اقدامات کو ایڈجسٹ کرسکتی ہیں۔
اگرچہ پیرامیٹرز کی حساسیت ، ہائی فریکوئینسی ٹریڈنگ لاگت اور تاخیر کے خطرات جیسے کچھ موروثی خطرات موجود ہیں ، لیکن ان خطرات کو مناسب فنڈ مینجمنٹ اور مسلسل اصلاح کے ذریعہ مؤثر طریقے سے کنٹرول کیا جاسکتا ہے۔ مستقبل میں اصلاح کی سمت بنیادی طور پر مشین لرننگ پیرامیٹرز کی اصلاح ، مارکیٹ کی حالت کی درجہ بندی ، کثیر اشارے کے اجماع کے طریقہ کار اور متحرک رسک مینجمنٹ جیسے پہلوؤں پر مرکوز ہے۔
اس حکمت عملی نے ایک منظم فریم ورک فراہم کیا ہے جو ٹریڈنگ کے مواقع کو پکڑنے اور خطرے کو کنٹرول کرنے کی ضروریات کو متوازن کرتا ہے. تاہم ، تمام تجارتی حکمت عملیوں کی طرح ، عملی طور پر لاگو ہونے سے پہلے ، سملیٹ اکاؤنٹس پر اچھی طرح سے جانچ کی جانی چاہئے ، اور پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کیا جانا چاہئے۔
/*backtest
start: 2024-09-15 00:00:00
end: 2025-06-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//@strategy_alert_message {{strategy.order.comment}}
// © AlgoSystems
strategy("Scalping Trend Power for MT5 - Updated", overlay=true, calc_on_every_tick=false)
//-------------------------------------------------------------------
// Function: confirm a condition for N consecutive bars
//-------------------------------------------------------------------
f_confirm(cond, bars) =>
_ok = true
for i = 0 to bars - 1
_ok := _ok and cond[i]
_ok
//-------------------------------------------------------------------
// Inputs: strategy parameters & PineConnector
//-------------------------------------------------------------------
lotSize = input.float(0.1, title="Lot Size")
lotMultiplier = input.float(1.0, title="Lot Multiplier", minval=0.1, step=0.1)
contractType = input.string("FX", title="Contract Type", options=["FX", "CFD", "Futures"])
// (kept for potential future use)
riskPercentage = input.float(1.0, title="Risk per Trade (%)")
riskRewardRatio = input.float(1.2, title="Risk/Reward Ratio", step=0.1)
trailingStopMultiplier = input.float(1.2, title="Trailing-Stop Multiplier", step=0.1)
emaShortLength = input.int(9, title="EMA Short Length")
emaLongLength = input.int(21, title="EMA Long Length")
rsiLength = input.int(14, title="RSI Length")
atrLength = input.int(14, title="ATR Length")
rsiOverbought = input.int(70, title="RSI Overbought Level")
rsiOversold = input.int(30, title="RSI Oversold Level")
higherTF = input.timeframe("30", title="Higher Time-Frame for Exit")
higherRsiOverbought = input.int(70, title="Higher-TF RSI Overbought", minval=50)
higherRsiOversold = input.int(30, title="Higher-TF RSI Oversold", minval=10)
pivotLookback = input.int(5, title="Pivot Look-Back Period", minval=2, step=1)
volumeLookback = input.int(20, title="Volume Look-Back Period", minval=5, step=1)
volumeMultiplier = input.float(1.0, title="Volume Multiplier", minval=0.1, step=0.1)
enablePartialExit = input.bool(true, title="Enable Partial Exit")
tp1ProfitMult = input.float(1.0, title="TP1 Profit Multiplier", step=0.1)
tp2ProfitMult = input.float(1.5, title="TP2 Profit Multiplier", step=0.1)
tp3ProfitMult = input.float(2.0, title="TP3 Profit Multiplier", step=0.1)
tp1ExitPercentage = input.float(33, title="TP1 Exit (%)", minval=1, maxval=100, step=1)
tp2ExitPercentage = input.float(33, title="TP2 Exit (%)", minval=1, maxval=100, step=1)
tp3ExitPercentage = input.float(34, title="TP3 Exit (%)", minval=1, maxval=100, step=1)
confirmBars = input.int(2, title="Confirmation Bars", minval=1, step=1)
baseLongTrades = 5
tradeDecreaseFactor = input.int(0, title="Trade Decrease Factor", minval=0)
maxLongTradesPerTrend = math.max(1, baseLongTrades - tradeDecreaseFactor)
activatePineConnector = input.bool(false, title="Activate PineConnector")
pineConnectorLicense = input.string("", title="PineConnector License Code")
//-------------------------------------------------------------------
// Indicator calculations
//-------------------------------------------------------------------
emaShort = ta.ema(close, emaShortLength)
emaLong = ta.ema(close, emaLongLength)
rsiValue = ta.rsi(close, rsiLength)
atrValue = ta.atr(atrLength)
// ATR-based TP & SL
dynamicTP = atrValue * riskRewardRatio
dynamicSL = atrValue * trailingStopMultiplier
rawLongSignal = emaShort > emaLong and rsiValue < rsiOverbought
rawShortSignal = emaShort < emaLong and rsiValue > rsiOversold
longSignal = f_confirm(rawLongSignal, confirmBars)
shortSignal = f_confirm(rawShortSignal, confirmBars)
//-------------------------------------------------------------------
// Dynamic ticker symbol (remove exchange prefix if any)
//-------------------------------------------------------------------
var string dynSymbol = na
if bar_index == 0
parts = str.split(syminfo.tickerid, ":")
dynSymbol := array.size(parts) > 1 ? array.get(parts, 1) : syminfo.tickerid
//-------------------------------------------------------------------
// PineConnector messages (no "lots=" or "contract=" – updated syntax)
// The value after risk= is interpreted as LOTS if EA’s VolumeType = "Lots".
//-------------------------------------------------------------------
prefix = activatePineConnector and (pineConnectorLicense != "") ? pineConnectorLicense + "," : ""
calculatedLot = lotSize * lotMultiplier // actual order volume
// ENTRY messages
riskValue = str.tostring(calculatedLot) // risk= interpreted as lots
txtBuy = prefix + "buy," + dynSymbol + ",risk=" + riskValue
txtSell = prefix + "sell," + dynSymbol + ",risk=" + riskValue
// CLOSE FULL messages
txtCloseLong = prefix + "closelong," + dynSymbol
txtCloseShort = prefix + "closeshort," + dynSymbol
// Helper to compute risk= for partial exits
f_partialRisk(pct) => str.tostring(calculatedLot * pct / 100)
// PARTIAL EXIT messages
msgTP1Long = prefix + "closelongvol," + dynSymbol + ",risk=" + f_partialRisk(tp1ExitPercentage)
msgTP2Long = prefix + "closelongvol," + dynSymbol + ",risk=" + f_partialRisk(tp2ExitPercentage)
msgTP3Long = prefix + "closelongvol," + dynSymbol + ",risk=" + f_partialRisk(tp3ExitPercentage)
msgTP1Short = prefix + "closeshortvol," + dynSymbol + ",risk=" + f_partialRisk(tp1ExitPercentage)
msgTP2Short = prefix + "closeshortvol," + dynSymbol + ",risk=" + f_partialRisk(tp2ExitPercentage)
msgTP3Short = prefix + "closeshortvol," + dynSymbol + ",risk=" + f_partialRisk(tp3ExitPercentage)
//-------------------------------------------------------------------
// Higher-time-frame RSI request
//-------------------------------------------------------------------
higherRsi = request.security(syminfo.tickerid, higherTF, ta.rsi(close, rsiLength))
//-------------------------------------------------------------------
// State variables
//-------------------------------------------------------------------
var bool inLongTrade = false
var bool inShortTrade = false
var int longTradeCount = 0
var float trailingStopLevel = na
var bool tp1_exited = false
var bool tp2_exited = false
var bool tp3_exited = false
//-------------------------------------------------------------------
// Entry/Exit logic
//-------------------------------------------------------------------
if barstate.isconfirmed
avgVol = ta.sma(volume, volumeLookback)
volRatio = avgVol != 0 ? volume / avgVol : 1.0
adjSL = dynamicSL / (volRatio * volumeMultiplier)
pivotH = ta.pivothigh(high, pivotLookback, pivotLookback)
pivotL = ta.pivotlow(low, pivotLookback, pivotLookback)
// LONG entry
if longSignal and not inLongTrade and not inShortTrade and longTradeCount < maxLongTradesPerTrend
strategy.entry("Long", strategy.long, qty=calculatedLot, comment="Long Entry")
if activatePineConnector
alert(txtBuy, alert.freq_once_per_bar)
inLongTrade := true
inShortTrade := false
longTradeCount += 1
trailingStopLevel := low - adjSL
tp1_exited := false
tp2_exited := false
tp3_exited := false
// SHORT entry
if shortSignal and not inShortTrade and not inLongTrade
strategy.entry("Short", strategy.short, qty=calculatedLot, comment="Short Entry")
if activatePineConnector
alert(txtSell, alert.freq_once_per_bar)
inShortTrade := true
inLongTrade := false
trailingStopLevel := high + adjSL
tp1_exited := false
tp2_exited := false
tp3_exited := false
// Trailing-stop update
if inLongTrade
baseStop = close - adjSL
trailingStopLevel := (not na(pivotL) and pivotL > trailingStopLevel) ? pivotL : math.max(trailingStopLevel, baseStop)
if inShortTrade
baseStop = close + adjSL
trailingStopLevel := (not na(pivotH) and pivotH < trailingStopLevel) ? pivotH : math.min(trailingStopLevel, baseStop)
// Dynamic TPs & partial exits
if enablePartialExit and strategy.position_size != 0
avgPrice = strategy.position_avg_price
direction = strategy.position_size > 0 ? 1 : -1
tp1 = avgPrice + direction * dynamicTP * tp1ProfitMult
tp2 = avgPrice + direction * dynamicTP * tp2ProfitMult
tp3 = avgPrice + direction * dynamicTP * tp3ProfitMult
// TP1
if not tp1_exited and f_confirm(direction > 0 ? close >= tp1 : close <= tp1, confirmBars)
strategy.exit("TP1", from_entry=direction>0 ? "Long" : "Short", qty_percent=tp1ExitPercentage, limit=tp1, comment=direction>0 ? msgTP1Long : msgTP1Short)
if activatePineConnector
alert(direction>0 ? msgTP1Long : msgTP1Short, alert.freq_once_per_bar)
tp1_exited := true
// TP2
if not tp2_exited and f_confirm(direction > 0 ? close >= tp2 : close <= tp2, confirmBars)
strategy.exit("TP2", from_entry=direction>0 ? "Long" : "Short", qty_percent=tp2ExitPercentage, limit=tp2, comment=direction>0 ? msgTP2Long : msgTP2Short)
if activatePineConnector
alert(direction>0 ? msgTP2Long : msgTP2Short, alert.freq_once_per_bar)
tp2_exited := true
// TP3
if not tp3_exited and f_confirm(direction > 0 ? close >= tp3 : close <= tp3, confirmBars)
strategy.exit("TP3", from_entry=direction>0 ? "Long" : "Short", qty_percent=tp3ExitPercentage, limit=tp3, comment=direction>0 ? msgTP3Long : msgTP3Short)
if activatePineConnector
alert(direction>0 ? msgTP3Long : msgTP3Short, alert.freq_once_per_bar)
tp3_exited := true
// FULL exit (trailing stop or opposite signals)
exitCondLong = inLongTrade and (close < trailingStopLevel or rsiValue > rsiOverbought or higherRsi > higherRsiOverbought)
exitCondShort = inShortTrade and (close > trailingStopLevel or rsiValue < rsiOversold or higherRsi < higherRsiOversold)
if exitCondLong and f_confirm(exitCondLong, confirmBars)
strategy.exit("ExitLong", from_entry="Long", stop=trailingStopLevel, comment=txtCloseLong)
if activatePineConnector
alert(txtCloseLong, alert.freq_once_per_bar)
inLongTrade := false
if exitCondShort and f_confirm(exitCondShort, confirmBars)
strategy.exit("ExitShort", from_entry="Short", stop=trailingStopLevel, comment=txtCloseShort)
if activatePineConnector
alert(txtCloseShort, alert.freq_once_per_bar)
inShortTrade := false
// Reset counter when the bullish trend ends
if not rawLongSignal
longTradeCount := 0
//-------------------------------------------------------------------
// Plot & styling
//-------------------------------------------------------------------
plot(emaShort, color=color.blue, linewidth=1, title="EMA Short")
plot(emaLong , color=color.red , linewidth=1, title="EMA Long")
barcolor(inLongTrade ? color.new(color.green,0) : inShortTrade ? color.new(color.red,0) : na)
bgcolor(rawLongSignal ? color.new(color.green,90) : rawShortSignal ? color.new(color.red,90) : na)
// Signal arrows disabled (user request):
// plotshape(longSignal , title="Long signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
// plotshape(shortSignal, title="Short signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)
//-------------------------------------------------------------------
// HOW TO USE with PineConnector (quick checklist):
// 1. Attach this script to the chart.
// 2. Click the “Alert” bell → Create Alert.
// 3. Condition: “Scalping Trend Power … (Any alert() call)” (or “Order fills only”).
// 4. Webhook URL: https://webhook.pineconnector.com
// 5. Leave the Message box empty – the script fills it.
// 6. On MT5, run the PineConnector EA on the same symbol (dynSymbol) and keep VolumeType = Lots.
// 7. Enter your License ID in the input and tick “Activate PineConnector”.
//-------------------------------------------------------------------