
اس حکمت عملی میں OBV اشارے کے کثیر جہتی رجحان کا فیصلہ کرنے کے لئے ڈبل EMA اوسط لائن اسپینڈنگ کا استعمال کیا جاتا ہے ، جس میں رجحان کی سمت کے مطابق طویل اور مختصر نقطہ نظر لیا جاتا ہے۔ اس میں ، OBV اشارے قیمت اور حجم کے مابین تعلقات کو زیادہ واضح طور پر ظاہر کرسکتے ہیں ، مارکیٹ کے شرکاء کی خواہش کا اندازہ لگاسکتے ہیں ، لہذا اس کا استعمال مارکیٹ کے رجحانات کو پکڑنے کے لئے کیا جاسکتا ہے۔ اس حکمت عملی کو منتقل اوسط کے ساتھ مل کر اشارے کی ہموار کاری کے ساتھ جوڑ دیا گیا ہے ، مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کرنے اور اہم رجحانات کو پکڑنے کے لئے۔
یہ حکمت عملی بنیادی طور پر اس بات پر مبنی ہے کہ آیا OBV اشارے اوپر کی طرف رجحان میں ہیں یا نہیں۔ خاص طور پر ، OBV کے 6 دن کے EMA اور 24 دن کے EMA کا حساب لگایا جاتا ہے ، جب 6 دن کے EMA پر 24 دن کے EMA کو عبور کرتے ہیں تو ایک کثیر سر سگنل پیدا ہوتا ہے۔ اسی طرح ، جب 6 دن کے EMA کے نیچے 24 دن کے EMA کو عبور کرتے ہیں تو ، ایک خالی سر سگنل پیدا ہوتا ہے۔ اس کے علاوہ ، حکمت عملی میں 3٪ کی روک تھام بھی رکھی گئی ہے۔
اس حکمت عملی میں رجحانات کا تعین کرنے کی کلید او بی وی اشارے میں ہے۔ او بی وی اشارے بڑے فنڈز کی اجتماعی مرضی کی عکاسی کرتے ہیں ، جو مارکیٹ کے شرکاء کے رویوں کو مؤثر طریقے سے ظاہر کرسکتے ہیں۔ متحرک اوسط کے ساتھ مل کر ، کچھ شور کو ختم کیا جاسکتا ہے ، جس سے سگنل زیادہ واضح اور قابل اعتماد ہوجاتے ہیں۔ حکمت عملی میں تیز رفتار ای ایم اے لائن اور سست ای ایم اے لائن کا استعمال کیا جاتا ہے تاکہ ٹریڈنگ سگنل بنایا جاسکے ، جس سے قیمتوں کے اعداد و شمار کو ہموار کیا جاسکے ، اور اس کے ساتھ ساتھ رجحانات کی تبدیلی کو زیادہ حساس انداز میں پکڑ لیا جاسکے۔
اس حکمت عملی کے درج ذیل فوائد ہیں:
OBV اشارے کی بنیاد پر ، مارکیٹ کے شرکاء کی خواہشات کا واضح اندازہ لگایا جاسکتا ہے ، اور سگنل زیادہ قابل اعتماد ہیں۔
ڈبل ای ایم اے یونیفارم پروسیسنگ کچھ شور کو صاف کرنے کے لئے سگنل کو صاف کرتا ہے.
تیز اور سست ای ایم اے لائنوں کا مجموعہ قیمتوں کو ہموار کرنے اور رجحان میں تبدیلی کو پکڑنے کے لئے استعمال کیا جاتا ہے۔
حکمت عملی کا استعمال آسان اور لاگو کرنے میں آسان ہے۔
اس حکمت عملی کے کچھ خطرات بھی ہیں:
OBV اشارے بعض اوقات غلط سگنل دیتے ہیں ، اس وقت حکمت عملی کو نقصان ہوسکتا ہے۔
ای ایم اے لائنوں کو ہنگامی حالات میں تاخیر کا سامنا کرنا پڑتا ہے، اور ممکنہ طور پر بہترین نقطہ نظر سے محروم ہوسکتا ہے.
فکسڈ اسٹاپ نقصان کی ترتیب مارکیٹ میں تبدیلیوں کے مطابق ڈھالنے کے لئے بہت زیادہ جامد ہوسکتی ہے۔
ردعمل:
غلط سگنل سے بچنے کے لئے دیگر اشارے کے ساتھ مل کر تصدیق کریں۔
EMA لائنوں کو زیادہ حساس بنانے کے لئے پیرامیٹرز کی ترتیبات کو بہتر بنائیں۔
متحرک سٹاپ نقصان سیٹ کریں۔
اس حکمت عملی کو مندرجہ ذیل طریقوں سے بہتر بنایا جاسکتا ہے:
ای ایم اے پیرامیٹرز کے مجموعے کو بہتر بنائیں اور زیادہ مماثل اوسط لائن پیرامیٹرز تلاش کریں۔
سگنل کی تصدیق کے لئے دیگر اشارے شامل کریں ، جیسے MACD ، RSI وغیرہ ، سگنل کی درستگی کو بہتر بنائیں۔
متحرک اسٹاپ نقصان کی ترتیب ، جو مارکیٹ میں اتار چڑھاو کے مطابق اصل وقت میں اسٹاپ نقصان کو ایڈجسٹ کرسکتی ہے۔
پیرامیٹرز کے مجموعے کو بہتر بنانے کے لئے ، بہترین پیرامیٹرز کا مجموعہ تلاش کریں۔
یہ حکمت عملی مجموعی طور پر ایک سادہ اور قابل اعتماد رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ OBV اشارے اور ڈبل ای ایم اے مساوی لائنوں کے ساتھ مل کر رجحان کا فیصلہ کرتا ہے۔ اس کی خوبی یہ ہے کہ اس کا کام آسان ہے ، سگنل صاف ہے ، اور اس رجحان کی موثر طریقے سے پیروی کی جاسکتی ہے۔ اس کی خرابی یہ ہے کہ غلط سگنل ہوسکتے ہیں ، اور ای ایم اے لائن کی پروسیسنگ میں تاخیر ہوتی ہے۔ دوسرے اشارے کے ساتھ مل کر بہتر کارکردگی حاصل کی جاسکتی ہے۔
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
/////////////// OBV ///////////////
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))
/////////////// Strategy ///////////////
long = crossover(e2, e1)
short = crossunder(e2, e1)
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
//////////////// Stop loss ///////////////
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)