ڈبل موونگ ایوریج کراس اوور حکمت عملی ایک عام رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ مختلف ادوار کے ساتھ دو ای ایم اے لائنوں کا استعمال کرتی ہے اور جب مختصر مدت کی ای ایم اے طویل مدت کی ای ایم اے کو عبور کرتی ہے تو طویل ہوجاتی ہے اور جب مخالف کراسنگ ہوتی ہے تو مختصر ہوجاتی ہے۔
اس حکمت عملی کے بنیادی اشارے دو ای ایم اے لائنز ہیں ، ایک 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 کے برابر نہیں ہے ، ایک کراس اوور سگنل ٹرگر ہوتا ہے ، مختصر ہوجاتا ہے۔
اس حکمت عملی کے فوائد یہ ہیں:
اس حکمت عملی کے ساتھ کچھ خطرات بھی ہیں:
آپٹیمائزیشن EMA مدت کو ایڈجسٹ کرکے یا فلٹرز کو شامل کرکے کیا جا سکتا ہے.
اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
ڈبل موونگ ایوریج کراس اوور حکمت عملی ایک سادہ اور عملی رجحان کے بعد کا نظام ہے۔ یہ سیدھا ہے ، لاگو کرنا آسان ہے اور خود بخود رجحانات کو ٹریک کرسکتا ہے۔ لیکن کچھ خطرات جیسے تاخیر اور غلط سگنل موجود ہیں۔ پیرامیٹر ٹیوننگ اور فلٹرز کا اضافہ کرکے ، اسے مزید بہتر بنایا جاسکتا ہے تاکہ یہ بنیادی الگورتھمک تجارتی حکمت عملیوں میں سے ایک بن جائے۔
/*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)