جڑواں رینج فلٹر حکمت عملی قیمت کی اتار چڑھاؤ پر مبنی تجارتی حکمت عملی ہے۔ یہ تجارتی سگنل پیدا کرنے کے لئے قیمت اور رینج کے مابین تعلقات کے ساتھ مل کر مختلف پیرامیٹر کی ترتیبات کے ساتھ دو اوسط رینج اشارے کا استعمال کرتی ہے۔ یہ حکمت عملی بٹ کوائن جیسے انتہائی اتار چڑھاؤ والے ڈیجیٹل اثاثوں کے لئے موزوں ہے۔
اس حکمت عملی میں مختلف مدت کی لمبائی کے ساتھ دو ہموار رینج اشارے استعمال کیے جاتے ہیں: ایک تیز رینج اشارے (ڈیفالٹ مدت 27) اور ایک سست رینج اشارے (ڈیفالٹ مدت 55) ۔ رینج اشارے کا فارمولا یہ ہے: موجودہ مدت کی قیمت کی حد کا اشاریہ حرکت پذیر اوسط ایک عنصر سے ضرب (جیسے 1.6) ۔
جڑواں رینج فلٹر کی حکمت عملی قیمت کا موازنہ دو رینج اشارے کے ساتھ کرتی ہے تاکہ یہ معلوم کیا جاسکے کہ آیا یہ فی الحال ایک خاص نوسان کی حد میں ہے۔ جب قیمت اس نوسان کی حد سے گزرتی ہے تو تجارتی سگنل پیدا ہوتے ہیں۔
خاص طور پر ، حکمت عملی ایک میڈین لائن کو بطور بینچ مارک استعمال کرتی ہے ، جو دو رینج اشارے کا اوسط ہے۔ ایک لمبا سگنل اس وقت پیدا ہوتا ہے جب قیمت ایک تیز رینج کے ذریعہ میڈین لائن سے اوپر ہوتی ہے۔ ایک مختصر سگنل اس وقت پیدا ہوتا ہے جب قیمت ایک تیز رینج کے ذریعہ میڈین لائن سے نیچے آجاتی ہے۔
جھوٹے سگنل کو فلٹر کرنے کے لئے ، یہ ایک شرط بھی شامل کرتا ہے: ایک سگنل صرف اس وقت پیدا ہوتا ہے جب موجودہ قیمت کی نقل و حرکت پچھلی مدت کے مطابق ہوتی ہے۔ مثال کے طور پر ، ایک لمبا سگنل صرف اس وقت شروع ہوتا ہے جب قیمت بڑھتی ہے اور ایک حد سے درمیانی لائن سے تجاوز کرتی ہے۔
خلاصہ یہ ہے کہ ، یہ حکمت عملی دوہری رینج اشارے کے ذریعہ نوسن کی حد کی نشاندہی کرتی ہے ، اور جب قیمت رینج سے ٹوٹ جاتی ہے تو آرڈر تیار کرتی ہے۔ غلط سگنل کو کم کرنے کے لئے قیمت کی سمت کے فلٹرز شامل کیے جاتے ہیں۔
ٹوئن رینج فلٹر کی حکمت عملی کے فوائد:
قیمتوں میں اتار چڑھاؤ کی خصوصیات کا استعمال کرتا ہے ، جو بٹ کوائن جیسے انتہائی اتار چڑھاؤ والے اثاثوں کے مطابق ہے۔ جڑواں رینج اشارے قیمتوں کی حد کو زیادہ درست طریقے سے تلاش کرسکتے ہیں۔
جڑواں رینج اشارے میں مختلف ٹائم فریم ہوتے ہیں۔ تیز رفتار مختصر مدت کے مواقع کو پکڑتا ہے ، جبکہ سست رفتار طویل مدتی رجحانات پر غور کرتا ہے۔
قیمت کی سمت فلٹرز کا اضافہ مختصر مدت کے اتار چڑھاؤ سے غلط سگنل کو کم کرتا ہے۔
سادہ اور واضح منطق، سمجھنے اور لاگو کرنے کے لئے آسان، الگوو ٹریڈنگ کے لئے موزوں.
اس حکمت عملی کے کچھ خطرات کو نوٹ کرنا:
اتار چڑھاؤ کے اشارے پر انحصار کرتا ہے، کم اتار چڑھاؤ کے ماحول میں کم کارکردگی کا مظاہرہ کرسکتا ہے.
مختلف مصنوعات کے لئے رینج پیرامیٹرز کو بہتر بنانے کی ضرورت ہے ، ورنہ تجارتی مواقع ضائع ہوسکتے ہیں یا غلط سگنل سامنے آسکتے ہیں۔
قیمت اور اتار چڑھاؤ کے مابین اختلافات پر غور نہیں کیا جاتا ہے۔ اگر قیمتوں میں اسی طرح کے اضافے کے بغیر اتار چڑھاؤ بڑھتا ہے تو غلط سگنل سامنے آسکتے ہیں۔
اعلی اتار چڑھاؤ کے ماحول میں اسٹاپ نقصان کی سطح کو ایڈجسٹ کرنے کی ضرورت ہوسکتی ہے۔ بہت تنگ اسٹاپ سے زیادہ اسٹاپ آؤٹ ہوجاتا ہے۔
اسٹریٹیجی کو کئی پہلوؤں میں بہتر بنایا جا سکتا ہے:
مختلف مصنوعات اور ٹائم فریم کے لئے بہترین مجموعے تلاش کرنے کے لئے رینج پیرامیٹرز کی جانچ اور اصلاح کریں۔
سٹاپ نقصان کی حکمت عملی کو بہتر بنانے کے لئے حالیہ اتار چڑھاؤ پر مبنی متحرک سٹاپ نقصان کے طریقہ کار شامل کریں.
غلط سگنل سے بچنے کے لئے قیمتوں میں اتار چڑھاؤ کے فرق پر مبنی فلٹرز شامل کریں۔
داخل ہونے کے یقین کو بڑھانے کے لئے حجم کی تبدیلیوں جیسے دیگر اشارے شامل کریں.
حکمت عملی کے لئے مناسب منافع لینے کے باہر نکلنے کے میکانزم کی جانچ پڑتال اور شامل کریں.
مجموعی طور پر ، جڑواں رینج فلٹر انتہائی اتار چڑھاؤ والے اثاثوں کے لئے ایک موثر تجارتی حکمت عملی ہے۔ یہ قیمت کی اتار چڑھاؤ کی خصوصیات کو اچھی طرح سے استعمال کرتا ہے اور سادہ اور واضح تجارتی منطق پیدا کرتا ہے۔ پیرامیٹر کی اصلاح اور رسک مینجمنٹ جیسی مزید بہتری کے ساتھ ، یہ کوانٹ ٹریڈنگ سسٹم کا ایک قیمتی جزو بن سکتا ہے۔ یہ مارکیٹ کی اتار چڑھاؤ کی خصوصیات کی بنیاد پر الگورتھم ٹریڈنگ میں بھی بصیرت فراہم کرتا ہے۔
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-12 00:00:00 period: 30m basePeriod: 15m 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/ // © colinmck, greenmask9 //@version=4 strategy(title="Twin Range Filter Algo", overlay=true) source = input(defval=close, title="Source") // Smooth Average Range per1 = input(defval=27, minval=1, title="Fast period") mult1 = input(defval=1.6, minval=0.1, title="Fast range") per2 = input(defval=55, minval=1, title="Slow period") mult2 = input(defval=2, minval=0.1, title="Slow range") smoothrng(x, t, m) => wper = t * 2 - 1 avrng = ema(abs(x - x[1]), t) smoothrng = ema(avrng, wper) * m smoothrng smrng1 = smoothrng(source, per1, mult1) smrng2 = smoothrng(source, per2, mult2) smrng = (smrng1 + smrng2) / 2 // Range Filter rngfilt(x, r) => rngfilt = x rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r rngfilt filt = rngfilt(source, smrng) upward = 0.0 upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1]) downward = 0.0 downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1]) hband = filt + smrng lband = filt - smrng longCond = bool(na) shortCond = bool(na) longCond := source > filt and source > source[1] and upward > 0 or source > filt and source < source[1] and upward > 0 shortCond := source < filt and source < source[1] and downward > 0 or source < filt and source > source[1] and downward > 0 CondIni = 0 CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1] long = longCond and CondIni[1] == -1 short = shortCond and CondIni[1] == 1 // Plotting // Strategy // From this part on, programmer is greenmaks9 // Separator = input(title="Following conditions and backtest algorithm are added by @greenmask9 🎯, original script is written by @colinmck 👍. Read both of their's release notes for more info on how this script works.", type=input.bool, defval=false) disabler = input(title="Disable greenmask9's ATR conditions", type=input.bool, defval=false) //second l2 = input(title="ATR1", defval=32, minval=1) s2 = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"]) atr2(source, l2) => if s2 == "SMA" sma(source, l2) else if s2 == "RMA" rma(source, l2) else if s2 == "EMA" ema(source, l2) else wma(source, l2) //third l3 = input(title="ATR2", defval=64, minval=1) s3 = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"]) atr3(source, l3) => if s3 == "RMA" rma(source, l3) else if s3 == "SMA" sma(source, l3) else if s3 == "EMA" ema(source, l3) else wma(source, l3) atr20=atr2(tr(true), l2) atr30=atr3(tr(true), l3) strategy.initial_capital = 50000 ordersize=floor(strategy.initial_capital/close) profit = input(title="Ticks profit", type=input.integer, defval=900) stop = input(title="Ticks stoploss", type=input.integer, defval=300) maxcandles_till_close = input(title="Time stoploss", type=input.integer, defval=17) bull = long and (atr20<atr30 or disabler) bear = short and (atr20<atr30 or disabler) bullclock = barssince(bull) bearclock = barssince(bear) if (bull) strategy.entry("Twin Long", strategy.long, ordersize) strategy.exit("Exit", from_entry = "Twin Long", profit = profit, loss = stop) if (bear) strategy.entry("Twin Short", strategy.short, ordersize) strategy.exit("Exit", from_entry = "Twin Short", profit = profit, loss = stop) //time stoploss strategy.close("Twin Long", when = bullclock == maxcandles_till_close, comment = "Timed out") strategy.close("Twin Short", when = bearclock == maxcandles_till_close, comment = "Timed out")