ڈونچیئن ٹرینڈ فالونگ حکمت عملی مضمون میں بیان کردہ ڈونچیئن چینل اصول کی بنیاد پر تیار کی گئی ہے۔ یہ حکمت عملی ڈونچیئن چینل کا استعمال رجحان کی سمت کا تعین کرنے کے لئے کرتی ہے اور جب قیمتیں نئی بلندیوں یا نچلی سطحوں پر پہنچتی ہیں تو طویل یا مختصر پوزیشنیں قائم کرتی ہے۔
یہ حکمت عملی رجحان کی سمت کا فیصلہ کرنے کے لئے ڈونچیان چینل اشارے پر مبنی ہے۔ ڈونچیان چینل میں ایک طویل مدت چینل اور ایک مختصر مدت چینل ہوتا ہے۔ جب قیمت طویل مدت چینل سے ٹوٹ جاتی ہے تو ، یہ رجحان کے آغاز کا اشارہ کرتی ہے۔ جب قیمت مختصر مدت چینل سے ٹوٹ جاتی ہے تو ، یہ رجحان کے اختتام کا اشارہ کرتی ہے۔
خاص طور پر ، طویل مدت چینل کی لمبائی 50 دن یا 20 دن ہے ، اور مختصر مدت چینل کی لمبائی 50 دن ، 20 دن یا 10 دن ہے۔ اگر قیمت 50 دن میں سب سے زیادہ قیمت کے برابر ہے تو ، ایک لمبی پوزیشن کھولی جاتی ہے۔ اگر قیمت 50 دن میں سب سے کم قیمت کے برابر ہے تو ، ایک مختصر پوزیشن کھولی جاتی ہے۔ اگر قیمت 20 یا 10 دن میں سب سے کم قیمت کے برابر ہے تو ، لمبی پوزیشنیں بند ہوجاتی ہیں۔ اگر قیمت 20 یا 10 دن میں سب سے زیادہ قیمت کے برابر ہے تو ، مختصر پوزیشنیں بند ہوجاتی ہیں۔
مختلف ادوار کے دو ڈونچیئن چینلز کو ملا کر، یہ رجحان شروع ہونے پر پوزیشن قائم کرنے کی سمت کا تعین کرسکتا ہے، اور رجحان ختم ہونے پر بروقت سٹاپ نقصان کا احساس کرسکتا ہے۔
اس حکمت عملی کے اہم فوائد یہ ہیں:
رجحانات کو پکڑنے کی مضبوط صلاحیت۔ یہ ڈونچیان چینل کے بریکآؤٹس کا استعمال کرتے ہوئے رجحانات کے آغاز اور اختتام کی نشاندہی کرکے مؤثر طریقے سے رجحانات کو ٹریک کرسکتا ہے۔
مناسب رسک کنٹرول۔ یہ ایک ہی تجارت کے نقصان کو کنٹرول کرنے کے لئے ایک متحرک اسٹاپ نقصان کا استعمال کرتا ہے۔
پیرامیٹرز کی لچکدار ایڈجسٹمنٹ۔ مختلف مصنوعات اور مارکیٹ کے ماحول کو اپنانے کے لئے چینل کی مدت کا مجموعہ آزادانہ طور پر منتخب کیا جاسکتا ہے۔
سادہ اور واضح تجارتی منطق۔ سمجھنے اور لاگو کرنے میں آسان ہے۔
اس حکمت عملی کے خطرات میں شامل ہیں:
رینج سے منسلک مارکیٹوں کے مطابق ڈھالنے میں ناکامی۔ جب رجحان غیر واضح ہوتا ہے تو اس میں لگاتار چھوٹے اسٹاپ نقصان کا سامنا کرنا پڑتا ہے۔
خرابی کی ناکامی کا خطرہ۔ چینل کو توڑنے کے بعد قیمتیں واپس آسکتی ہیں ، جس سے اسٹاپ نقصان ہوتا ہے۔
مدت کے انتخاب کا خطرہ۔ غیر مناسب چینل کی مدت کی ترتیبات شور میں تجارت کا باعث بن سکتی ہیں۔
شارپ تناسب میں کمی کا خطرہ۔ اسٹاپ نقصان کو ایڈجسٹ کیے بغیر پوزیشن کے سائز میں اضافہ شارپ تناسب میں کمی کا باعث بن سکتا ہے۔
حل یہ ہیں:
اس حکمت عملی کے لئے اصلاح کی سمت:
فلٹر کے حالات کو شامل کرنے سے روکنے کے لئے، مثال کے طور پر حقیقی بریک آؤٹ کا فیصلہ کرنے کے لئے حجم کو یکجا کرنا.
منافع تناسب کو بڑھانے کے لئے چینل کی مدت کے امتزاج اور پوزیشن سائزنگ کو بہتر بنانا۔ موافقت پذیر اسٹاپ نقصان متعارف کرایا جاسکتا ہے۔
بہترین پیرامیٹر سیٹ تلاش کرنے کے لئے وقفے نقطہ کی اصلاح کی کوشش کر رہا ہے.
متحرک اصلاح اور پیرامیٹرز کی ایڈجسٹمنٹ کے لئے مشین لرننگ الگورتھم میں اضافہ۔
ڈونچیئن ٹرینڈ فالونگ اسٹریٹیجی دوہری چینلز کا استعمال کرتے ہوئے قیمت کے رجحانات کے آغاز اور اختتام کی نشاندہی کرتی ہے ، اور مؤثر سنگل ٹریڈ نقصان کنٹرول کے ساتھ رجحان کے بعد تجارتی انداز کو اپناتی ہے۔ اس حکمت عملی میں پیرامیٹر کی لچکدار ایڈجسٹمنٹ اور آسان نفاذ ہے ، جس سے خود کو ایک بہت ہی عملی رجحان کی پیروی کرنے والی حکمت عملی بناتا ہے۔ لیکن رینج سے منسلک مارکیٹوں میں ناکافی منافع بخش اور پیرامیٹر کے انتخاب سے ہونے والے خطرات کو نوٹ کرنا چاہئے۔ مزید اصلاحات سے حکمت عملی کی بہتر کارکردگی کا باعث بن سکتی ہے۔
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Donchian", overlay=true, pyramiding=0, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=2, slippage=2) // ============================================================================= // VARIABLES // ============================================================================= donch_string = input.string(title="Length", options = ['20/10','50/20', '50/50', '20/20', '100/100'], defval='50/50') permit_long = input.bool(title = 'Permit long', defval = true) permit_short = input.bool(title = 'Permit short', defval = true) risk_percent = input.float(title="Position Risk %", defval=0.5, step=0.25) stopOffset = input.float(title="ATR mult", defval=2.0, step=0.5) atrLen = input.int(title="ATR Length", defval=20) close_in_end = input.bool(title = 'Close in end', defval = true) permit_stop = input.bool(title = 'Permit stop', defval = false) // ============================================================================= // CALCULATIONS // ============================================================================= donch_len_big = donch_string == '50/20' ? 50 : donch_string == '50/50' ? 50 : donch_string == '20/20' ? 20 : donch_string == '20/10' ? 20 : donch_string == '100/100' ? 100 : na donch_len_small = donch_string == '50/20' ? 20 : donch_string == '50/50' ? 50 : donch_string == '20/20' ? 20 : donch_string == '20/10' ? 10 : donch_string == '100/100' ? 100 : na big_maxclose = ta.highest(close, donch_len_big) big_minclose = ta.lowest(close, donch_len_big) small_maxclose = ta.highest(close, donch_len_small) small_minclose = ta.lowest(close, donch_len_small) atrValue = ta.atr(atrLen)[1] tradeWindow = true // ============================================================================= // NOTOPEN QTY // ============================================================================= risk_usd = (risk_percent / 100) * strategy.equity atr_currency = (atrValue * syminfo.pointvalue) notopen_qty = risk_usd / (stopOffset * atr_currency) // ============================================================================= // LONG STOP // ============================================================================= long_stop_price = 0.0 long_stop_price := strategy.position_size > 0 and na(long_stop_price[1]) ? strategy.position_avg_price - stopOffset * atrValue : strategy.position_size > 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price: strategy.position_size > 0 ? long_stop_price[1] : na // ============================================================================= // SHORT STOP // ============================================================================= short_stop_price = 0.0 short_stop_price := strategy.position_size < 0 and na(short_stop_price[1]) ? strategy.position_avg_price + stopOffset * atrValue : strategy.position_size < 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price : strategy.position_size < 0 ? short_stop_price[1] : na // ============================================================================= // PLOT VERTICAL COLOR BAR // ============================================================================= cross_up = strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long cross_dn = strategy.position_size >= 0 and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short bg_color = cross_up ? color.green : cross_dn ? color.red : na bg_color := color.new(bg_color, 70) bgcolor(bg_color) // ============================================================================= // PLOT DONCHIAN LINES // ============================================================================= s1 = cross_up ? na : cross_dn ? na : strategy.position_size != 0 ? strategy.position_avg_price : na s2 = cross_up ? na : cross_dn ? na : strategy.position_size > 0 ? small_minclose : strategy.position_size < 0 ? small_maxclose : na s3 = cross_up ? na : cross_dn ? na : not permit_stop ? na : strategy.position_size > 0 ? long_stop_price : strategy.position_size < 0 ? short_stop_price : na plot(series=big_maxclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Maxclose Black") plot(series=big_minclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Minclose Black") plot(series=s1, style=plot.style_linebr, color=color.yellow, linewidth=2, title="Entry Yellow") plot(series=s2, style=plot.style_linebr, color=color.red, linewidth=1, title="Donch Small Red") plot(series=s3, style=plot.style_linebr, color=color.fuchsia, linewidth=2, title="Stop Fuchsia") // ============================================================================= // ENTRY ORDERS // ============================================================================= if strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long strategy.entry("Long", strategy.long, qty=notopen_qty) if strategy.position_size >= 0 and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short strategy.entry("Short", strategy.short, qty=notopen_qty) // ============================================================================= // EXIT ORDERS // ============================================================================= if strategy.position_size > 0 and permit_stop strategy.exit(id="Stop", from_entry="Long", stop=long_stop_price) if strategy.position_size < 0 and permit_stop strategy.exit(id="Stop", from_entry="Short", stop=short_stop_price) // ========== if strategy.position_size > 0 and close == small_minclose and not barstate.islast strategy.close(id="Long", comment='Donch') if strategy.position_size < 0 and close == small_maxclose and not barstate.islast strategy.close(id="Short", comment='Donch') // ========== if close_in_end if not tradeWindow strategy.close_all(comment='Close in end') // ============================================================================= // END // =============================================================================