এই কৌশলটিকে একাধিক ফিল্টার সহ সুপারট্রেন্ড ট্রেডিং কৌশল বলা হয়। এটি কঠোরভাবে এন্ট্রি নিয়ন্ত্রণের জন্য সুপারট্রেন্ডের উপরে ফিল্টার হিসাবে একাধিক সূচক যুক্ত করে।
কৌশলটি কিভাবে কাজ করেঃ
এই কৌশলটির সুবিধাঃ
এই কৌশলের ঝুঁকি:
সংক্ষেপে, মাল্টিপল ফিল্টার সহ সুপারট্রেন্ড ট্রেডিং কৌশলটি প্রবণতা অনুসরণ এবং সূচক বিশ্লেষণ উভয়কেই বিবেচনা করে, একাধিক নিশ্চিতকরণের মাধ্যমে সংকেতের গুণমান উন্নত করে। যুক্তিসঙ্গত স্টপ লস এবং লাভের প্রক্রিয়াগুলি ট্রেডিং ঝুঁকি হ্রাস করার মূল চাবিকাঠি। কৌশলটি কিছু অভিজ্ঞতার সাথে ব্যবসায়ীদের জন্য উপযুক্ত।
/*backtest start: 2023-09-07 00:00:00 end: 2023-09-14 00:00:00 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/ // © mathlabel //@version=5 strategy("My strategy", overlay=true, margin_long=100, margin_short=100) atrPeriod = input(10, "ATR Length") factor = input.float(3.0, "Factor", step = 0.01) stopLossFactor = input(2.0, "Stop Loss Factor") takeProfitFactor = input(1.5, "Take Profit Factor") stochlenght= input(14,'stochlenght') oversold_level = input(title = 'Oversold', defval = 20) overbought_level = input(title = 'Overbought', defval = 80) use_atr_exits=input.bool(false) use_bollinger_exits=input.bool(false) use_cci_filter=input.bool(false) longLossPerc = input.float(title='Long Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01 shortLossPerc = input.float(title='Short Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01 longprofitPerc = input.float(title='Long profit (%)', minval=0.0, step=0.1, defval=1) * 0.01 shortprofitPerc = input.float(title='Short profit (%)', minval=0.0, step=0.1, defval=1) * 0.01 // Calculate ATR atr = ta.atr(atrPeriod) plotsuper=input.bool(false) [supertrend, direction] = ta.supertrend(factor, atrPeriod) upTrend = plot(plotsuper? (direction < 0 ? supertrend : na) : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(plotsuper ? (direction < 0? na : supertrend):na, "Down Trend", color = color.red, style=plot.style_linebr) long_supertrend_filter= (direction < 0 ? supertrend : na) short_supertrend_filter= (direction < 0? na : supertrend) //--trama-- lengths = input(99,title='Trama lenght') src =(close) ama = 0. hh = math.max(math.sign(ta.change(ta.highest(lengths))), 0) ll = math.max(math.sign(ta.change(ta.lowest(lengths)) * -1), 0) tc = math.pow(ta.sma(hh or ll ? 1 : 0, lengths), 2) ama := nz(ama[1] + tc * (src - ama[1]), src) plottrama=input.bool(false, title="Show Lux TRAMA") plot(plottrama?ama : na, 'Plot', color.new(#ff1100, 0), 2) use_LUX_trama_filter=input.bool(false) long_LUX_trama_filter= (close > ama) short_LUX_trama_filter= (close < ama) // highest high highest = ta.highest(high, stochlenght) // lowest low lowest = ta.lowest(low, stochlenght) // stochastic oscillator stochastic_K = ((close - lowest) / (highest - lowest)) * 100 stochastic_D = ta.sma(stochastic_K, 3) use_stochastic_filter = input.bool(false) long_stoch_filter = stochastic_K > oversold_level and stochastic_K[1] < oversold_level short_stoch_filter = stochastic_K < overbought_level and stochastic_K[1] > overbought_level //Define a ATR band upline and bottome line. upline = open + (atr* takeProfitFactor) bottomline = open -(atr*stopLossFactor) plot(use_atr_exits ? upline : na, color=color.white) plot(use_atr_exits ? bottomline:na, color=color.white) // Calculate stop loss and take profit levels stopLoss = stopLossFactor * atr takeProfit = takeProfitFactor * atr //input macd ma_fast=ta.sma(close,input(14,title='ma fast for macd filter')) ma_slow=ta.sma(close,input(28, title='ma slowfor macd filter')) use_macd_filter=input.bool(false) [macdLine, signalLine, histLine]= ta.macd(close,12,26,9) long_macd_filter= (macdLine > signalLine) and ta.crossover(ma_fast,ma_slow) short_macd_filter= (macdLine < signalLine) and ta.crossunder(ma_fast,ma_slow) // ema 200 ema1= ta.ema(close,1) ema2= ta.ema(close,200) use_ema200_filter= input.bool(false) long_ema_filter = (close > ema2) short_ema_filter= (close < ema2) plotAverage = input.bool(true, title="Plot EMA200") plot(plotAverage ? ta.ema(close, 200) : na, title="Exponential Average") // mfi signalLength = input(title="mfi Signal Length", defval=9) length1 = input(title="mfi Length", defval=14) src1 = hlc3 mf = ta.mfi(src1, length1) signal = ta.ema(mf, signalLength) use_mfi_filter=input.bool(false) long_mfi_filter= ta.crossover(mf,signal) ?mf:na short_mfi_filter= ta.crossunder(mf,signal)? mf : na //cci cci_l = input(50, title='CCI Period Length') atr_l = input(5, title=' CCI ATR Length') level = 0 sd_length = 20 cci = ta.cci(src, cci_l) atr2 = ta.atr(atr_l) var st = 0. if cci >= level st := low - atr st if cci <= level st := high + atr st var tu = 0. var td = 0. var optimal_line = 0. if cci >= level and cci[1] < level tu := td[1] tu if cci <= level and cci[1] > level td := tu[1] td if cci > level tu := low - atr2 if tu < tu[1] and cci[1] >= level tu := tu[1] tu if cci < level td := high + atr2 if td > td[1] and cci[1] <= level td := td[1] td optimal_line := math.max(tu, td) // Creating a Price Channel, avg_st8 = ta.ema(st, 8) avg_st13 = ta.ema(st, 13) avg_st21 = ta.ema(st, 21) avg_st34 = ta.ema(st, 21) avg_st55 = ta.ema(st, 55) avg_st89 = ta.ema(st, 89) avg_st144 = ta.ema(st, 144) avg_st233 = ta.ema(st, 233) average_weighting = (optimal_line + avg_st8 + avg_st13 + avg_st21 + avg_st34 + avg_st55 + avg_st89 + avg_st144 + avg_st233) / 9 basis = ta.sma(average_weighting, sd_length) devs = ta.stdev(average_weighting, sd_length) upperS = basis + devs lowerS = basis - devs plot(use_cci_filter ? basis: na, 'Basis', color=color.new(#872323, 0)) p3 = plot(use_cci_filter ? upperS : na, 'UpperS', color=color.new(color.teal, 0)) p4 = plot(use_cci_filter ? lowerS: na ,'LowerS', color=color.new(color.teal, 0)) long_cci_filter= ta.crossover(close,upperS) short_cci_filter= ta.crossunder(close,lowerS) var isLong = false var isShort = false long = (not use_LUX_trama_filter or long_LUX_trama_filter) and ( long_supertrend_filter) and (not use_ema200_filter or long_ema_filter) and (not isLong) and (not use_stochastic_filter or long_stoch_filter) and (not use_macd_filter or long_macd_filter) and (not use_mfi_filter or long_mfi_filter) and (not use_cci_filter or long_cci_filter) short= (not use_LUX_trama_filter or short_LUX_trama_filter) and ( short_supertrend_filter) and (not use_ema200_filter or short_ema_filter) and (not isShort) and ( not use_stochastic_filter or short_stoch_filter) and (not use_macd_filter or long_macd_filter) and (not use_mfi_filter or short_mfi_filter) and (not use_cci_filter or short_cci_filter) if long isLong := true isShort := false if short isLong := false isShort := true plotshape(long, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(short, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) //bollinger lengthss = input(20, title='bollinger lenght') mult = input.float(2.0, minval=0.001, maxval=50, title="bollinger StdDev") basiss = ta.sma(src, lengthss) dev = mult * ta.stdev(src, lengthss) upper = basiss + dev lower = basiss - dev offset = input.int(0, "bollinger Offset", minval = -500, maxval = 500) plot(use_bollinger_exits ? basiss : na, "Basis", color=#FF6D00, offset = offset) p1 = plot(use_bollinger_exits ? upper : na, "Upper", color=#2962FF, offset = offset) p2 = plot(use_bollinger_exits ? lower: na, "Lower", color=#2962FF, offset = offset) long_bollinger_exits= close > upper short_bollinger_exits=close < lower long_atr_exits = close > upline short_atr_exits = close < bottomline takelong = (not use_atr_exits or long_atr_exits) and (not use_bollinger_exits or long_bollinger_exits) takeshort = (not use_atr_exits or short_atr_exits) and (not use_bollinger_exits or short_bollinger_exits) plotshape(use_atr_exits? takelong : na,title = 'take profit',text='high SL/TP',style=shape.cross,location = location.abovebar, color=color.new(color.green,0) , size=size.tiny) plotshape(use_atr_exits ? takeshort : na,title = 'take profit',text='low SL/TP',style=shape.cross,location = location.belowbar, color=color.new(color.green,0), size=size.tiny) plotshape(use_bollinger_exits ? takelong: na,title = 'take profit',text='high SL/TP',style=shape.cross,location = location.abovebar, color=color.new(color.green,0) , size=size.tiny) plotshape(use_bollinger_exits ? takeshort: na,title = 'take profit',text='low SL/TP',style=shape.cross,location = location.belowbar, color=color.new(color.green,0), size=size.tiny) alertcondition(long,'long','buy') alertcondition(short,'short','short') alertcondition(takeshort,'trail short close','short trailing take profit') alertcondition(takelong ,'trail long close','long trailing take profit') use_trailing_stop_loss=input.bool(title = 'use trailing stop loss (atr or bollinger)?', defval = true) // Determine stop loss price longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) // Determine take profit price longprofitPrice = strategy.position_avg_price * (1 + longprofitPerc) shortprofitPrice = strategy.position_avg_price * (1 - shortprofitPerc) // Plot stop loss values for confirmation plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_cross, linewidth=1, title='Long Stop Loss') plot(series=strategy.position_size < 0 ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_cross, linewidth=1, title='Short Stop Loss') plot(series=strategy.position_size > 0 ? longprofitPrice : na, color=color.new(color.green, 0), style=plot.style_cross, linewidth=1, title='Long profit') plot(series=strategy.position_size < 0 ? shortprofitPrice : na, color=color.new(color.green, 0), style=plot.style_cross, linewidth=1, title='Short profit') longCondition = long if (longCondition) strategy.entry("Long Entry", strategy.long) shortCondition = short if (shortCondition) strategy.entry("Short Entry", strategy.short,stop = shortStopPrice) if use_trailing_stop_loss if takelong or close < longStopPrice strategy.close("Long Entry") if takeshort or close > shortStopPrice strategy.close("Short Entry") else if close < longStopPrice or close > longprofitPrice strategy.close("Long Entry") if close < shortprofitPrice or close > shortStopPrice strategy.close("Short Entry")