ڈبل ٹائم فریم آئی ڈی ٹرینڈ اسٹریٹجی کے بعد

مصنف:چاؤ ژانگ، تاریخ: 2023-11-07 16:31:07
ٹیگز:

img

جائزہ

یہ حکمت عملی دو ٹائم فریموں پر اوسط سمت اشاریہ (DI +) اور منفی سمت اشاریہ (DI-) کا استعمال کرتی ہے تاکہ طویل اور مختصر تجارت کے لئے رجحان کی سمت کا تعین کیا جاسکے۔ جب DI + بڑے اور چھوٹے دونوں ٹائم فریموں پر DI- سے زیادہ ہوتا ہے تو ، اس سے بڑھتا ہوا رجحان ظاہر ہوتا ہے اور ایک لمبا سگنل ٹرگر ہوتا ہے۔ جب DI- دونوں فریموں پر DI+ سے زیادہ ہوتا ہے تو ، اس سے نیچے کا رجحان ظاہر ہوتا ہے اور ایک مختصر سگنل ٹرگر ہوتا ہے۔

یہ کیسے کام کرتا ہے

یہ حکمت عملی کئی اصولوں پر مبنی ہے:

  1. DI + اور DI کا حساب لگائیں۔ اعلی ، قریبی اور کم قیمتوں کا استعمال کرتے ہوئے DI + اور DI حاصل کریں۔

  2. دو ٹائم فریموں پر DI + اور DI- کا موازنہ کریں۔ مرکزی چارٹ ٹائم فریم (جیسے 1 گھنٹہ) اور ایک بڑے ٹائم فریم (جیسے روزانہ) پر بالترتیب DI + اور DI- کا حساب لگائیں۔ دونوں ٹائم فریموں کے درمیان اقدار کا موازنہ کریں۔

  3. رجحان کی سمت کا تعین کریں۔ جب DI + بڑے اور چھوٹے دونوں ٹائم فریموں پر DI- سے زیادہ ہے تو ، اس سے اوپر کا رجحان ظاہر ہوتا ہے۔ جب DI- دونوں فریموں پر DI + سے زیادہ ہے تو ، اس سے نیچے کا رجحان ظاہر ہوتا ہے۔

  4. ٹرگر ٹریڈنگ سگنل۔ DI+>DI- دونوں فریموں پر طویل سگنل دیتا ہے۔ DI->DI+ دونوں فریموں پر مختصر سگنل دیتا ہے۔

  5. سٹاپ نقصان مقرر کریں. رجحان کی پیروی کے لئے متحرک سٹاپ نقصان کا حساب کرنے کے لئے اے ٹی آر کا استعمال کریں.

  6. باہر نکلنے کی شرائط۔ باہر نکلیں جب اسٹاپ نقصان کو نشانہ بنایا جائے یا قیمت الٹ جائے۔

فوائد

اس حکمت عملی کے مندرجہ ذیل فوائد ہیں:

  1. ڈبل ٹائم فریم DI فلٹرز کا استعمال کرتے ہوئے کچھ جھوٹے فرار.

  2. اے ٹی آر ٹریلنگ اسٹاپ منافع کی حفاظت کو زیادہ سے زیادہ کرتا ہے اور بہت تنگ ہونے سے روکتا ہے.

  3. بروقت سٹاپ نقصان واحد تجارت پر نقصان کو کنٹرول کرتا ہے.

  4. رجحان کے ساتھ ٹریڈنگ مسلسل رجحانات کو پکڑنے کی اجازت دیتا ہے.

  5. سادہ اور واضح قوانین، لائیو ٹریڈنگ کے لئے لاگو کرنے کے لئے آسان.

خطرات اور حل

اس کے علاوہ کئی خطرات ہیں:

  1. ڈی آئی میں تاخیر کا اثر ہوتا ہے ، اندراج کا وقت کھو سکتا ہے۔ پیرامیٹرز کو بہتر بنا سکتا ہے یا دوسرے اشارے شامل کرسکتا ہے۔

  2. ڈبل ٹائم فریم میں بڑے اور چھوٹے ٹی ایف کے درمیان اختلافات ہوسکتے ہیں۔ مزید ٹائم فریم کی توثیق شامل کریں۔

  3. سٹاپ نقصان بہت جارحانہ ہو سکتا ہے زیادہ ٹریڈنگ کی وجہ سے. ATR ضارب loosen.

  4. سائیڈ ویز مارکیٹ میں کثرت سے تجارت کا سبب بن سکتی ہے۔ تجارتی تعدد کو کم کرنے کے لئے فلٹرز شامل کریں۔

  5. پیرامیٹر کی اصلاح تاریخی اعداد و شمار پر انحصار کرتی ہے اور اس سے زیادہ فٹ ہوسکتا ہے۔ پیرامیٹر کی مضبوطی کا اندازہ احتیاط سے لگائیں۔

اصلاح کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:

  1. بہترین پیرامیٹر سیٹ کے لئے DI حساب کے پیرامیٹرز کو بہتر بنائیں.

  2. سگنل کی درستگی کو بہتر بنانے کے لئے دیگر اشارے فلٹرز شامل کریں، جیسے MACD، KDJ وغیرہ.

  3. اسٹاپ نقصان کی حکمت عملی کو بہتر بنائیں تاکہ زیادہ سے زیادہ مارکیٹ کے حالات کو ایڈجسٹ کیا جاسکے ، جیسے ٹریلنگ اسٹاپ یا زیر التوا آرڈرز۔

  4. اہم خبروں کے واقعات سے بچنے کے لئے ٹریڈنگ سیشن فلٹرز شامل کریں۔

  5. مختلف مصنوعات پر پیرامیٹر استحکام ٹیسٹ کرنے کے لئے موافقت کو بہتر بنانے کے لئے.

  6. ماڈل کو تاریخی اعداد و شمار پر تربیت دینے کے لئے مشین لرننگ متعارف کروائیں۔

نتیجہ

خلاصہ یہ ہے کہ یہ ایک عام رجحان کی پیروی کرنے والی حکمت عملی ہے جو رجحان کی سمت کا تعین کرنے اور رجحان کے ساتھ منافع میں مقفل ہونے کے لئے اسٹاپ نقصان کو ترتیب دینے کے لئے ڈی آئی کا استعمال کرتی ہے۔ فائدہ اس کی واضح منطق اور رواں تجارت کے لئے نفاذ کی آسانی میں ہے۔ پیرامیٹر کی اصلاح ، فلٹرز وغیرہ شامل کرنے کے ذریعے بہتری کے لئے بھی گنجائش موجود ہے۔ مزید اصلاح اور استحکام کی جانچ کے ساتھ ، یہ ایک بہت ہی عملی رجحان کی پیروی کرنے والی حکمت عملی بن سکتی ہے۔


/*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


مزید