
یہ حکمت عملی اوسط رجحان اشارے DI + اور DI - پر مبنی ہے۔ دو مختلف ٹائم فریموں کے DI اشارے کا استعمال کرتے ہوئے رجحان کی سمت کا تعین کریں ، اور پھر زیادہ سے زیادہ کام کریں۔ جب بڑے ٹائم فریم اور چھوٹے ٹائم فریم کے DI + دونوں DI - سے زیادہ ہوں تو بیزاری رجحان کا تعین کریں ، اور زیادہ کام کریں۔ جب دونوں ٹائم فریم DI - DI + سے زیادہ ہوں تو ، نیچے کی طرف رجحان کا تعین کریں ، اور کم کریں۔
یہ حکمت عملی بنیادی طور پر مندرجہ ذیل اصولوں پر مبنی ہے۔
ڈی آئی + اور ڈی آئی - کی گنتی کریں. اعلی قیمت ، اختتامی قیمت ، کم قیمت حاصل کرکے ، ڈی آئی + اور ڈی آئی - کی گنتی کریں
دو ٹائم فریموں کے DI+ اور DI− کا موازنہ کریں۔ بنیادی نقشے کے ٹائم فریم (جیسے 1 گھنٹہ) اور بڑے ٹائم فریم (جیسے سورج کی لکیر) میں DI+ اور DI− کا حساب لگایا جاتا ہے اور بڑے اور چھوٹے تعلقات کا موازنہ کیا جاتا ہے۔
رجحان کی سمت کا تعین کریں۔ جب بڑے ٹائم فریم اور چھوٹے ٹائم فریم کا ڈی آئی + ڈی آئی - سے بڑا ہو تو ، اس کا تعین کثیر رخا رجحان کے طور پر کیا جاتا ہے۔ جب دونوں ٹائم فریموں کا ڈی آئی - ڈی آئی + سے بڑا ہو تو ، اس کا تعین خالی رخا رجحان کے طور پر کیا جاتا ہے۔
تجارت کا اشارہ کریں۔ کثیر سر کا اشارہ دو ٹائم فریم DI+> DI- ، زیادہ کریں۔ خالی سر کا اشارہ دو ٹائم فریم DI-> DI+ ، خالی۔
اسٹاپ نقصان کی ترتیب۔ اے ٹی آر کی بنیاد پر اسٹاپ نقصان کی سطح ، رجحان سے باخبر رہنے والے اسٹاپ نقصان کو لاگو کریں۔
باہر نکلنے کی شرائط: سٹاپ نقصان ٹرگر یا قیمت کی واپسی پر پوزیشن کو صاف کریں۔
یہ حکمت عملی مندرجہ ذیل فوائد رکھتی ہے:
ڈبل ٹائم فریم ڈی آئی کا استعمال کرتے ہوئے رجحانات کا اندازہ لگانا ، کچھ جعلی پیشرفتوں کو فلٹر کرنا۔
اے ٹی آر متحرک ٹریکنگ اسٹاپ نقصانات کو روکتا ہے تاکہ زیادہ سے زیادہ منافع کو بچایا جاسکے اور چھوٹے اسٹاپ نقصانات سے بچا جاسکے۔
بروقت بندش ، ایک ہی بندش کو کنٹرول کریں۔
رجحانات کے مطابق ٹریڈ کریں اور مسلسل رجحانات کے مواقع پر قبضہ کریں۔
اس کے علاوہ، یہ ایک سادہ اور سادہ ورژن ہے، جس میں آپ کو آپریٹنگ سسٹم کے لئے آسان بنانے کے لئے آسان ہے.
اس حکمت عملی میں مندرجہ ذیل خطرات بھی ہیں:
ڈی آئی اشارے میں تاخیر ہے ، اور ہوسکتا ہے کہ انٹری کا وقت ضائع ہوجائے۔ پیرامیٹرز کو مناسب طریقے سے بہتر بنایا جاسکتا ہے ، یا دوسرے اشارے کے ساتھ مل کر فیصلہ کیا جاسکتا ہے۔
ڈبل ٹائم فریم فیصلے میں اوپر اور نیچے کے اختلافات ہوسکتے ہیں۔ ٹائم فریم کی توثیق کے اشارے شامل کیے جاسکتے ہیں۔
اسٹاپ نقصانات کو زیادہ شدت سے روکنے سے زیادہ بار بار تجارت ہوسکتی ہے۔ اے ٹی آر ضارب کو مناسب طریقے سے نرمی دی جاسکتی ہے۔
ہنگامی حالات میں بار بار خرید و فروخت ہوسکتی ہے۔ فلٹرنگ کے حالات میں اضافہ کرکے تجارت کی کثرت کو کم کیا جاسکتا ہے۔
پیرامیٹرز کی اصلاح تاریخی اعداد و شمار پر منحصر ہے ، اور اس بات کا خدشہ ہے کہ ریلڈ سسٹم میں زیادہ اصلاحات ہوسکتی ہیں۔ پیرامیٹرز کی بے قابو پن کا محتاط اندازہ لگایا جانا چاہئے۔
یہ حکمت عملی مندرجہ ذیل پہلوؤں سے بہتر بنائی جا سکتی ہے۔
ڈی آئی کے حساب سے پیرامیٹرز کو بہتر بنائیں ، بہترین پیرامیٹرز کا مجموعہ تلاش کریں۔
دیگر اشارے فلٹر شامل کریں، سگنل کی درستگی کو بہتر بنانے کے لئے. جیسے MACD، KDJ وغیرہ.
زیادہ سے زیادہ مارکیٹ کے حالات کو اپنانے کے لئے نقصان کی حکمت عملی کو بہتر بنائیں۔
ٹرانزیکشن کے وقت کی فلٹرنگ کو بڑھانا اور اہم خبروں سے بچنا۔
مختلف پرجاتیوں کے پیرامیٹرز کی طاقت کو جانچنا ، ان کی موافقت کو بہتر بنانا۔
مشین سیکھنے کے اجزاء کو شامل کریں اور تاریخی اعداد و شمار کے ساتھ فیصلے کے ماڈل کو تربیت دیں۔
یہ حکمت عملی مجموعی طور پر ایک عام رجحان کی پیروی کرنے والی حکمت عملی ہے ، جو رجحان کی سمت کا فیصلہ کرنے کے لئے ڈی آئی اشارے کا استعمال کرتی ہے ، منافع کو روکنے کے لئے اسٹاپ نقصانات طے کرتی ہے ، اور رجحان میں منافع کو برقرار رکھتی ہے۔ اس حکمت عملی کا فائدہ یہ ہے کہ اس حکمت عملی کا نظریہ واضح ہے ، اور اسے عملی طور پر چلانے میں آسان ہے۔ اس کے ساتھ ہی کچھ بہتری کی گنجائش بھی ہے ، جیسے اصلاح کے پیرامیٹرز ، فلٹرنگ کی شرائط میں اضافہ وغیرہ۔ اگر جانچ کو بہتر بنانا جاری رکھا جائے تو یہ حکمت عملی ایک بہت ہی عملی رجحان کی پیروی کرنے والی حکمت عملی بن سکتی ہے۔
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji
//@version=5
strategy("DI+/- multi TF Strat [KL]", overlay=true, pyramiding=1, initial_capital=1000000000, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
var string GROUP_ALERT = "Alerts"
var string GROUP_SL = "Stop loss"
var string GROUP_ORDER = "Order size"
var string GROUP_TP = "Profit taking"
var string GROUP_HORIZON = "Time horizon of backtests"
var string GROUP_IND = "Directional IndicatorDI+ DI-"
// ADX Indicator {
adx_len = input(14, group=GROUP_IND, tooltip="Typically 14")
tf1 = input.timeframe("", title="DI +/- in Timeframe 1", group=GROUP_IND, tooltip="Main: DI+ > DI-")
tf2 = input.timeframe("1D", title="DI +/- in Timeframe 2", group=GROUP_IND, tooltip="Confirmation: DI+ > DI-")
// adx_thres = input(20, group=GROUP_IND) //threshold not used in this strategy
get_ADX(_high, _close, _low) =>
// (high, close, mid) -> [plus_DM, minus_DM]
// Based on TradingView user BeikabuOyaji's implementation
_tr = math.max(math.max(_high - _low, math.abs(_high - nz(_close[1]))), math.abs(_low - nz(_close[1])))
smooth_tr = 0.0
smooth_tr := nz(smooth_tr[1]) - nz(smooth_tr[1]) / adx_len + _tr
smooth_directional_mov_plus = 0.0
smooth_directional_mov_plus := nz(smooth_directional_mov_plus[1]) - nz(smooth_directional_mov_plus[1]) / adx_len + (_high - nz(_high[1]) > nz(_low[1]) - _low ? math.max(_high - nz(_high[1]), 0) : 0)
smooth_directional_mov_minus = 0.0
smooth_directional_mov_minus := nz(smooth_directional_mov_minus[1]) - nz(smooth_directional_mov_minus[1]) / adx_len + (nz(_low[1]) - _low > _high - nz(_high[1]) ? math.max(nz(_low[1]) - _low, 0) : 0)
plus_DM = smooth_directional_mov_plus / smooth_tr * 100
minus_DM = smooth_directional_mov_minus / smooth_tr * 100
// DX = math.abs(plus_DM - minus_DM) / (plus_DM + minus_DM) * 100 // DX not used in this strategy
[plus_DM, minus_DM]
// DI +/- from timeframes 1 and 2
[plus_DM_tf1, minus_DM_tf1] = get_ADX(request.security(syminfo.tickerid, tf1, high), request.security(syminfo.tickerid, tf1, close),request.security(syminfo.tickerid, tf1, low))
[plus_DM_tf2, minus_DM_tf2] = get_ADX(request.security(syminfo.tickerid, tf2, high),request.security(syminfo.tickerid, tf2, close),request.security(syminfo.tickerid, tf2, low))
// } end of block: ADX Indicator
var string ENUM_LONG = "LONG"
var string LONG_MSG_ENTER = input.string("Long entered", title="Alert MSG for buying (Long position)", group=GROUP_ALERT)
var string LONG_MSG_EXIT = input.string("Long closed", title="Alert MSG for closing (Long position)", group=GROUP_ALERT)
backtest_timeframe_start = input(defval=timestamp("01 Apr 2020 13:30 +0000"), title="Backtest Start Time", group=GROUP_HORIZON)
within_timeframe = true
// Signals for entry
_uptrend_confirmed = plus_DM_tf1 > minus_DM_tf1 and plus_DM_tf2 > minus_DM_tf2
entry_signal_long = _uptrend_confirmed
plotshape(_uptrend_confirmed, style=shape.triangleup, location=location.bottom, color=color.green)
plotshape(not _uptrend_confirmed, style=shape.triangledown, location=location.bottom, color=color.red)
// Trailing stop loss ("TSL") {
tsl_multi = input.float(2.0, title="ATR Multiplier for trailing stoploss", group=GROUP_SL)
SL_buffer = ta.atr(input.int(14, title="Length of ATR for trailing stoploss", group=GROUP_SL)) * tsl_multi
TSL_source_long = low
var stop_loss_price_long = float(0)
var pos_opened_long = false
stop_loss_price_long := pos_opened_long ? math.max(stop_loss_price_long, TSL_source_long - SL_buffer) : TSL_source_long - SL_buffer
// MAIN: {
if pos_opened_long and TSL_source_long <= stop_loss_price_long
pos_opened_long := false
alert(LONG_MSG_EXIT, alert.freq_once_per_bar)
strategy.close(ENUM_LONG, comment=close < strategy.position_avg_price ? "stop loss" : "take profit")
// (2) Update the stoploss to latest trailing amt.
if pos_opened_long
strategy.exit(ENUM_LONG, stop=stop_loss_price_long, comment="SL")
// (3) INITIAL ENTRY:
if within_timeframe and entry_signal_long
pos_opened_long := true
alert(LONG_MSG_ENTER, alert.freq_once_per_bar)
strategy.entry(ENUM_LONG, strategy.long, comment="long")
// Plotting:
TSL_transp_long = pos_opened_long and within_timeframe ? 0 : 100
plot(stop_loss_price_long, color=color.new(color.green, TSL_transp_long))
// CLEAN UP: Setting variables back to default values once no longer in use
if ta.change(strategy.position_size) and strategy.position_size == 0
pos_opened_long := false
if not pos_opened_long
stop_loss_price_long := float(0)
// } end of MAIN block