ڈبل موونگ ایوریج کراس اوور حکمت عملی


تخلیق کی تاریخ: 2023-12-13 15:51:13 آخر میں ترمیم کریں: 2023-12-13 15:51:13
کاپی: 0 کلکس کی تعداد: 1316
1
پر توجہ دیں
1621
پیروکار

ڈبل موونگ ایوریج کراس اوور حکمت عملی

جائزہ

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

حکمت عملی کا اصول

ڈبل مساوی کراس پوائنٹس کی حکمت عملی کے لئے حساب کتاب کا فارمولا مندرجہ ذیل ہے: فوری لائن ((ہل اوسط لائن): WMA ((2 * WMA ((قیمت ، n/2) - WMA ((قیمت ، n) ، SQRT ((n))
سست لائن ((Super Smoother): قیمت تین بار فلٹر

ان میں سے، WMA ایک وزن میں منتقل اوسط ہے، SQRT کھلے مربع جڑ ہے، اور فلٹر میں ایک مرحلے میں تاخیر اور دو مرحلے میں تاخیر شامل ہیں.

حکمت عملی تیز اور سست لائنوں کی قیمتوں کا حساب کرکے دونوں لائنوں کے مابین کراس ریلیشن شپ کا تعین کرتی ہے ، جس میں:
تیز لائن پر سست لائن کو خریدنے کے لئے سگنل سست لائن کے ذریعے تیز لائن کے نیچے سگنل بیچنا

طاقت کا تجزیہ

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

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

خطرے کا تجزیہ

اس کے علاوہ، دوہری مساوی کراسنگ پوائنٹس کی حکمت عملی میں کچھ خطرات بھی ہیں:

  1. زلزلے کے حالات میں ، زیادہ سے زیادہ whipsaw سگنل ہوسکتے ہیں۔ غلط سگنل کو کم کرنے کے لئے اوسط لائن کے فاصلے کو مناسب طریقے سے وسیع کیا جاسکتا ہے۔
  2. ڈبل یکساں فاصلے کو وسیع کرنے سے کچھ مواقع ضائع ہوجاتے ہیں۔ سگنل کی تعداد اور معیار کو متوازن کرنا ہوگا۔
  3. یہ حکمت عملی واضح تر رجحانات کے لئے موزوں ہے اور اعلی اتار چڑھاؤ والی مصنوعات کے لئے موزوں نہیں ہے۔

اصلاح کی سمت

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

  1. اوسط لائن پیرامیٹرز کو مختلف ادوار اور اتار چڑھاو کی شدت کے مطابق بنائیں۔
  2. whipsaw کو کم کرنے کے لئے رجحان کے معیار کا تعین کرنے کے لئے اضافی اشارے یا فلٹر شامل کریں۔
  3. رجحان اشارے کے ساتھ مل کر پوزیشن کی تعمیر کے تناسب کو بہتر بنائیں۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//

strategy(title='Open Close Cross Strategy ', shorttitle='sacinvesting', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)

// === INPUTS ===
useRes = input(defval=true, title='Use Alternate Resolution?')
intRes = input(defval=3, title='Multiplier for Alernate Resolution')
stratRes = timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes, '###M') : timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes, '###W') : timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes, '###D') : timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes, '####') : '60'
basisType = input.string(defval='SMMA', title='MA Type: ', options=['SMA', 'EMA', 'DEMA', 'TEMA', 'WMA', 'VWMA', 'SMMA', 'HullMA', 'LSMA', 'ALMA', 'SSMA', 'TMA'])
basisLen = input.int(defval=8, title='MA Period', minval=1)
offsetSigma = input.int(defval=6, title='Offset for LSMA / Sigma for ALMA', minval=0)
offsetALMA = input.float(defval=0.85, title='Offset for ALMA', minval=0, step=0.01)
scolor = input(false, title='Show coloured Bars to indicate Trend?')
delayOffset = input.int(defval=0, title='Delay Open/Close MA (Forces Non-Repainting)', minval=0, step=1)
tradeType = input.string('BOTH', title='What trades should be taken : ', options=['LONG', 'SHORT', 'BOTH', 'NONE'])
// === /INPUTS ===

// Constants colours that include fully non-transparent option.
green100 = #008000FF
lime100 = #00FF00FF
red100 = #FF0000FF
blue100 = #0000FFFF
aqua100 = #00FFFFFF
darkred100 = #8B0000FF
gray100 = #808080FF

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = ta.sma(src, len)  // Simple
    v2 = ta.ema(src, len)  // Exponential
    v3 = 2 * v2 - ta.ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len)  // Triple Exponential
    v5 = ta.wma(src, len)  // Weighted
    v6 = ta.vwma(src, len)  // Volume Weighted
    v7 = 0.0
    sma_1 = ta.sma(src, len)  // Smoothed
    v7 := na(v7[1]) ? sma_1 : (v7[1] * (len - 1) + src) / len
    v8 = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))  // Hull
    v9 = ta.linreg(src, len, offSig)  // Least Squares
    v10 = ta.alma(src, len, offALMA, offSig)  // Arnaud Legoux
    v11 = ta.sma(v1, len)  // Triangular (extreme smooth)
    // SuperSmoother filter
    // ©️ 2013 John F. Ehlers
    a1 = math.exp(-1.414 * 3.14159 / len)
    b1 = 2 * a1 * math.cos(1.414 * 3.14159 / len)
    c2 = b1
    c3 = -a1 * a1
    c1 = 1 - c2 - c3
    v12 = 0.0
    v12 := c1 * (src + nz(src[1])) / 2 + c2 * nz(v12[1]) + c3 * nz(v12[2])
    type == 'EMA' ? v2 : type == 'DEMA' ? v3 : type == 'TEMA' ? v4 : type == 'WMA' ? v5 : type == 'VWMA' ? v6 : type == 'SMMA' ? v7 : type == 'HullMA' ? v8 : type == 'LSMA' ? v9 : type == 'ALMA' ? v10 : type == 'TMA' ? v11 : type == 'SSMA' ? v12 : v1

// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = request.security(syminfo.tickerid, res, exp, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
    use ? security_1 : exp

// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
closeSeries = variant(basisType, close[delayOffset], basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open[delayOffset], basisLen, offsetSigma, offsetALMA)
// === /SERIES ===

// === PLOTTING ===

// Get Alternate resolution Series if selected.
closeSeriesAlt = reso(closeSeries, useRes, stratRes)
openSeriesAlt = reso(openSeries, useRes, stratRes)
//
trendColour = closeSeriesAlt > openSeriesAlt ? color.green : color.red
bcolour = closeSeries > openSeriesAlt ? lime100 : red100
barcolor(scolor ? bcolour : na, title='Bar Colours')
closeP = plot(closeSeriesAlt, title='Close Series', color=trendColour, linewidth=2, style=plot.style_line, transp=20)
openP = plot(openSeriesAlt, title='Open Series', color=trendColour, linewidth=2, style=plot.style_line, transp=20)
fill(closeP, openP, color=trendColour, transp=80)

// === /PLOTTING ===
//
//
// === ALERT conditions
xlong = ta.crossover(closeSeriesAlt, openSeriesAlt)
xshort = ta.crossunder(closeSeriesAlt, openSeriesAlt)
longCond = xlong  // alternative: longCond[1]? false : (xlong or xlong[1]) and close>closeSeriesAlt and close>=open
shortCond = xshort  // alternative: shortCond[1]? false : (xshort or xshort[1]) and close<closeSeriesAlt and close<=open
// === /ALERT conditions.

// === STRATEGY ===
// stop loss
slPoints = input.int(defval=0, title='Initial Stop Loss Points (zero to disable)', minval=0)
tpPoints = input.int(defval=0, title='Initial Target Profit Points (zero for disable)', minval=0)
// Include bar limiting algorithm
ebar = input.int(defval=10000, title='Number of Bars for Back Testing', minval=0)
dummy = input(false, title='- SET to ZERO for Daily or Longer Timeframes')
//
// Calculate how many mars since last bar
tdays = (timenow - time) / 60000.0  // number of minutes since last bar
tdays := timeframe.ismonthly ? tdays / 1440.0 / 5.0 / 4.3 / timeframe.multiplier : timeframe.isweekly ? tdays / 1440.0 / 5.0 / timeframe.multiplier : timeframe.isdaily ? tdays / 1440.0 / timeframe.multiplier : tdays / timeframe.multiplier  // number of bars since last bar
//
//set up exit parameters
TP = tpPoints > 0 ? tpPoints : na
SL = slPoints > 0 ? slPoints : na

// Make sure we are within the bar range, Set up entries and exit conditions
if (ebar == 0 or tdays <= ebar) and tradeType != 'NONE'
    strategy.entry('long', strategy.long, when=longCond == true and tradeType != 'SHORT')
    strategy.entry('short', strategy.short, when=shortCond == true and tradeType != 'LONG')
    strategy.close('long', when=shortCond == true and tradeType == 'LONG')
    strategy.close('short', when=longCond == true and tradeType == 'SHORT')
    strategy.exit('XL', from_entry='long', profit=TP, loss=SL)
    strategy.exit('XS', from_entry='short', profit=TP, loss=SL)

// === /STRATEGY ===
// eof