دوہری حرکت پذیر اوسط کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-12 14:59:18
ٹیگز:

img

جائزہ

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

اصول

اس حکمت عملی کے بنیادی اشارے دو ای ایم اے لائنز ہیں ، ایک 30 مدت اور دوسرا 60 مدت ہے۔ دو ای ایم اے لائنز کوڈ میں کسٹم افعال کے ذریعہ شمار کیا جاتا ہے۔

emaLen1 = emaFuncOne(close, lenMA1)
emaLen2 = emaFuncTwo(close, lenMA2)  

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

currentState = if emaLen2 > emaLen1
    0
else 
    1

previousState = if emaLastLen2 > emaLastLen1 
    0
else
    1

convergence = if currentState != previousState
    1  
else
    0

جب مختصر مدت ای ایم اے طویل مدت ای ایم اے کو عبور کرتا ہے ، موجودہ حالت پچھلے حالت کے برابر نہیں ہے ، ایک کراس اوور سگنل ٹرگر ہوتا ہے ، طویل ہوجاتا ہے۔ جب مختصر مدت EMA طویل مدت EMA سے نیچے عبور کرتا ہے ، currentState پچھلےState کے برابر نہیں ہے ، ایک کراس اوور سگنل ٹرگر ہوتا ہے ، مختصر ہوجاتا ہے۔

فوائد کا تجزیہ

اس حکمت عملی کے فوائد یہ ہیں:

  1. منطق سادہ اور بدیہی ہے، سمجھنے اور لاگو کرنے میں آسان ہے
  2. ای ایم اے کے ساتھ قیمتوں کے اتار چڑھاؤ کو ہموار کرتا ہے اور مارکیٹ شور کو فلٹر کرتا ہے
  3. خود کار طریقے سے رجحانات کی پیروی کرتا ہے، لاپتہ تجارت سے بچتا ہے

خطرے کا تجزیہ

اس حکمت عملی کے ساتھ کچھ خطرات بھی ہیں:

  1. کراس اوور سگنل تاخیر کا شکار ہوسکتے ہیں اور بروقت طریقے سے الٹ پھیرنے میں ناکام ہوسکتے ہیں
  2. Whipsaw سگنل کی حد کے بازاروں کے دوران کثرت سے واقع ہو سکتا ہے
  3. ناقص پیرامیٹر کی ترتیب سے حساسیت یا تاخیر کا سبب بن سکتا ہے

آپٹیمائزیشن EMA مدت کو ایڈجسٹ کرکے یا فلٹرز کو شامل کرکے کیا جا سکتا ہے.

اصلاح کی ہدایات

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

  1. مختلف EMA مدت کے مجموعے کی جانچ کریں
  2. غلط سگنل کو کم کرنے کے لئے حجم یا اتار چڑھاؤ فلٹر شامل کریں
  3. رجحانات کی تصدیق کے لئے MACD جیسے دیگر اشارے شامل کریں
  4. سٹاپ نقصان اور منافع لے کر پیسے کے انتظام کو بہتر بنائیں

نتیجہ

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


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("ParkerMAStrat", overlay=true)

lenMA1=input(title="Length 1", defval=30)
lenMA2=input(title="Length 2",  defval=60)

x = 0

checkLines(current, last) =>

    if current > last
        x = 1
    else
        x = 0
    x
    

//plot ema based on len1
emaFuncOne(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[1])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function

emaLen1 = emaFuncOne(close, lenMA1)

    
plot(emaLen1, color=green, transp=0, linewidth=2)
// now we plot the _10_period_ema

//plot ema based on len2
emaFuncTwo(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[1])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function

//plot ema based on len2
emaFuncOneLast(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[0])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function

//plot ema based on len2
emaFuncTwoLast(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[0])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function



emaLastLen1 = emaFuncOneLast(close, lenMA1)
emaLastLen2 = emaFuncTwoLast(close, lenMA2)
emaLen2 = emaFuncTwo(close, lenMA2)

    
plot(emaLen2, color=red, transp=30, linewidth=2)
// now we plot the _10_period_ema

//now we compare the two and when green crosses red we buy/sell (line1 vs line2)

previousState = if emaLastLen2 > emaLastLen1
    0
else
    1

currentState = if emaLen2 > emaLen1
    0
else
    1

convergence = if currentState != previousState
    1
else
    0

    
lineCheck = if convergence == 1 
    checkLines(currentState, previousState)
    
if lineCheck == 1
    strategy.entry("Long", strategy.long)
else
    strategy.entry("Short", strategy.short)


مزید