ڈبل ایم اے مومنٹم بریک آؤٹ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-31 10:33:21
ٹیگز:

img

جائزہ

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

منطق

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

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

فائدہ

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

خطرہ

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

اصلاح

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

  1. بہترین پیرامیٹر مجموعہ تلاش کرنے کے لئے تیز اور سست ایم اے پیرامیٹرز کو بہتر بنائیں۔
  2. آر ایس آئی پیرامیٹرز کو بہتر بنائیں اور زیادہ خریدنے / زیادہ فروخت کی حد کو ایڈجسٹ کریں؛
  3. خطرات کو کنٹرول کرنے کے لئے موافقت پذیر ٹریلنگ اسٹاپ میکانزم شامل کریں۔
  4. سرمایہ کاری کے استعمال کی کارکردگی کو بہتر بنانے کے لئے پوزیشن سائزنگ اصلاح ماڈیول شامل کریں.

نتیجہ

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


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


    



مزید