متحرک ٹریلنگ اسٹاپ لانگ صرف رجحان کی پیروی کرنے والی حکمت عملی کے ساتھ موسمی فلٹر

مصنف:چاؤ ژانگ، تاریخ: 2024-02-27 14:01:56
ٹیگز:

img

جائزہ

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

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

  1. یہ حکمت عملی صرف مخصوص تجارتی دنوں (پیر سے جمعہ) اور تجارتی اوقات (مقامی وقت کے مطابق ڈیفالٹ 9:30 بجے سے 8:30 بجے تک) میں تجارت کرتی ہے۔

  2. جب ADX 27 سے اوپر ہوتا ہے تو ، اس سے یہ اشارہ ہوتا ہے کہ مارکیٹ رجحان میں ہے۔ اگر +DI -DI سے اوپر عبور کرتا ہے تو ، ایک لمبا اشارہ پیدا ہوتا ہے۔

  3. پوزیشن کھولنے کے بعد اسٹاپ نقصان کو اندراج کی قیمت سے 5.5x اے ٹی آر پر مقرر کیا جاتا ہے، اور یہ منافع میں مقفل کرنے کے لئے قیمت میں اضافے کے ساتھ ساتھ اوپر کی طرف بڑھتا ہے۔

  4. اختیاری طور پر، ایس اینڈ پی 500 کے موسمی نمونوں کو فعال کیا جاتا ہے، تاکہ تجارت صرف تاریخی طور پر تیزی کے ادوار کے دوران ہی ہو.

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

  1. رجحان میٹرکس اور سٹاپ نقصان کو یکجا کرنے سے مؤثر طریقے سے رجحانات پر سوار ہونے اور ہر تجارت میں نقصان کو کنٹرول کرنے میں مدد ملتی ہے۔

  2. تجارتی اوقات اور موسمی فلٹر غیر معمولی اتار چڑھاؤ سے بچنے اور جھوٹے سگنل کو کم کرنے میں مدد کرتے ہیں۔

  3. ڈی ایم آئی اور اے ٹی آر مقدار کی اصلاح کے لئے موزوں پیرامیٹر ٹیوننگ میں لچک کے ساتھ پختہ تکنیکی اشارے ہیں۔

خطرے کا تجزیہ

  1. غلط ڈی ایم آئی اور اے ٹی آر پیرامیٹرز بہت زیادہ یا بہت کم سگنل کا باعث بن سکتے ہیں۔ پیرامیٹر ٹیوننگ کی ضرورت ہے۔

  2. سٹاپ نقصان بہت وسیع سیٹ غیر ضروری رکاوٹوں کا سبب بن سکتا ہے. بہت تنگ سیٹ نقصانات کو کنٹرول کرنے میں ناکام ہو سکتا ہے.

  3. تجارتی اوقات اور موسمیاتی قوانین کچھ منافع بخش مواقع کو فلٹر کرسکتے ہیں۔ فلٹر اثر کا اندازہ لگانے کی ضرورت ہے۔

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

  1. داخلہ اور باہر نکلنے کے قوانین کے لئے MACD، بولنگر بینڈ جیسے دیگر اشارے کو یکجا کرنے پر غور کریں.

  2. سٹاپ نقصان یا سٹاپ نقصان کے پیمانے کی متحرک ایڈجسٹمنٹ کے لئے مختلف ATR ضربوں کا تجربہ کریں.

  3. تجارتی اوقات کو ایڈجسٹ کرنے کا ٹیسٹ کریں، یا موسمی داخلہ اور باہر نکلنے کی تاریخوں کو بہتر بنائیں.

  4. آٹو ٹون پیرامیٹرز کے لئے مشین سیکھنے کے طریقوں کو لاگو کرنے کی کوشش کریں.

نتیجہ

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


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

//@version=5
strategy(title="DMI Strategy with ADX and ATR-based Trailing SL (Long Only) and Seasonality", shorttitle="MBV-SP500-CLIMBER", overlay=true)

// Eingabeparameter für Long-Positionen
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
adxLongThreshold = input.float(27.0, title="ADX Threshold for Long", minval=0)
atrLength = input.int(14, title="ATR Length")
atrLongMultiplier = input.float(5.5, title="ATR Multiplier for Trailing SL (Long)")

startTimeHH = input.int(09, title="startTime hh")
startTimeMM = input.int(30, title="startTime mm")

endTimeHH = input.int(20, title="endTime hh")
endTimeMM = input.int(30, title="endTime mm")

// Zeitzone des Nutzers als Eingabeparameter
timezoneOffset = input.int(1, title="Timezone Offset (Hours from UTC)", minval=-12, maxval=14)


// Zusätzliche Einstellung für SP500-Saisonalität
enableSeasonality = input.bool(false, title="Enable SP500 Seasonality")
seasonColor = color.new(color.blue, 90)
activeTimeColor = color.new(color.yellow, 90) // Farbe für aktive Handelszeiten

// Handelstage und -zeiten
tradeMonday = input.bool(true, title="Trade on Monday")
tradeTuesday = input.bool(true, title="Trade on Tuesday")
tradeWednesday = input.bool(true, title="Trade on Wednesday")
tradeThursday = input.bool(true, title="Trade on Thursday")
tradeFriday = input.bool(true, title="Trade on Friday")

// Konvertierung der Uhrzeit in Unix-Zeitstempel
getUnixTime(hour, minute) =>
    adjustedHour = hour - timezoneOffset
    sessionDate = timestamp(year, month, dayofmonth, 0, 0)
    sessionDate + adjustedHour * 60 * 60000 + minute * 60000

// Start- und Endzeit als Unix-Zeitstempel
// + 1 Stunde wegen UTC
startTime = getUnixTime(startTimeHH, startTimeMM)
endTime = getUnixTime(endTimeHH, endTimeMM)


// Überprüfen, ob der aktuelle Zeitpunkt innerhalb der Handelszeit liegt
isTradingTime() => true

// Saisonale Zeiträume definieren
isSeason(time) =>
    m = month(time)
    d = dayofmonth(time)
    (m == 1 and d >= 1) or (m == 2 and d <= 15) or (m == 3 and d >= 23) or (m == 4 and d <= 17) or (m == 5 and d >= 12) or (m == 6 and d >= 27 and d <= 8) or (m == 7 and d <= 29) or (m == 10 and d >= 15) or (m == 11 and d >= 1) or (m == 12 and d <= 2) or (m == 12 and d >= 20 and d <= 27)

// Hintergrundfarbe für saisonale Bereiche und aktive Handelszeiten
bgcolor(enableSeasonality and isSeason(time) ? seasonColor : na)
bgcolor(isTradingTime() ? color.new(activeTimeColor, 90) : na)

// Berechnung von +DM, -DM, ATR
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
atr = ta.atr(atrLength)

// Berechnung von +DI, -DI und ADX
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)

// Logik für LONG Signale unter Berücksichtigung der Saisonalität und Zeitfilter
longSignal = ta.crossover(adx, adxLongThreshold) and plus > minus and isTradingTime()
longSignal := longSignal and (not enableSeasonality or (enableSeasonality and isSeason(time)))


// Variable für Trailing Stop-Loss
var float longTrailingSL = na

// Variablen für die Eröffnungszeit und den Eröffnungspreis der Position
var int openBarIndex = na
var float openPrice = na

// Handelslogik für Long-Positionen
// ohne strategy.position_size == 0 gilt die Kondition für ALLE Signale und nicht nur für das erste
if (longSignal and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
    openBarIndex := bar_index
    openPrice := close
    longTrailingSL := close - atr * atrLongMultiplier

//if (longSignal)
   //longTrailingSL := close - atr * atrLongMultiplier

// Aktualisierung des Trailing Stop-Loss
if strategy.position_size > 0
    longTrailingSL := math.max(longTrailingSL, close - atr * atrLongMultiplier)

// Ausstieg aus Long-Positionen
strategy.exit("Close Long", "Long", stop=longTrailingSL)

// Anzeige des ATR-basierten Trailing Stops für Long-Positionen
//plot(strategy.position_size > 0 ? longTrailingSL : na, color=color.red, title="ATR Trailing Stop Long")

// Anzeige des ATR-basierten Trailing Stops für Long-Positionen
plot(strategy.position_size > 0 ? longTrailingSL : na, color=color.new(color.red, 75), style=plot.style_circles, linewidth=1, title="Trailing Stop-Loss")


// Wenn eine Position geschlossen wird, zeichnen Sie die Linie
// if strategy.position_size[1] > 0 and strategy.position_size == 0
//     lineColor = longTrailingSL > openPrice ? color.new(color.green, 50) : color.new(color.red, 50) // Hellgrün für Gewinne, Hellrot für Verluste
//     line.new(openBarIndex, openPrice, bar_index, longTrailingSL, width=3, color=lineColor)


مزید