یہ حکمت عملی بنیادی طور پر رجحان کی سمت کا تعین کرنے کے لئے متعدد ٹائم فریموں میں ایم اے لائن کراسورس کا استعمال کرتی ہے ، اور جب مخصوص معیار کے ساتھ سگنل فلٹر کرنے کے بعد رجحان واضح ہوتا ہے تو طویل یا مختصر تجارت کرتی ہے۔ یہ رجحان کی پیروی کرنے والی حکمت عملی کی قسم سے تعلق رکھتی ہے۔
صارف اپنی مرضی کے مطابق backtest وقت کی حد ان پٹ.
ہائکن آشی موم بتیاں یا عام موم بتیاں استعمال کریں۔
اپ ٹرینڈ کے لئے سست، تیز اور اختیاری تیسری ایم اے لائن کی وضاحت کریں۔
ہر ایم اے لائن کے لئے ایم اے کی قسم، ٹائم فریم اور پیرامیٹرز کو اپنی مرضی کے مطابق بنائیں.
طویل سگنل جب تیز رفتار ایم اے سست ایم اے کے اوپر عبور کرتا ہے، مختصر سگنل جب نیچے عبور کرتا ہے۔
اختیاری طور پر صرف لمبا جب بند تیسری ایم اے لائن سے اوپر ہو۔
خودکار تجارت کے لئے حکمت عملی.انٹری کا استعمال کریں.
تجارت کا مقررہ سائز یا اکاؤنٹ فی صد کی بنیاد پر حساب لگائیں۔
ایم ٹی ایف کی ساخت کا استعمال کرتا ہے، ہر ایم اے کے پاس ٹائم فریم میں رجحانات کی نشاندہی کرنے کے لئے اپنا ٹائم فریم ہوتا ہے۔
اپنی مرضی کے مطابق ایم اے اقسام، استحکام کے لئے ہموار ایم اے یا ردعمل کے لئے فاسٹ ایم اے استعمال کرسکتے ہیں.
Heikin-Ashi جھوٹے فرار فلٹر.
اختیاری تیسری ایم اے لائن فلٹر whipsaws.
لچکدار ایم اے کی مدت مختلف مارکیٹ کے ماحول کے مطابق ہے.
strategy.entry ماڈیول ٹریڈنگ کو خودکار کرتا ہے۔
بیک ٹیسٹ کی اصلاح بہترین پیرامیٹرز تلاش کرتی ہے۔
ایم اے کراس غلط سگنلز کا شکار ہوتے ہیں ، جس سے غیر ضروری تجارت ہوتی ہے۔ ادوار کو بہتر بنا سکتے ہیں یا فلٹر شامل کرسکتے ہیں۔
وِپساؤز ہلکی مارکیٹوں میں نقصانات کا سبب بنتے ہیں۔ ایم اے کے فاصلے کو بڑھا سکتے ہیں یا ادوار کو بڑھا سکتے ہیں۔
تجارت کا مقررہ سائز خطرے کو کنٹرول نہیں کرتا ہے۔ اکاؤنٹ کے سائز کا فیصد غور کریں۔
فیس اور سلائپ بھی منافع کو متاثر کرتی ہے۔ جیت کی شرح کافی زیادہ یقینی بنائیں۔
استحکام اور ردعمل کے بہترین امتزاج کے لئے مختلف ایم اے اقسام کا تجربہ کریں۔
رجحان کی نشاندہی اور حساسیت کو متوازن کرنے کے لئے ایم اے کی مدت کو بہتر بنائیں.
داخلے کے حالات کو بہتر بنائیں، مضبوط اپ ٹرینڈ فلٹرز پر غور کریں۔
مخصوص مصنوعات کے لئے اوقات کو بہتر بنائیں۔
فلٹر کے طور پر دیگر اشارے شامل کریں، مثال کے طور پر حجم.
کارکردگی کو زیادہ سے زیادہ کرنے کے لئے بیک ٹیسٹ کے اعداد و شمار پر پیرامیٹر کی اصلاح.
ایم ٹی ایف ایم اے کراس اوور کی حکمت عملی ایک عام رجحان کے بعد کا نظام ہے۔ فوائد میں سادگی ، لچک اور موافقت شامل ہے۔ لیکن غلط سگنل ایک خطرہ ہیں۔ پیرامیٹرز اور فلٹرز کو بیک ٹیسٹنگ کے ذریعے بہترین امتزاج تلاش کرنے کے لئے بہتر بنایا جاسکتا ہے۔ رجحان سازی کی منڈیوں کے لئے زیادہ موزوں ہے۔ ہچکچاہٹ کے حالات کے دوران محتاط طریقے سے استعمال کریں یا تجارت کو روکیں۔ روایتی رجحان کے بعد کی تکنیک کے طور پر ، ایم ٹی ایف ایم اے کراس اوورز اب بھی سرشار تحقیق اور درخواست کے قابل ہیں۔
/*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())