ڈوئل ایم اے مومنٹم بریکآؤٹ حکمت عملی ایک مقداری تجارتی حکمت عملی ہے جو دوہری حرکت پذیر اوسط لائنوں اور آر ایس آئی اشارے کو یکجا کرتی ہے۔ یہ رفتار اشارے آر ایس آئی کے لئے زیادہ خرید / زیادہ فروخت کی حد مقرر کرنے کے لئے تیز رفتار اوسط ، سست حرکت پذیر اوسط اور آر ایس آئی کا حساب لگاتی ہے۔ جب دوہری ایم اے میں سنہری صلیبیں ہوتی ہیں تو یہ طویل ہوجاتی ہے اور جب مارکیٹ میں رجحان کی نقل و حرکت کو پکڑنے کے لئے موت کی صلیبیں ہوتی ہیں تو یہ مختصر ہوجاتی ہے۔
ڈبل ایم اے مومنٹم بریکآؤٹ حکمت عملی بنیادی طور پر دوہری حرکت پذیر اوسط اور آر ایس آئی اشارے پر مبنی ہے۔ یہ پہلے ایک تیز رفتار اور ایک سست حرکت پذیر اوسط لائن کا حساب لگاتا ہے ، جس میں تیز رفتار ایم اے 10 دن کی وزن والی حرکت پذیر اوسط ہے اور سست ایم اے 100 دن کی لکیری انکولی حرکت پذیر اوسط ہے۔ پھر یہ 14 دن کی آر ایس آئی کا حساب لگاتا ہے اور زیادہ خرید / زیادہ فروخت کی حد مقرر کرتا ہے۔ جب تیز ایم اے سست ایم اے سے تجاوز کرتا ہے تو ، یہ ایک اپ ٹرینڈ کا اشارہ کرتا ہے ، اور جب تیز ایم اے ایم اے سے نیچے عبور کرتا ہے تو ، یہ سست رجحان کا اشارہ کرتا ہے۔ رجحان کی سمت کا تعین کرنے کے علاوہ ، حکمت عملی کے لئے آر ایس آئی کو بھی ضرورت ہوتی ہے کہ جعلی بریکآؤٹس کو مؤثر طریقے سے فلٹر کرنے کے لئے زیادہ خرید کی حد سے اوپر یا زیادہ فروخت کی حد سے نیچے ہو۔
خاص طور پر ، جب ایک اپ ٹرینڈ کی نشاندہی کی جاتی ہے ، اگر اس وقت آر ایس آئی زیادہ سے زیادہ خریداری کی حد سے اوپر ہے تو ، ایک لمبی پوزیشن کھولی جائے گی۔ جب ایک ڈاؤن ٹرینڈ کی نشاندہی کی جاتی ہے اور آر ایس آئی زیادہ فروخت کی حد سے نیچے ہے تو ، ایک مختصر پوزیشن کھولی جائے گی۔ پوزیشن کھولنے کے بعد ، مخالف پوزیشن کھولی جائے گی جب تجارتی سگنل الٹ جاتا ہے۔
ڈبل ایم اے مومنٹم بریکآؤٹ حکمت عملی مارکیٹ کے رجحانات کی مؤثر طریقے سے نشاندہی کرنے کے لئے ڈبل ایم اے اور آر ایس آئی کو یکجا کرتی ہے اور آر ایس آئی کو جعلی بریکآؤٹس کو فلٹر کرنے کے لئے استعمال کرتی ہے ، اس طرح تجارتی سگنلز کی وشوسنییتا کو بہتر بناتی ہے۔ ایک واحد ایم اے سسٹم کے مقابلے میں ، یہ حکمت عملی غیر موثر تجارت کے واقعات کو بہت کم کرسکتی ہے۔ اس کے علاوہ ، آر ایس آئی کے پیرامیٹر کی اصلاح بھی حکمت عملی کے لئے لچک فراہم کرتی ہے۔
ڈبل ایم اے مومنٹم بریکآؤٹ حکمت عملی میں کچھ خطرات بھی شامل ہیں۔ ڈبل ایم اے سسٹم پیرامیٹرز کے لئے بہت حساس ہے اور مختلف پیرامیٹرز کے مجموعوں کو مختلف مارکیٹوں کے لئے احتیاط سے جانچنے کی ضرورت ہے۔ اس کے علاوہ ، آر ایس آئی کے لئے غلط طور پر مقرر کردہ حدیں بھی تجارتی مواقع سے محروم ہوسکتی ہیں۔ آخر میں ، مارکیٹ کے کچھ حالات میں جارحانہ ٹریلنگ اسٹاپس کو عبور کیا جاسکتا ہے ، لہذا بیک ٹیسٹنگ کے نتائج کی بنیاد پر اسٹاپ نقصان کے نکات کو ایڈجسٹ کیا جانا چاہئے۔
ڈبل ایم اے مومنٹم بریک آؤٹ حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:
ڈوئل ایم اے مومنٹم بریک آؤٹ حکمت عملی ڈوئل ایم اے سسٹم کے ذریعہ رجحان کی سمت کا تعین کرتی ہے اور اشاروں کو فلٹر کرنے کے لئے آر ایس آئی کا استعمال کرتی ہے ، جو ایک ہی ایم اے سسٹم کی خامیوں کو مؤثر طریقے سے بہتر بنا سکتی ہے۔ اس حکمت عملی میں پیرامیٹرز کے لئے بہت زیادہ اصلاح کی گنجائش ہے اور موافقت پذیر ایڈجسٹمنٹ حاصل کی جاسکتی ہے۔ یہ ایک عمدہ رجحان کی پیروی کرنے والی حکمت عملی ہے۔
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-10 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © Salman4sgd //@version=5 strategy("MAConverging + QQE Threshold Strategy", overlay = true) //------------------------------------------------------------------------------ //Settings //-----------------------------------------------------------------------------{ length = input(100) incr = input(10, "Increment") fast = input(10) src = input(close) //-----------------------------------------------------------------------------} //Calculations //-----------------------------------------------------------------------------{ var ma = 0. var fma = 0. var alpha = 0. var k = 1 / incr upper = ta.highest(length) lower = ta.lowest(length) init_ma = ta.sma(src, length) cross = ta.cross(src,ma) alpha := cross ? 2 / (length + 1) : src > ma and upper > upper[1] ? alpha + k : src < ma and lower < lower[1] ? alpha + k : alpha ma := nz(ma[1] + alpha[1] * (src - ma[1]), init_ma) fma := nz(cross ? math.avg(src, fma[1]) : src > ma ? math.max(src, fma[1]) + (src - fma[1]) / fast : math.min(src, fma[1]) + (src - fma[1]) / fast,src) //-----------------------------------------------------------------------------} //Plots //-----------------------------------------------------------------------------{ css = fma > ma ? color.teal : color.red plot0 = plot(fma, "Fast MA" , color = #ff5d00 , transp = 100) plot1 = plot(ma, "Converging MA" , color = css) fill(plot0, plot1, css , "Fill" , transp = 80) //-----------------------------------------------------------------------------} RSI_Period = input(14, title='RSI Length') SF = input(5, title='RSI Smoothing') QQE = input(4.238, title='Fast QQE Factor') ThreshHold = input(10, title='Thresh-hold') // sQQEx = input(false, title='Show Smooth RSI, QQE Signal crosses') sQQEz = input(false, title='Show Smooth RSI Zero crosses') sQQEc = input(false, title='Show Smooth RSI Thresh Hold Channel Exits') ma_type = input.string(title='MA Type', defval='EMA', options=['ALMA', 'EMA', 'DEMA', 'TEMA', 'WMA', 'VWMA', 'SMA', 'SMMA', 'HMA', 'LSMA', 'PEMA']) lsma_offset = input.int(defval=0, title='* Least Squares (LSMA) Only - Offset Value', minval=0) alma_offset = input.float(defval=0.85, title='* Arnaud Legoux (ALMA) Only - Offset Value', minval=0, step=0.01) alma_sigma = input.int(defval=6, title='* Arnaud Legoux (ALMA) Only - Sigma Value', minval=0) inpDrawBars = input(true, title='color bars?') ma(type, src, len) => float result = 0 if type == 'SMA' // Simple result := ta.sma(src, len) result if type == 'EMA' // Exponential result := ta.ema(src, len) result if type == 'DEMA' // Double Exponential e = ta.ema(src, len) result := 2 * e - ta.ema(e, len) result if type == 'TEMA' // Triple Exponential e = ta.ema(src, len) result := 3 * (e - ta.ema(e, len)) + ta.ema(ta.ema(e, len), len) result if type == 'WMA' // Weighted result := ta.wma(src, len) result if type == 'VWMA' // Volume Weighted result := ta.vwma(src, len) result if type == 'SMMA' // Smoothed w = ta.wma(src, len) result := na(w[1]) ? ta.sma(src, len) : (w[1] * (len - 1) + src) / len result if type == 'HMA' // Hull result := ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) result if type == 'LSMA' // Least Squares result := ta.linreg(src, len, lsma_offset) result if type == 'ALMA' // Arnaud Legoux result := ta.alma(src, len, alma_offset, alma_sigma) result if type == 'PEMA' // Copyright (c) 2010-present, Bruno Pio // Copyright (c) 2019-present, Alex Orekhov (everget) // Pentuple Exponential Moving Average script may be freely distributed under the MIT license. ema1 = ta.ema(src, len) ema2 = ta.ema(ema1, len) ema3 = ta.ema(ema2, len) ema4 = ta.ema(ema3, len) ema5 = ta.ema(ema4, len) ema6 = ta.ema(ema5, len) ema7 = ta.ema(ema6, len) ema8 = ta.ema(ema7, len) pema = 8 * ema1 - 28 * ema2 + 56 * ema3 - 70 * ema4 + 56 * ema5 - 28 * ema6 + 8 * ema7 - ema8 result := pema result result src := input(close, title='RSI Source') // // Wilders_Period = RSI_Period * 2 - 1 Rsi = ta.rsi(src, RSI_Period) RsiMa = ma(ma_type, Rsi, SF) AtrRsi = math.abs(RsiMa[1] - RsiMa) MaAtrRsi = ma(ma_type, AtrRsi, Wilders_Period) dar = ma(ma_type, MaAtrRsi, Wilders_Period) * QQE longband = 0.0 shortband = 0.0 trend = 0 DeltaFastAtrRsi = dar RSIndex = RsiMa newshortband = RSIndex + DeltaFastAtrRsi newlongband = RSIndex - DeltaFastAtrRsi longband := RSIndex[1] > longband[1] and RSIndex > longband[1] ? math.max(longband[1], newlongband) : newlongband shortband := RSIndex[1] < shortband[1] and RSIndex < shortband[1] ? math.min(shortband[1], newshortband) : newshortband cross_1 = ta.cross(longband[1], RSIndex) trend := ta.cross(RSIndex, shortband[1]) ? 1 : cross_1 ? -1 : nz(trend[1], 1) FastAtrRsiTL = trend == 1 ? longband : shortband // // Find all the QQE Crosses QQExlong = 0 QQExlong := nz(QQExlong[1]) QQExshort = 0 QQExshort := nz(QQExshort[1]) QQExlong := sQQEx and FastAtrRsiTL < RSIndex ? QQExlong + 1 : 0 QQExshort := sQQEx and FastAtrRsiTL > RSIndex ? QQExshort + 1 : 0 // Zero cross QQEzlong = 0 QQEzlong := nz(QQEzlong[1]) QQEzshort = 0 QQEzshort := nz(QQEzshort[1]) QQEzlong := sQQEz and RSIndex >= 50 ? QQEzlong + 1 : 0 QQEzshort := sQQEz and RSIndex < 50 ? QQEzshort + 1 : 0 // // Thresh Hold channel Crosses give the BUY/SELL alerts. QQEclong = 0 QQEclong := nz(QQEclong[1]) QQEcshort = 0 QQEcshort := nz(QQEcshort[1]) QQEclong := sQQEc and RSIndex > 50 + ThreshHold ? QQEclong + 1 : 0 QQEcshort := sQQEc and RSIndex < 50 - ThreshHold ? QQEcshort + 1 : 0 // // QQE exit from Thresh Hold Channel // plotshape(sQQEc and QQEclong == 1 ? RsiMa - 50 : na, title='QQE XC Over Channel', style=shape.diamond, location=location.absolute, color=color.new(color.olive, 0), size=size.small, offset=0) // plotshape(sQQEc and QQEcshort == 1 ? RsiMa - 50 : na, title='QQE XC Under Channel', style=shape.diamond, location=location.absolute, color=color.new(color.red, 0), size=size.small, offset=0) // // QQE crosses // plotshape(sQQEx and QQExlong == 1 ? FastAtrRsiTL[1] - 50 : na, title='QQE XQ Cross Over', style=shape.circle, location=location.absolute, color=color.new(color.lime, 0), size=size.small, offset=-1) // plotshape(sQQEx and QQExshort == 1 ? FastAtrRsiTL[1] - 50 : na, title='QQE XQ Cross Under', style=shape.circle, location=location.absolute, color=color.new(color.blue, 0), size=size.small, offset=-1) // // Signal crosses zero line // plotshape(sQQEz and QQEzlong == 1 ? RsiMa - 50 : na, title='QQE XZ Zero Cross Over', style=shape.square, location=location.absolute, color=color.new(color.aqua, 0), size=size.small, offset=0) // plotshape(sQQEz and QQEzshort == 1 ? RsiMa - 50 : na, title='QQE XZ Zero Cross Under', style=shape.square, location=location.absolute, color=color.new(color.fuchsia, 0), size=size.small, offset=0) // hcolor = RsiMa - 50 > ThreshHold ? color.green : RsiMa - 50 < 0 - ThreshHold ? color.red : color.orange // plot(FastAtrRsiTL - 50, color=color.new(color.blue, 0), linewidth=2) // p1 = plot(RsiMa - 50, color=color.new(color.orange, 0), linewidth=2) // plot(RsiMa - 50, color=hcolor, style=plot.style_columns, transp=50) // hZero = hline(0, color=color.black, linestyle=hline.style_dashed, linewidth=1) // hUpper = hline(ThreshHold, color=color.green, linestyle=hline.style_dashed, linewidth=2) // hLower = hline(0 - ThreshHold, color=color.red, linestyle=hline.style_dashed, linewidth=2) // fill(hUpper, hLower, color=color.new(color.gray, 80)) //EOF length := input.int(title='ATR Length', defval=14, minval=1) smoothing = input.string(title='ATR Smoothing', defval='RMA', options=['RMA', 'SMA', 'EMA', 'WMA']) m = input(0.3, 'ATR Multiplier') src1 = input(high) src2 = input(low) pline = input(true, 'Show Price Lines') col1 = input(color.blue, 'ATR Text Color') col2 = input.color(color.teal, 'Low Text Color', inline='1') col3 = input.color(color.red, 'High Text Color', inline='2') collong = input.color(color.teal, 'Low Line Color', inline='1') colshort = input.color(color.red, 'High Line Color', inline='2') ma_function(source, length) => if smoothing == 'RMA' ta.rma(source, length) else if smoothing == 'SMA' ta.sma(source, length) else if smoothing == 'EMA' ta.ema(source, length) else ta.wma(source, length) a = ma_function(ta.tr(true), length) * m s_sl = ma_function(ta.tr(true), length) * m + src1 l_sl = src2 - ma_function(ta.tr(true), length) * m p1 = plot(s_sl, title='ATR Short Stop Loss', color=colshort, trackprice=pline ? true : false, transp=20) p2 = plot(l_sl, title='ATR Long Stop Loss', color=collong, trackprice=pline ? true : false, transp=20) bgc = RsiMa - 50 > ThreshHold ? color.green : Rsi - 50 < 0 - ThreshHold ? color.red : color.orange barcolor(inpDrawBars ? bgc : na) prebuy = RsiMa - 50 > ThreshHold buy=prebuy and not(prebuy[1]) and fma > ma var long_tp=0.0 var long_sl=0.0 var short_tp=0.0 var short_sl=0.0 if prebuy strategy.close("Short") if buy and strategy.position_size<=0 strategy.entry("Long", strategy.long) long_sl:=l_sl long_tp:=close+(close-long_sl)*2 //if strategy.position_size>0 strategy.exit("L_SL","Long",stop=long_sl) //strategy.exit("L_SL","Long",stop=long_sl) // if low<long_sl[1] // strategy.close("Long") presell=RsiMa - 50 < 0 - ThreshHold // RsiMa - 50 < 0 - ThreshHold sell= presell and not(presell[1]) and fma < ma //plotshape(presell) if presell strategy.close("Long") if sell and strategy.position_size>=0 strategy.entry("Short", strategy.short) short_sl:=s_sl short_tp:=close-(short_sl-close)*2 //if strategy.position_size<0 strategy.exit("S_SL","Short",stop=short_sl) //strategy.exit("S_SL","Short",stop=short_sl)