وسائل لوڈ ہو رہے ہیں... لوڈنگ...

MZ MA کراس ملٹی ٹائم فریم حکمت عملی

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

img

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

حکمت عملی منطق

  1. صارف اپنی مرضی کے مطابق backtest وقت کی حد ان پٹ.

  2. ہائکن آشی موم بتیاں یا عام موم بتیاں استعمال کریں۔

  3. اپ ٹرینڈ کے لئے سست، تیز اور اختیاری تیسری ایم اے لائن کی وضاحت کریں۔

  4. ہر ایم اے لائن کے لئے ایم اے کی قسم، ٹائم فریم اور پیرامیٹرز کو اپنی مرضی کے مطابق بنائیں.

  5. طویل سگنل جب تیز رفتار ایم اے سست ایم اے کے اوپر عبور کرتا ہے، مختصر سگنل جب نیچے عبور کرتا ہے۔

  6. اختیاری طور پر صرف لمبا جب بند تیسری ایم اے لائن سے اوپر ہو۔

  7. خودکار تجارت کے لئے حکمت عملی.انٹری کا استعمال کریں.

  8. تجارت کا مقررہ سائز یا اکاؤنٹ فی صد کی بنیاد پر حساب لگائیں۔

فوائد

  1. ایم ٹی ایف کی ساخت کا استعمال کرتا ہے، ہر ایم اے کے پاس ٹائم فریم میں رجحانات کی نشاندہی کرنے کے لئے اپنا ٹائم فریم ہوتا ہے۔

  2. اپنی مرضی کے مطابق ایم اے اقسام، استحکام کے لئے ہموار ایم اے یا ردعمل کے لئے فاسٹ ایم اے استعمال کرسکتے ہیں.

  3. Heikin-Ashi جھوٹے فرار فلٹر.

  4. اختیاری تیسری ایم اے لائن فلٹر whipsaws.

  5. لچکدار ایم اے کی مدت مختلف مارکیٹ کے ماحول کے مطابق ہے.

  6. strategy.entry ماڈیول ٹریڈنگ کو خودکار کرتا ہے۔

  7. بیک ٹیسٹ کی اصلاح بہترین پیرامیٹرز تلاش کرتی ہے۔

خطرات

  1. ایم اے کراس غلط سگنلز کا شکار ہوتے ہیں ، جس سے غیر ضروری تجارت ہوتی ہے۔ ادوار کو بہتر بنا سکتے ہیں یا فلٹر شامل کرسکتے ہیں۔

  2. وِپساؤز ہلکی مارکیٹوں میں نقصانات کا سبب بنتے ہیں۔ ایم اے کے فاصلے کو بڑھا سکتے ہیں یا ادوار کو بڑھا سکتے ہیں۔

  3. تجارت کا مقررہ سائز خطرے کو کنٹرول نہیں کرتا ہے۔ اکاؤنٹ کے سائز کا فیصد غور کریں۔

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

اصلاح

  1. استحکام اور ردعمل کے بہترین امتزاج کے لئے مختلف ایم اے اقسام کا تجربہ کریں۔

  2. رجحان کی نشاندہی اور حساسیت کو متوازن کرنے کے لئے ایم اے کی مدت کو بہتر بنائیں.

  3. داخلے کے حالات کو بہتر بنائیں، مضبوط اپ ٹرینڈ فلٹرز پر غور کریں۔

  4. مخصوص مصنوعات کے لئے اوقات کو بہتر بنائیں۔

  5. فلٹر کے طور پر دیگر اشارے شامل کریں، مثال کے طور پر حجم.

  6. کارکردگی کو زیادہ سے زیادہ کرنے کے لئے بیک ٹیسٹ کے اعداد و شمار پر پیرامیٹر کی اصلاح.

نتیجہ

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


/*backtest
start: 2023-11-08 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle="MZ MA Cross",title="MA MTF Cross Strategy", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.fixed, default_qty_value=5,commission_value=0.1)

timeFrameticker  = input('D',type=input.resolution, title="Chart Timeframe")
uha   =input(true, title="Use Heikin Ashi Candles")

// Use only Heikinashi Candles for all calculations
haclose = uha ? security(heikinashi(syminfo.tickerid), timeFrameticker, close) : security(syminfo.tickerid, timeFrameticker, close)
haopen = uha ? security(heikinashi(syminfo.tickerid), timeFrameticker, open) : security(syminfo.tickerid, timeFrameticker, open)
hahigh = uha ? security(heikinashi(syminfo.tickerid), timeFrameticker, high) : security(syminfo.tickerid, timeFrameticker, high)
halow = uha ?security(heikinashi(syminfo.tickerid), timeFrameticker, low) : security(syminfo.tickerid, timeFrameticker, low)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 30,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2021, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

src = security(heikinashi(syminfo.tickerid), timeFrameticker, close)

//  INPUT MA TYPE
slowMAtype = input(title="Slow MA Type", type=input.string, defval="LRC", options=["SMA","EMA","DEMA","TEMA","LRC","WMA","MF","VAMA","TMA","HMA", "JMA", "Kijun v2", "EDSMA","McGinley"])
fastMAtype = input(title="Fast MA Type", type=input.string, defval="EDSMA", options=["SMA","EMA","DEMA","TEMA","LRC","WMA","MF","VAMA","TMA","HMA", "JMA", "Kijun v2", "EDSMA","McGinley"])
upMAcond =input(false, title="Use Uptrend Conditional 3rd MA for Confirmation")
upMAtype=input(title="Uptrend Conditional MA Type", type=input.string, defval="HMA", options=["SMA","EMA","DEMA","TEMA","LRC","WMA","MF","VAMA","TMA","HMA", "JMA", "Kijun v2", "EDSMA","McGinley"])


//  INPUT RESOLUTION
slowMAresolution = input("D",type=input.resolution, title="Slow MA Resolution")
fastMAresolution = input("D",type=input.resolution, title="Fast MA Resolution")
upMAresolution = input("D",type=input.resolution, title="Uptrend Conditional MA Resolution")
haMAslow = uha ? security(heikinashi(syminfo.tickerid), slowMAresolution, close) : security(syminfo.tickerid, slowMAresolution, close)
haMAfast = uha ?security(heikinashi(syminfo.tickerid), fastMAresolution, close) : security(syminfo.tickerid, fastMAresolution, close)
haMAup =  uha ?security(heikinashi(syminfo.tickerid), upMAresolution, close) : security(syminfo.tickerid, upMAresolution, close)

//  INPUT LENGTHS
slowMAlength = input(50, minval=1, title="Slow MA Length")
fastMAlength = input(30, minval=1, title="Fast MA Length")
upMAlength =  input(200, minval=1, title="Uptrend Conditional MA Length")

/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
/////                      MA Function                         //////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////

//           Pre-reqs
//
tema(src, len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    (3 * ema1) - (3 * ema2) + ema3
kidiv = input(defval=1,maxval=4,  title="Kijun MOD Divider")

jurik_phase = input(title="* Jurik (JMA) Only - Phase", type=input.integer, defval=3)
jurik_power = input(title="* Jurik (JMA) Only - Power", type=input.integer, defval=1)
volatility_lookback = input(10, title="* Volatility Adjusted (VAMA) Only - Volatility lookback length")
//                  MF
beta = input(0.8,minval=0,maxval=1,step=0.1,  title="Modular Filter, General Filter Only - Beta")
feedback = input(false, title="Modular Filter Only - Feedback")
z = input(0.5,title="Modular Filter Only - Feedback Weighting",step=0.1, minval=0, maxval=1)
//EDSMA
ssfLength = input(title="EDSMA - Super Smoother Filter Length", type=input.integer, minval=1, defval=20)
ssfPoles = input(title="EDSMA - Super Smoother Filter Poles", type=input.integer, defval=2, options=[2, 3])

//----
//                  EDSMA
get2PoleSSF(src, length) =>
    PI = 2 * asin(1)
    arg = sqrt(2) * PI / length
    a1 = exp(-arg)
    b1 = 2 * a1 * cos(arg)
    c2 = b1
    c3 = -pow(a1, 2)
    c1 = 1 - c2 - c3
    
    ssf = 0.0
    ssf := c1 * src + c2 * nz(ssf[1]) + c3 * nz(ssf[2])

get3PoleSSF(src, length) =>
    PI = 2 * asin(1)

    arg = PI / length
    a1 = exp(-arg)
    b1 = 2 * a1 * cos(1.738 * arg)
    c1 = pow(a1, 2)

    coef2 = b1 + c1
    coef3 = -(c1 + b1 * c1)
    coef4 = pow(c1, 2)
    coef1 = 1 - coef2 - coef3 - coef4

    ssf = 0.0
    ssf := coef1 * src + coef2 * nz(ssf[1]) + coef3 * nz(ssf[2]) + coef4 * nz(ssf[3])

//          MA Main function
ma(type, src, len) =>
    float result = 0
    if type=="TMA"
        result := sma(sma(src, ceil(len / 2)), floor(len / 2) + 1)
    if type=="MF"
        ts=0.,b=0.,c=0.,os=0.
        //----
        alpha = 2/(len+1)
        a = feedback ? z*src + (1-z)*nz(ts[1],src) : src
        //----
        b := a > alpha*a+(1-alpha)*nz(b[1],a) ? a : alpha*a+(1-alpha)*nz(b[1],a)
        c := a < alpha*a+(1-alpha)*nz(c[1],a) ? a : alpha*a+(1-alpha)*nz(c[1],a)
        os := a == b ? 1 : a == c ? 0 : os[1]
        //----
        upper = beta*b+(1-beta)*c
        lower = beta*c+(1-beta)*b 
        ts := os*upper+(1-os)*lower
        result := ts
    if type=="LRC"
        result := linreg(src, len, 0)
    if type=="SMA" // Simple
        result := sma(src, len)
    if type=="EMA" // Exponential
        result := ema(src, len)
    if type=="DEMA" // Double Exponential
        e = ema(src, len)
        result := 2 * e - ema(e, len)
    if type=="TEMA" // Triple Exponential
        e = ema(src, len)
        result := 3 * (e - ema(e, len)) + ema(ema(e, len), len)
    if type=="WMA" // Weighted
        result := wma(src, len)
    if type=="VAMA" // Volatility Adjusted
        /// Copyright © 2019 to present, Joris Duyck (JD)
        mid=ema(src,len)
        dev=src-mid
        vol_up=highest(dev,volatility_lookback)
        vol_down=lowest(dev,volatility_lookback)
        result := mid+avg(vol_up,vol_down)
    if type=="HMA" // Hull
        result := wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
    if type=="JMA" // Jurik
        /// Copyright © 2018 Alex Orekhov (everget)
        /// Copyright © 2017 Jurik Research and Consulting.
        phaseRatio = jurik_phase < -100 ? 0.5 : jurik_phase > 100 ? 2.5 : jurik_phase / 100 + 1.5
        beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
        alpha = pow(beta, jurik_power)
        jma = 0.0
        e0 = 0.0
        e0 := (1 - alpha) * src + alpha * nz(e0[1])
        e1 = 0.0
        e1 := (src - e0) * (1 - beta) + beta * nz(e1[1])
        e2 = 0.0
        e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
        jma := e2 + nz(jma[1])
        result := jma
    if type=="Kijun v2"
        kijun = avg(lowest(len), highest(len))//, (open + close)/2)
        conversionLine = avg(lowest(len/kidiv), highest(len/kidiv))
        delta = (kijun + conversionLine)/2
        result :=delta
    if type=="McGinley"
        mg = 0.0
        mg := na(mg[1]) ? ema(src, len) : mg[1] + (src - mg[1]) / (len * pow(src/mg[1], 4))
        result :=mg
    if type=="EDSMA"
    
        zeros = src - nz(src[2])
        avgZeros = (zeros + zeros[1]) / 2
        
        // Ehlers Super Smoother Filter 
        ssf = ssfPoles == 2
             ? get2PoleSSF(avgZeros, ssfLength)
             : get3PoleSSF(avgZeros, ssfLength)
        
        // Rescale filter in terms of Standard Deviations
        stdev = stdev(ssf, len)
        scaledFilter = stdev != 0
             ? ssf / stdev
             : 0
        
        alpha = 5 * abs(scaledFilter) / len
        
        edsma = 0.0
        edsma := alpha * src + (1 - alpha) * nz(edsma[1])
        result :=  edsma
    result
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////


//  MA DEFINITION
slowMA = ma(slowMAtype, haMAslow , slowMAlength)
//fastMA = ma(fastMAtype, slowMA , fastMAlength)
fastMA = ma(fastMAtype, haMAfast , fastMAlength)
upMA = ma(upMAtype, haMAup , upMAlength)
closeMA = ma('SMA', src , 2)

//  Strategy Conditions
L1 = crossover(fastMA,slowMA)
L2 = close > upMA
S1 = crossunder(fastMA,slowMA)
S2 = close < upMA
longcondition = upMAcond ? L1 and L2 : L1
shortcondition = upMAcond ? S1 or S2 : S1

//  Plots
color_fill_uptrend = color.new(#4caf50, 80)
color_fill_downtrend = color.new(#c2185b, 80)
plot(slowMA, title='Slow MA', color=color.olive, linewidth=2)
plot(fastMA, title='Fast MA', color=color.teal, linewidth=2)
cls=plot(closeMA, title='Source Line', color=na, linewidth=1)
up = plot(upMA, title='Uptrend Conditional MA', color=color.purple, linewidth=2)
fill(up,cls, color = close > upMA ? color_fill_uptrend : color_fill_downtrend )

//plotshape(longcondition, style = shape.triangleup, color = color.green, location = location.belowbar, text = "Long", size = size.small)
//plotshape(shortcondition, style = shape.triangledown, color = color.red, location = location.abovebar, text = "Short", size = size.small)


strategy.entry(id="long", long = true, when = longcondition and window())
strategy.close("long", when = shortcondition and window())

//if (longcondition)
//    strategy.entry("BUY", strategy.long, when = window())

//if (shortcondition)
//    strategy.entry("SELL", strategy.short, when = window())

مزید