
یہ حکمت عملی ایک ٹرینڈ ٹریکنگ سسٹم ہے جو ٹرانزیکشن حجم اور قیمت کی تبدیلی پر مبنی ہے اور مارکیٹ کی سمت کی پیش گوئی کرنے کے لئے نیٹ ٹرانزیکشن حجم کے جھٹکے کے اشارے ((NVO) کا حساب لگاتا ہے۔ حکمت عملی میں متعدد متحرک اوسط کی اقسام ((EMA ، WMA ، SMA ، HMA) کا امتزاج کیا گیا ہے ، تاکہ مارکیٹ کے رجحانات کا اندازہ لگایا جاسکے کہ اس کے جھٹکے کے اشارے اور اس کی EMA کی اوورلیپنگ لائن کے مابین کیا تعلق ہے ، اور مناسب وقت پر تجارت کی جائے۔ حکمت عملی میں خطرے کو کنٹرول کرنے اور منافع کو مقفل کرنے کے لئے اسٹاپ لاس اور اسٹاپ اسٹاپ کا طریقہ کار بھی شامل ہے۔
اس حکمت عملی کا بنیادی مقصد مارکیٹ کے جذبات کا اندازہ لگانا ہے ، جس میں روزانہ کی خالص تجارت کے حجم کے اتار چڑھاؤ کی مقدار کا حساب لگایا جاتا ہے۔ اس حساب کتاب کے اقدامات درج ذیل ہیں:
ٹریڈنگ سگنل مندرجہ ذیل قواعد پر مبنی ہیں:
رسک کنٹرول کی تجاویز:
سگنل کی تصدیق کے طریقہ کار کو بہتر بنانا:
رسک مینجمنٹ کی اصلاح:
پیرامیٹرز کو بہتر بنائیں:
اس حکمت عملی میں حجم اور قیمت کے اعداد و شمار کا جامع تجزیہ کیا گیا ہے تاکہ ایک مکمل رجحان ٹریکنگ سسٹم بنایا جاسکے۔ اس حکمت عملی کی اہم خصوصیت متعدد تکنیکی اشارے کو جوڑنا اور لچکدار پیرامیٹرز کی تشکیل کے اختیارات فراہم کرنا ہے۔ اگرچہ اس میں کچھ خطرات موجود ہیں ، لیکن معقول خطرے کے کنٹرول اور مستقل اصلاح کے ذریعہ ، اس حکمت عملی سے حقیقی تجارت میں مستحکم منافع حاصل کرنے کی امید ہے۔ یہ مشورہ دیا جاتا ہے کہ تاجر اس کے عملی استعمال سے پہلے کافی حد تک بازیافت کریں اور پیرامیٹرز کو مخصوص مارکیٹ کی صورتحال کے مطابق مناسب طریقے سے ایڈجسٹ کریں۔
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("EMA-Based Net Volume Oscillator with Trend Change", shorttitle="NVO Trend Change", overlay=false, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Input parameters
maType = input.string("WMA", "Moving Average Type", options=["WMA", "EMA", "SMA", "HMA"])
maLength = input.int(21, "MA Length", minval=1)
emaOverlayLength = input.int(9, "EMA Overlay Length", minval=1)
oscillatorMultiplier = input.float(1.0, "Oscillator Multiplier", minval=0.1, step=0.1)
showHistogram = input.bool(true, "Show Histogram")
stopLossPerc = input.float(1.0, "Stop Loss (%)", tooltip="Set 999 to disable")
takeProfitPerc = input.float(2.0, "Take Profit (%)", tooltip="Set 999 to disable")
// Calculate Net Volume Oscillator
priceRange = high - low
multiplier = priceRange > 0 ? (close - low) / priceRange : 0.5
var float effectiveUpVol = 0.0
var float effectiveDownVol = 0.0
if close > close[1]
effectiveUpVol := volume * multiplier
effectiveDownVol := volume * (1 - multiplier)
else if close < close[1]
effectiveUpVol := volume * multiplier
effectiveDownVol := volume * (1 - multiplier)
else
effectiveUpVol := 0.0
effectiveDownVol := 0.0
netVolume = effectiveUpVol - effectiveDownVol
dailyNetOscillator = volume > 0 ? (netVolume / volume) * 100 : 0
// Apply selected Moving Average
var float oscillator = na
if maType == "WMA"
oscillator := ta.wma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "EMA"
oscillator := ta.ema(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "SMA"
oscillator := ta.sma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "HMA"
oscillator := ta.hma(dailyNetOscillator, maLength) * oscillatorMultiplier
// EMA Overlay
emaOverlay = ta.ema(oscillator, emaOverlayLength)
// Rate of Change (ROC) for Oscillator
roc = ta.roc(oscillator, 1) // 1-period rate of change
// Trading logic
longCondition = oscillator > emaOverlay
shortCondition = oscillator < emaOverlay
// Exit conditions
exitLong = oscillator < emaOverlay and strategy.position_size > 0
exitShort = oscillator > emaOverlay and strategy.position_size < 0
// Execute trades
if longCondition and strategy.position_size <= 0
strategy.entry("Long", strategy.long)
if exitLong
strategy.close("Long")
if shortCondition and strategy.position_size >= 0
strategy.entry("Short", strategy.short)
if exitShort
strategy.close("Short")
// Stop Loss and Take Profit
stopLossLong = stopLossPerc != 999 ? strategy.position_avg_price * (1 - stopLossPerc/100) : na
takeProfitLong = takeProfitPerc != 999 ? strategy.position_avg_price * (1 + takeProfitPerc/100) : na
stopLossShort = stopLossPerc != 999 ? strategy.position_avg_price * (1 + stopLossPerc/100) : na
takeProfitShort = takeProfitPerc != 999 ? strategy.position_avg_price * (1 - takeProfitPerc/100) : na
if (not na(stopLossLong) and not na(takeProfitLong) and strategy.position_size > 0)
strategy.exit("Long SL/TP", "Long", stop=stopLossLong, limit=takeProfitLong)
if (not na(stopLossShort) and not na(takeProfitShort) and strategy.position_size < 0)
strategy.exit("Short SL/TP", "Short", stop=stopLossShort, limit=takeProfitShort)
// Plotting
plot(oscillator, "Net Volume Oscillator", color.blue)
plot(emaOverlay, "EMA Overlay", color.orange)
hline(0, "Zero Line", color.gray)
// Histogram with Trend Change Visualization
var color histogramColor = na
if oscillator > 0
histogramColor := roc >= 0 ? color.new(color.green, 70) : color.new(color.lime, 70) // Green for bullish, light green for weakening
else if oscillator < 0
histogramColor := roc >= 0 ? color.new(color.red, 70) : color.new(color.maroon, 70) // Red for bearish, light red for weakening
plot(showHistogram ? oscillator : na, style=plot.style_histogram, color=histogramColor, title="Histogram")