Стратегия включает в себя индикатор SuperTrend на нескольких временных отрезках и полосах Боллинджера для определения направления тренда и ключевых уровней поддержки / сопротивления, и входит в сделки по выбытию во время волатильности.
Функция пользовательского Pine Scriptpine_supertrend()
реализована для вычисления SuperTrend в разных временных рамках (например, 1 мин и 5 мин) и определения направления тенденции более крупных временных рамок.
Более высокие и более низкие диапазоны Bollinger Bands действуют как каналы. Breakouts сигнализируют о направлении тренда. Close выше верхней полосы означает бычий прорыв. Close ниже нижней полосы означает медвежий сбой.
Сигналы входа:
Длинный: Закрыть > Верхняя полоса И Закрыть > СуперТренд (многократный TF) Короткий: закрыть < Нижняя полоса И закрыть < СуперТренд (многократный TF)
Выходы:
Длинный выход: закрытие < 5 м SuperTrend Короткий выход: закрытие > 5 м SuperTrend
Таким образом, он стремится захватить резонансные прорывы между SuperTrend и BB в изменчивом импульсе.
Уменьшение риска:
Стратегия сочетает в себе мощь SuperTrend и Bollinger Bands с использованием кросс-временного анализа и канальных прорывов для высоковероятной торговли. Она эффективно контролирует риск и может генерировать хорошую прибыль в волатильных инструментах. Дальнейшие оптимизации и комбинации индикаторов могут улучшить производительность.
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 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/ // © ambreshc95 //@version=5 strategy("Comodity_SPL_Strategy_01", overlay=false) // function of st // [supertrend, direction] = ta.supertrend(3, 10) // plot(direction < 0 ? supertrend : na, "Up direction", color = color.green, style=plot.style_linebr) // plot(direction > 0 ? supertrend : na, "Down direction", color = color.red, style=plot.style_linebr) // VWAP // src_vwap = input(title = "Source", defval = hlc3, group="VWAP Settings") // [_Vwap,stdv,_] = ta.vwap(src_vwap,false,1) // plot(_Vwap, title="VWAP", color = color.rgb(0, 0, 0)) // The same on Pine Script® pine_supertrend(factor, atrPeriod,len_ma) => h= ta.sma(high,len_ma) l= ta.sma(low,len_ma) hlc_3 = (h+l)/2 src = hlc_3 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] len_ma_given = input(75, title="MA_SMA_ST") [Pine_Supertrend, pineDirection] = pine_supertrend(3, 10,len_ma_given) // plot(pineDirection < 0 ? Pine_Supertrend : na, "Up direction", color = color.green, style=plot.style_linebr) // plot(pineDirection > 0 ? Pine_Supertrend : na, "Down direction", color = color.red, style=plot.style_linebr) // // Define Supertrend parameters atrLength = input(10, title="ATR Length") factor = input(3.0, title="Factor") // // Calculate Supertrend [supertrend, direction] = ta.supertrend(factor, atrLength) st_color = supertrend > close ? color.red : color.green // // Plot Supertrend // plot(supertrend, "Supertrend", st_color) // // BB Ploting length = input.int(75, minval=1) maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"]) src = input(close, title="Source") mult = input.float(2.5, minval=0.001, maxval=50, title="StdDev") ma(source, length, _type) => switch _type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) basis = ma(src, length, maType) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) // h= ta.sma(high,60) // l= ta.sma(low,60) // c= sma(close,60) // hlc_3 = (h+l)/2 // supertrend60 = request.security(syminfo.tickerid, supertrend) // // Define timeframes for signals tf1 = input(title="Timeframe 1", defval="1") tf2 = input(title="Timeframe 2",defval="5") // tf3 = input(title="Timeframe 3",defval="30") // // // Calculate Supertrend on multiple timeframes supertrend_60 = request.security(syminfo.tickerid, tf1, Pine_Supertrend) supertrend_5m = request.security(syminfo.tickerid, tf2, supertrend) // supertrend3 = request.security(syminfo.tickerid, tf3, supertrend) // // Plot Supertrend_60 st_color_60 = supertrend_60 > close ? color.rgb(210, 202, 202, 69) : color.rgb(203, 211, 203, 52) plot(supertrend_60, "Supertrend_60", st_color_60) // // Plot Supertrend_5m st_color_5m = supertrend_5m > close ? color.red : color.green plot(supertrend_5m, "Supertrend_5m", st_color_5m) ma21 = ta.sma(close,21) // rsi = ta.rsi(close,14) // rsima = ta.sma(rsi,14) // Define the Indian Standard Time (IST) offset from GMT ist_offset = 5.5 // IST is GMT+5:30 // Define the start and end times of the trading session in IST // start_time = timestamp("GMT", year, month, dayofmonth, 10, 0) + ist_offset * 60 * 60 // end_time = timestamp("GMT", year, month, dayofmonth, 14, 0) + ist_offset * 60 * 60 // Check if the current time is within the trading session // in_trading_session = timenow >= start_time and timenow <= end_time in_trading_session = not na(time(timeframe.period, "0945-1430")) // bgcolor(inSession ? color.silver : na) out_trading_session = not na(time(timeframe.period, "1515-1530")) // // // Define buy and sell signals buySignal = close>upper and close > supertrend_5m and close > supertrend_60 and close > ma21 and in_trading_session //close > supertrend and sellSignal = close<lower and close < supertrend_5m and close < supertrend_60 and close < ma21 and in_trading_session //close < supertrend and var bool long_position = false var bool long_exit = false var float long_entry_price = 0 var float short_entry_price = 0 if buySignal and not long_position // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_label_up, color = color.green, size = size.small) long_position := true strategy.entry("Buy",strategy.long) long_exit := (close < supertrend_5m) if long_position and long_exit // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_xcross, color = color.green, size = size.tiny) long_position := false strategy.exit("Exit","Buy",stop = close) var bool short_position = false var bool short_exit = false if sellSignal and not short_position // label.new(bar_index, na, yloc = yloc.abovebar, style = label.style_label_down, color = color.red, size = size.small) short_position := true strategy.entry("Sell",strategy.short) short_exit := (close > supertrend_5m) if short_position and short_exit // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_xcross, color = color.red, size = size.tiny) short_position := false strategy.exit("Exit","Sell", stop = close) if out_trading_session long_position := false strategy.exit("Exit","Buy",stop = close) short_position := false strategy.exit("Exit","Sell", stop = close) // if long_position // long_entry_price := close[1] + 50//bar_index // if short_position // short_entry_price := close[1] - 50//bar_index // if (long_position and high[1] > long_entry_price) // label.new(bar_index, na, yloc = yloc.abovebar, style = label.style_triangledown, color = color.yellow, size = size.tiny) // if (short_position and low[1] < short_entry_price) // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_triangleup, color = color.yellow, size = size.tiny)