
یہ حکمت عملی متحرک متحرک اشارے ((DMI) پر مبنی ہے جس میں صرف ایک کثیر سر کی لمبی لائن حکمت عملی ڈیزائن کی گئی ہے ، جبکہ اوسط حقیقی طول موج ((ATR) کے ساتھ مل کر نقصان کے خطرے کو کنٹرول کرنے کے لئے تعاقب کی روک تھام کی گئی ہے۔ مزید اصلاح کے ل the ، اس حکمت عملی میں ٹریڈنگ کے اوقات اور ایس ٹی پی 500 انڈیکس کی موسمی فلٹرنگ شرائط بھی شامل ہیں ، جس میں کچھ فوائد ہیں۔
یہ حکمت عملی صرف مخصوص ٹریڈنگ کے دنوں ((پیر سے جمعہ) اور ٹریڈنگ کے اوقات ((پہلے سے طے شدہ مقامی وقت 9:30-20:30) پر پوزیشن کھولتی ہے۔
جب ADX 27 سے بڑا ہوتا ہے تو ، اس کا مطلب ہے کہ قیمت کی رجحان کی حالت میں ہے۔ اس وقت اگر +DI لائن پر DI لائن ٹوٹ جاتی ہے تو ، ایک کثیر سگنل پیدا ہوتا ہے۔
اسٹاپ نقصان کی حد کو 5.5 گنا اے ٹی آر کے ساتھ مقرر کیا گیا ہے ، اور اسٹاپ نقصان کی لائن قیمتوں میں اضافے کے ساتھ بڑھتی ہے ، جس سے منافع کو یقینی بنایا جاتا ہے۔
اسٹینڈرڈ 500 انڈیکس کے موسمی اصول کو اختیاری طور پر لاگو کریں ، اور صرف ان اوقات میں پوزیشن کھولیں جو تاریخ میں بہتر کارکردگی کا مظاہرہ کرتے ہیں۔
رجحان کے اشارے اور روکنے والے نقصان کے طریقہ کار کے ساتھ مل کر ، یہ رجحانات کو مؤثر طریقے سے ٹریک کرنے اور ہر پوزیشن کے نقصان کو کنٹرول کرنے کے قابل ہے۔
ٹریڈنگ کے اوقات اور موسمی فلٹرنگ کی شرائط کا استعمال کرتے ہوئے ، مارکیٹ میں غیر معمولی اتار چڑھاو کے دور سے بچنے اور غلط اطلاع کی شرح کو کم کرنے کے لئے۔
ڈی ایم آئی اور اے ٹی آر دونوں پختہ تکنیکی اشارے ہیں ، پیرامیٹرز کو لچکدار انداز میں ایڈجسٹ کیا جاسکتا ہے ، جس میں مقداری اصلاح کے لئے موزوں ہے۔
ڈی ایم آئی اور اے ٹی آر پیرامیٹرز کی غلط ترتیب سے سگنل زیادہ یا کم ہوسکتے ہیں۔ پیرامیٹرز کو جانچنے کے لئے ایڈجسٹ کرنے کی ضرورت ہے۔
سٹاپ نقصان کی حد اس حد تک بڑھائی گئی ہے کہ اس سے غیر ضروری نقصان کا سبب بن سکتا ہے۔ اس حد تک کم کی گئی ہے کہ اس سے نقصان کو مؤثر طریقے سے کنٹرول نہیں کیا جا سکتا ہے۔
ٹریڈنگ کے اوقات اور موسمی قواعد سے منافع کے کچھ مواقع ختم ہوسکتے ہیں۔ فلٹرنگ کے اثرات کا اندازہ لگانا ضروری ہے۔
دیگر اشارے جیسے MACD، برین بینڈ وغیرہ کے ساتھ مل کر، داخلہ اور باہر نکلنے کے قوانین کو ڈیزائن کرنے پر غور کیا جا سکتا ہے.
مختلف اے ٹی آر ضرب اسٹاپ نقصان کے طریقوں کی جانچ کی جاسکتی ہے ، اور اسٹاپ نقصان کی شدت کو متحرک طور پر ایڈجسٹ کرنے پر بھی غور کیا جاسکتا ہے۔
ٹرانزیکشن ٹائم فریم کو ایڈجسٹ کرنے یا موسمی ٹرانزیکشن کے آغاز اور اختتام کے وقت کو بہتر بنانے کے لئے ٹیسٹ کیا جاسکتا ہے۔
آپ مشین لرننگ کے طریقوں کو استعمال کرکے پیرامیٹرز کو خود بخود بہتر بنانے کی کوشش کر سکتے ہیں۔
اس حکمت عملی میں رجحان تجزیہ اور رسک کنٹرول ٹکنالوجی کو مربوط کیا گیا ہے ، جس سے رجحان سے باخبر رہنے کی حکمت عملی کے شدید اتار چڑھاؤ کے مسئلے کو کچھ حد تک دور کیا گیا ہے۔ اس کے ساتھ ہی ، ٹریڈنگ کے وقت اور موسمی فلٹرنگ کو شامل کیا گیا ہے ، جس سے غلط سگنلوں کو کم کیا جاسکتا ہے۔ پیرامیٹرز کو بہتر بنانے اور افعال کو بڑھانے کے ذریعہ ، اس حکمت عملی سے بہتر مستحکم منافع حاصل کیا جاسکتا ہے۔
/*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)