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