کثیر مدتی ایس ایم اے پر مبنی حکمت عملی کے بعد رجحان

مصنف:چاؤ ژانگ، تاریخ: 2024-02-04 14:50:24
ٹیگز:

img

جائزہ

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

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

  1. 5 ایس ایم اے لائنز استعمال کریں جن کی مدت بالترتیب 10، 20، 50، 100 اور 200 ہے۔
  2. رجحان کا تعین کرنے کے لئے ان 5 ایس ایم اے کی سمتوں کا موازنہ کریں۔ مثال کے طور پر ، جب 10 ، 20 ، 100 اور 200 پیریڈ ایس ایم اے ایک ساتھ بڑھ رہے ہیں تو ، یہ ایک بڑھتی ہوئی رجحان کی نشاندہی کرتا ہے؛ جب وہ سب گر رہے ہیں تو ، یہ نیچے کی طرف رجحان کی نشاندہی کرتا ہے۔
  3. تجارتی سگنل پیدا کرنے کے لئے مختلف ادوار کے ساتھ ایس ایم اے کی اقدار کا موازنہ کریں۔ مثال کے طور پر ، جب 10 پیریڈ ایس ایم اے 20 پیریڈ ایس ایم اے سے عبور کرتا ہے تو ، طویل ہوجائیں۔ جب 10 ایس ایم اے 20 ایس ایم اے سے نیچے عبور کرتا ہے تو ، مختصر ہوجائیں۔
  4. داخلہ کی تصدیق اور باہر نکلنے کے اشارے کے لئے زیرو لیگیما کا استعمال کریں۔ جب تیز زیرو لیگیما سست زیرو لیگیما سے عبور کرتا ہے تو لمبا ہوجائیں ، جب یہ نیچے سے عبور کرتا ہے تو لمبا ہوجائیں۔ شارٹس کے لئے فیصلے کی منطق اس کے برعکس ہے۔

فوائد

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

خطرات اور حل

  1. جب مارکیٹ کو مستحکم کیا جاتا ہے، تو اکثر SMA کراسورز اضافی نقصانات کا سبب بن سکتے ہیں.
    • حل: غلط سگنل اندراجات سے بچنے کے لئے ZeroLagEMA فلٹر میں اضافہ کریں۔
  2. متعدد مدت کے ایس ایم اے کو دیکھتے ہوئے کچھ تاخیر کا سامنا کرنا پڑتا ہے، مختصر مدت کی قیمتوں میں تیزی سے تبدیلیوں کا فوری طور پر جواب دینے میں ناکام.
    • حل: فیصلے میں مدد کے لئے MACD جیسے تیز اشارے شامل کریں۔

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

  1. بہترین مجموعہ تلاش کرنے کے لئے SMA مدت پیرامیٹرز کو بہتر بنائیں.
  2. مزید نقصانات کو محدود کرنے کے لئے ٹریلنگ سٹاپ جیسی سٹاپ نقصان کی حکمت عملی شامل کریں.
  3. مضبوط رجحانات میں شرط بڑھانے اور استحکام میں شرط کم کرنے کے لئے پوزیشن سائزنگ میکانزم شامل کریں.
  4. مجموعی استحکام کو بہتر بنانے کے لئے MACD اور KDJ جیسے مزید معاون اشارے شامل کریں۔

نتیجہ

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


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Forex MA Racer - SMA Performance /w ZeroLag EMA Trigger", shorttitle = "FX MA Racer (5x SMA, 2x zlEMA)", overlay=false )

// === INPUTS ===
hr0             = input(defval = true, title = "=== SERIES INPUTS ===")
smaSource       = input(defval = close, title = "SMA Source")
sma1Length      = input(defval = 10, title = "SMA 1 Length")
sma2Length      = input(defval = 20, title = "SMA 2 Length")
sma3Length      = input(defval = 50, title = "SMA 3 Length")
sma4Length      = input(defval = 100, title = "SMA 4 Length")
sma5Length      = input(defval = 200, title = "SMA 5 Length")
smaDirSpan      = input(defval = 4, title = "SMA Direction Span")
zlmaSource      = input(defval = close, title = "ZeroLag EMA Source")
zlmaFastLength  = input(defval = 9, title = "ZeroLag EMA Fast Length")
zlmaSlowLength  = input(defval = 21, title = "ZeroLag EMA Slow Length")
hr1             = input(defval = true, title = "=== PLOT TIME LIMITER ===")
useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
// set up where we want to run from
startYear       = input(defval = 2018, title = "Start From Year", minval = 0, step = 1)
startMonth      = input(defval = 02, title = "Start From Month", minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
hr2             = input(defval = true, title = "=== TRAILING STOP ===")
useStop     = input(defval = false, title = "Use Trailing Stop?")
slPoints    = input(defval = 200, title = "Stop Loss Trail Points", minval = 1)
slOffset    = input(defval = 400, title = "Stop Loss Trail Offset", minval = 1)
// === /INPUTS ===

// === SERIES SETUP ===
// Fast ZeroLag EMA
zema1=ema(zlmaSource, zlmaFastLength)
zema2=ema(zema1, zlmaFastLength)
d1=zema1-zema2
zlemaFast=zema1+d1

// Slow ZeroLag EMA
zema3=ema(zlmaSource, zlmaSlowLength)
zema4=ema(zema3, zlmaSlowLength)
d2=zema3-zema4
zlemaSlow=zema3+d2

// Simple Moving Averages
period10 = sma(close, sma1Length)
period20 = sma(close, sma2Length)
period50 = sma(close, sma3Length)
period100 = sma(close, sma4Length)
period200 = sma(close, sma5Length)
// === /SERIES SETUP ===

// === PLOT ===
// colors of plotted MAs
p1 = (close < period10) ? #FF0000 : #00FF00
p2 = (close < period20) ? #FF0000 : #00FF00
p3 = (close < period50) ? #FF0000 : #00FF00
p4 = (close < period100) ? #FF0000 : #00FF00
p5 = (close < period200) ? #FF0000 : #00FF00

plot(period10, title='10 Period', color = p1, linewidth=1)
plot(period20, title='20 Period', color = p2, linewidth=2)
plot(period50, title='50 Period', color = p3, linewidth=4)
plot(period100, title='100 Period', color = p4, linewidth=6)
plot(period200, title='200 Period', color = p5, linewidth=10)
// === /PLOT ===

//BFR = BRFIB ? (maFast+maSlow)/2 : abs(maFast - maSlow)

// === STRATEGY ===
// calculate SMA directions
direction10 = rising(period10, smaDirSpan) ? +1 : falling(period10, smaDirSpan) ? -1 : 0
direction20 = rising(period20, smaDirSpan) ? +1 : falling(period20, smaDirSpan) ? -1 : 0
direction50 = rising(period50, smaDirSpan) ? +1 : falling(period50, smaDirSpan) ? -1 : 0
direction100 = rising(period100, smaDirSpan) ? +1 : falling(period100, smaDirSpan) ? -1 : 0
direction200 = rising(period200, smaDirSpan) ? +1 : falling(period200, smaDirSpan) ? -1 : 0

// conditions
// SMA Direction Trigger
dirUp = direction10 > 0 and direction20 > 0 and direction100 > 0 and direction200 > 0
dirDn = direction10 < 0 and direction20 < 0 and direction100 < 0 and direction200 < 0

longCond = (period10>period20) and (period20>period50) and (period50>period100) and  dirUp//and (close > period10) and (period50>period100) //and (period100>period200)
shortCond = (period10<period20) and (period20<period50) and dirDn//and (period50<period100) and (period100>period200)

longExit = crossunder(zlemaFast, zlemaSlow) or crossunder(period10, period20)
shortExit = crossover(zlemaFast, zlemaSlow) or crossover(period10, period20)


// entries and exits
startTimeOk() =>
    // get our input time together
    inputTime   = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    // check the current time is greater than the input time and assign true or false
    timeOk      = time > inputTime ? true : false
    // last line is the return value, we want the strategy to execute if..
    // ..we are using the limiter, and the time is ok -OR- we are not using the limiter
    r = (useTimeLimit and timeOk) or not useTimeLimit


if( true )
    // entries
    strategy.entry("long", strategy.long, when = longCond)
    strategy.entry("short", strategy.short, when = shortCond)

        
    // trailing stop
    if (useStop)
        strategy.exit("XL", from_entry = "long", trail_points = slPoints, trail_offset = slOffset)
        strategy.exit("XS", from_entry = "short", trail_points = slPoints, trail_offset = slOffset)

    // exits
    strategy.close("long", when = longExit)
    strategy.close("short", when = shortExit)
// === /STRATEGY ===

مزید