दोहरी सीमा फ़िल्टर गति व्यापार रणनीति

लेखक:चाओझांग, दिनांकः 2024-04-01 10:54:47
टैगः

img

अवलोकन

यह रणनीति दोहरी रेंज फिल्टर पर आधारित एक गति व्यापार रणनीति है। यह रणनीति एक व्यापक रेंज फिल्टर प्राप्त करने के लिए तेज और धीमी अवधि के लिए चिकनी रेंज की गणना करती है, जिसका उपयोग वर्तमान मूल्य प्रवृत्ति को निर्धारित करने के लिए किया जाता है। जब कीमत इस रेंज के ऊपर / नीचे पार करती है, तो रणनीति खरीद / बिक्री संकेत उत्पन्न करती है। इसके अलावा, रणनीति जोखिम को नियंत्रित करने और लाभ में लॉक करने के लिए चार ग्रेडिएंट टेक-प्रॉफिट स्तर और एक स्टॉप-लॉस स्तर निर्धारित करती है।

रणनीतिक सिद्धांत

  1. तेज और धीमी अवधि के लिए चिकनी सीमाओं की गणना करें. तेज सीमा एक छोटी अवधि और एक छोटे गुणक का उपयोग करती है, जबकि धीमी सीमा एक लंबी अवधि और एक बड़ा गुणक का उपयोग करती है.
  2. व्यापक श्रेणी फ़िल्टर (TRF) के रूप में तेज और धीमी सीमाओं के औसत का प्रयोग करें।
  3. वर्तमान मूल्य को पिछली कीमत से तुलना करके ऊपर और नीचे के रुझानों का निर्धारण करें।
  4. प्रवृत्ति के लिए संदर्भ के रूप में गतिशील ऊपरी (FUB) और निचले (FLB) बैंड की गणना करें।
  5. बंद मूल्य और TRF के बीच संबंध के आधार पर खरीद और बिक्री संकेत उत्पन्न करें।
  6. चार ग्रेडिएंट टेक-प्रॉफिट स्तर और एक स्टॉप-लॉस स्तर निर्धारित करें, जो विभिन्न स्थिति प्रतिशत और लाभ/हानि प्रतिशतों के अनुरूप हों।

लाभ विश्लेषण

  1. दोहरी रेंज फिल्टर तेज और धीमी अवधि को जोड़ती है, जिससे रणनीति विभिन्न बाजार गति के अनुकूल हो सकती है और अधिक व्यापारिक अवसरों को पकड़ सकती है।
  2. गतिशील ऊपरी और निचले बैंडों का डिजाइन रणनीति को वर्तमान प्रवृत्ति के अनुरूप बनाने में मदद करता है और झूठे संकेतों को कम करता है।
  3. चार ग्रेडिएंट टेक-प्रॉफिट स्तर रणनीति को अधिक लाभ प्राप्त करने की अनुमति देते हैं जब प्रवृत्ति जारी रहती है जबकि प्रवृत्ति उलट जाती है तो आंशिक लाभ में लॉक होता है।
  4. स्टॉप-लॉस सेटिंग प्रति ट्रेड अधिकतम हानि को नियंत्रित करने में मदद करती है और खाता सुरक्षा की रक्षा करती है।

जोखिम विश्लेषण

  1. बाजार में उतार-चढ़ाव या सीमाबद्ध परिस्थितियों के दौरान, रणनीति कई झूठे संकेत उत्पन्न कर सकती है, जिससे अक्सर व्यापार और कमीशन नुकसान हो सकता है।
  2. ग्रेडिएंट टेक-प्रॉफिट सेटिंग्स के कारण कुछ मुनाफे समय से पहले लॉक हो सकते हैं, जिससे रणनीति को ट्रेंड मूवमेंट का पूरा लाभ नहीं मिल पाता है।
  3. स्टॉप-लॉस सेटिंग ब्लैक स्वान घटनाओं के कारण होने वाले चरम नुकसानों से पूरी तरह से बच नहीं सकती है।

अनुकूलन दिशा

  1. झूठे संकेतों को कम करने के लिए प्रवृत्ति निर्धारण के लिए सहायक शर्तों के रूप में अधिक तकनीकी संकेतकों या बाजार भावना संकेतकों को शामिल करने पर विचार करें।
  2. लाभ लेने और स्टॉप-लॉस सेटिंग्स के लिए, रणनीति की अनुकूलन क्षमता में सुधार के लिए विभिन्न बाजार वातावरण और व्यापारिक उपकरणों के अनुसार उन्हें गतिशील रूप से समायोजित करें।
  3. बैकटेस्टिंग परिणामों के आधार पर, रणनीति की स्थिरता और लाभप्रदता बढ़ाने के लिए तेजी से और धीमी सीमा अवधि के चयन, और लाभ लेने और स्टॉप-लॉस स्तरों के लिए प्रतिशत सेटिंग्स जैसे पैरामीटर सेटिंग्स को और अनुकूलित करें।

सारांश

ड्यूल रेंज फिल्टर गति ट्रेडिंग रणनीति तेजी से और धीमी अवधि से चिकनी रेंज का उपयोग करके एक व्यापक फिल्टर का निर्माण करती है, जो गतिशील ऊपरी और निचले बैंड के साथ संयुक्त मूल्य रुझानों को निर्धारित करने और खरीद / बिक्री संकेत उत्पन्न करने के लिए होती है। रणनीति जोखिम को नियंत्रित करने और लाभ में लॉक करने के लिए चार ग्रेडिएंट टेक-प्रॉफिट स्तर और एक स्टॉप-लॉस स्तर भी निर्धारित करती है। यह रणनीति ट्रेंडिंग बाजारों में उपयोग के लिए उपयुक्त है लेकिन उतार-चढ़ाव वाले बाजारों में अधिक झूठे संकेत उत्पन्न कर सकती है। भविष्य में, अधिक संकेतकों को पेश करने, लाभ लेने और स्टॉप-लॉस सेटिंग्स को अनुकूलित करने और रणनीति की अनुकूलनशीलता और स्थिरता में सुधार के लिए पैरामीटर को गतिशील रूप से समायोजित करने पर विचार करें।


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
strategy(title='2"Twin Range Filter', overlay=true)
strat_dir_input = input.string(title='İşlem Yönü', defval='Alis', options=['Alis', 'Satis', 'Tum'])
strat_dir_value = strat_dir_input == 'Alis' ? strategy.direction.long : strat_dir_input == 'Satis' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)

////////////////////////////

// Backtest inputs
BaslangicAy = input.int(defval=1, title='İlk ay', minval=1, maxval=12)
BaslangicGun = input.int(defval=1, title='İlk Gün', minval=1, maxval=31)
BaslangicYil = input.int(defval=2023, title='İlk Yil', minval=2000)
SonAy = input.int(defval=1, title='Son Ay', minval=1, maxval=12)
SonGun = input.int(defval=1, title='Son Gün', minval=1, maxval=31)
SonYil = input.int(defval=9999, title='Son Yıl', minval=2000)

start = timestamp(BaslangicYil, BaslangicAy, BaslangicGun, 00, 00)  // backtest start window
finish = timestamp(SonYil, SonAy, SonGun, 23, 59)  // backtest finish window
window() => true

source = input(defval=close, title='Source')
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
per1 = input.int(defval=27, minval=1, title='Fast period')
mult1 = input.float(defval=1.6, minval=0.1, title='Fast range')
per2 = input.int(defval=55, minval=1, title='Slow period')
mult2 = input.float(defval=2, minval=0.1, title='Slow range')
smoothrng(x, t, m) =>
    wper = t * 2 - 1
    avrng = ta.ema(math.abs(x - x[1]), t)
    smoothrng = ta.ema(avrng, wper) * m
    smoothrng
smrng1 = smoothrng(source, per1, mult1)
smrng2 = smoothrng(source, per2, mult2)
smrng = (smrng1 + smrng2) / 2
rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r
    rngfilt
filt = rngfilt(source, smrng)
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])
STR = filt + smrng
STS = filt - smrng
FUB = 0.0
FUB := STR < nz(FUB[1]) or close[1] > nz(FUB[1]) ? STR : nz(FUB[1])
FLB = 0.0
FLB := STS > nz(FLB[1]) or close[1] < nz(FLB[1]) ? STS : nz(FLB[1])
TRF = 0.0
TRF := nz(TRF[1]) == FUB[1] and close <= FUB ? FUB : nz(TRF[1]) == FUB[1] and close >= FUB ? FLB : nz(TRF[1]) == FLB[1] and close >= FLB ? FLB : nz(TRF[1]) == FLB[1] and close <= FLB ? FUB : FUB
al = ta.crossover(close, TRF)
sat = ta.crossunder(close, TRF)
plotshape(showsignals and al, title='Long', text='BUY', style=shape.labelup, textcolor=color.white, size=size.tiny, location=location.belowbar, color=color.rgb(0, 19, 230))
plotshape(showsignals and sat, title='Short', text='SELL', style=shape.labeldown, textcolor=color.white, size=size.tiny, location=location.abovebar, color=color.rgb(0, 19, 230))
alertcondition(al, title='Long', message='Long')
alertcondition(sat, title='Short', message='Short')
Trfff = plot(TRF)
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = close > TRF ? color.green : na
shortFillColor = close < TRF ? color.red : na
fill(mPlot, Trfff, title='UpTrend Highligter', color=longFillColor, transp=90)
fill(mPlot, Trfff, title='DownTrend Highligter', color=shortFillColor, transp=90)

//////////////////////



renk1 = input(true, "Mum Renk Ayarları?")
mumrenk = input(true,title="Trend Bazlı Mum Rengi Değişimi?")
htaColor = renk1 ? (al ? color.rgb(224, 230, 57) : #E56337) : #c92626
barcolor(color = mumrenk ? (renk1 ? htaColor : na) : na)
if (al) and window()
    strategy.entry("Al", strategy.long)
if (sat) and window()
    strategy.entry("Sat", strategy.short)


per1(pcnt) =>
    strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
zarkesmgb = input.float(title='Zarar Kes Yüzdesi', defval=100, minval=0.01)
zarkeslos = per1(zarkesmgb)
q1 = input.int(title='Satış Lot Sayısı 1.Kısım %', defval=5, minval=1)
q2 = input.int(title='Satış Lot Sayısı 2.Kısım %', defval=8, minval=1)
q3 = input.int(title='Satış Lot Sayısı 3.Kısım %', defval=13, minval=1)
q4 = input.int(title='Satış Lot Sayısı 4.Kısım %', defval=21, minval=1)
tp1 = input.float(title='Kar Yüzdesi 1.Kısım', defval=13, minval=0.01)
tp2 = input.float(title='Kar Yüzdesi 2.Kısım', defval=21, minval=0.01)
tp3 = input.float(title='Kar Yüzdesi 3.Kısım', defval=29, minval=0.01)
tp4 = input.float(title='Kar Yüzdesi 4.Kısım', defval=34, minval=0.01)
strategy.exit('✨KS1', qty_percent=q1, profit=per1(tp1), loss=zarkeslos)
strategy.exit('✨KS2', qty_percent=q2, profit=per1(tp2), loss=zarkeslos)
strategy.exit('✨KS3', qty_percent=q3, profit=per1(tp3), loss=zarkeslos)
strategy.exit('✨KS4', qty_percent=q4, profit=per1(tp4), loss=zarkeslos)



अधिक