Стратегия тройного супертренда и Stoch RSI является количественной торговой стратегией, которая сочетает в себе многочасовые трендовые сигналы индикатора SuperTrend и сигналы перекупки/перепродажи от индикатора Stoch RSI. Стратегия использует три индикатора SuperTrend с различными параметрами для определения рыночных тенденций и сочетает сигналы Stoch RSI для фильтрации торговых сигналов. В частности, когда два более быстрых индикатора SuperTrend дают одновременные сигналы покупки/продажи, если индикатор Stoch RSI подтвердит, будут приняты соответствующие длинные/короткие позиции.
Основная логика стратегии Triple SuperTrend и Stoch RSI заключается в сочетании индикаторов SuperTrend с различными параметрами и индикатора Stoch RSI для фильтрации торговых сигналов для улучшения качества сигналов и уменьшения ложных сигналов.
Во-первых, стратегия использует три индикатора SuperTrend с различными параметрами, чтобы определить основную тенденцию рынка. Три индикатора SuperTrend имеют параметры, варьирующиеся от быстрых до медленных временных рамок, для того, чтобы фиксировать изменения тренда на разных уровнях. Когда самый быстрый и второй самый быстрый индикатор SuperTrend дают одновременные сигналы покупки / продажи, мы делаем предварительное суждение о том, что сигнал имеет некоторую надежность.
Во-вторых, индикатор Stoch RSI вводится для определения того, является ли рынок чрезвычайно перекупленным или перепроданным при появлении сигнала. Индикатор Stoch RSI объединяет сильные стороны индикаторов RSI и Stochastic, позволяя эффективно судить о условиях рынка с перекупленностью / перепроданностью. Когда самые быстрые и вторые самые быстрые сигналы SuperTrend совпадают с сигналами Stoch RSI, окончательные сигналы покупки / продажи могут быть активированы.
Благодаря сочетанию нескольких индикаторов и временных рамок, стратегия Triple SuperTrend и Stoch RSI может эффективно отфильтровать рыночный шум, улучшить надежность сигнала и уменьшить неправильные сделки.
Наибольшее преимущество стратегии Triple SuperTrend и Stoch RSI заключается в эффективном сочетании нескольких индикаторов и временных рамок, что приносит следующие преимущества:
Сочетание трех индикаторов SuperTrend и Stoch RSI может значительно уменьшить шум и ложные сигналы, которые приходят с отдельными индикаторами.
Несмотря на снижение частоты сигнала, доля прибыльных сигналов значительно улучшается.
Подходит для трендовых рынков. Многочасовая фильтрация облегчает захват среднесрочных и долгосрочных тенденций, хорошо соответствующих трендовым рыночным условиям.
Легкая оптимизация для улучшения производительности. Тройные индикаторы позволяют более широкие возможности для оптимизации параметров.
Параметры могут быть свободно настроены, чтобы лучше соответствовать собственному стилю торговли.
Существуют также некоторые риски, связанные со стратегией Triple SuperTrend и Stoch RSI:
Уменьшенная частота сигнала. Механизм многослойного фильтра значительно снижает частоту торговли стратегии.
Консервативный характер делает стратегию, вероятно, пропустить некоторые прибыльные возможности.
Увеличение зависимости от параметров. Больше показателей означает большие трудности в оптимизации.
Ограниченная способность следовать трендам.
Для устранения этих рисков могут быть приняты меры по оптимизации, такие как корректировка параметров показателей и внедрение дополнительных показателей для повышения контроля рисков при одновременном повышении качества рентабельности.
Есть еще много возможностей для дальнейшей оптимизации стратегии тройного супертенда и RSI Stoch:
Настройка параметров индикатора для наилучшей комбинации.
Для лучшего контроля рисков внедряйте стоп-лосс/прибыль.
Включить больше показателей для проверки сигнала, например, показателей объема.
Встроенные адаптивные возможности для автоматической оптимизации параметров в соответствии с меняющейся динамикой рынка.
Сочетание алгоритмов машинного обучения для прогнозирования производительности, оценки точности сигнала.
При непрерывной оптимизации стратегия Triple SuperTrend и Stoch RSI может превратиться в стабильную, эффективную торговую систему, обеспечивающую значительную альфу.
Стратегия Triple SuperTrend и Stoch RSI успешно сочетает в себе анализ нескольких временных рамок и суждение о перекупе/перепродаже в уникальную стратегию следования тренду. Она сохраняет двойные преимущества следуния тренду и фильтрации индикаторов, улучшая при этом прибыльные сигналы и уменьшая ложные сигналы. Хотя риски и пространство для оптимизации все еще существуют, ее прибыльность и стабильность могут быть еще больше повышены посредством настройки параметров и оптимизации стратегии.
/*backtest start: 2022-11-29 00:00:00 end: 2023-04-17 00:00:00 period: 1d basePeriod: 1h 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/ // © M3RZI //@version=4 strategy("3x Supertrend and Stoch RSI", overlay = true, max_bars_back = 1000) //INPUTS STATRLENGTH1 = input(10, title = "Fast Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS") STATRMULT1 = input(1, title = "Fast Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS") STATRLENGTH2 = input(11, title = "Medium Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS") STATRMULT2 = input(2, title = "Medium Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS") STATRLENGTH3 = input(12, title = "Slow Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS") STATRMULT3 = input(3, title = "Slow Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS") stochK = input(3, title = "K (Stochastic Fast)", type = input.integer, group = "STOCHASTIC RSI SETTINGS") stochD = input(3, title = "D (Signal Line)", type = input.integer, group = "STOCHASTIC RSI SETTINGS") rsiLength = input(14, title = "RSI Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS") stochLength = input(14, title = "Stochastic Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS") rsiSource = input(close, title = "RSI Source", type = input.source, group = "STOCHASTIC RSI SETTINGS") stochRestrictions = input(false, title = "Restrict crosses to overbought/oversold territory", type = input.bool, group = "STOCHASTIC RSI SETTINGS") overboughtLine = input(80, title = "Stochastic RSI Upper Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS") oversoldLine = input(20, title = "Stochastic RSI Lower Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS") EMALength = input(200, title = "EMA Length", type = input.integer, group = "EMA SETTINGS") SLStrategy = input("ATR Based", title = "Stop Loss Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS") SLATRLength = input(14, title = "Stop Loss ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS") SLATRMult = input(2.7, title = "Stop Loss ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS") TPStrategy = input("ATR Based", title = "Take Profit Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS") TPATRLength = input(14, title = "Take Profit ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS") TPATRMult = input(1.6, title = "Take Profit ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS") //SUPERTRENDS [superTrend1,dir1] = supertrend(STATRMULT1,STATRLENGTH1) [superTrend2,dir2] = supertrend(STATRMULT2,STATRLENGTH2) [superTrend3,dir3] = supertrend(STATRMULT3,STATRLENGTH3) directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : na directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : na directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : na //STOCH RSI rsi = rsi(rsiSource, rsiLength) k = sma(stoch(rsi, rsi, rsi, stochLength), stochK) d = sma(k, stochD) //EMA ema = ema(close,EMALength) //CONDITIONS LONG AND SHORT var long = false var longCondition = false var short = false var shortCondition = false var drawing = false var TP = 0.0 var SL = 0.0 var middle = 0.0 var initial = 0 stopSize = atr(SLATRLength) * SLATRMult profitSize = atr(TPATRLength) * TPATRMult longStop = close - stopSize longProfit = close + profitSize current = close shortStop = close + stopSize shortProfit = close - profitSize barInitial = bar_index if stochRestrictions longCondition := close > ema and ((directionST1 == true and directionST2 == true) or (directionST2 == true and directionST3 == true)) and crossover(k,d) and k < oversoldLine and not long and not drawing shortCondition := close < ema and ((directionST1 == false and directionST2 == false) or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and k > overboughtLine and not short and not drawing else longCondition := close > ema and ((directionST1 == true and directionST2 == true) or (directionST2 == true and directionST3 == true)) and crossover(k,d) and not long and not drawing shortCondition := close < ema and ((directionST1 == false and directionST2 == false) or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and not short and not drawing if longCondition long := true short := false drawing := true TP := longProfit middle := current SL := longStop initial := barInitial strategy.entry("Long", strategy.long, 10) strategy.exit("Long exit","Long", limit = TP, stop = SL) alert("Long signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close) //label.new(bar_index,low,text = "Long\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.belowbar, textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up) if shortCondition short := true long := false drawing := true TP := shortProfit middle := current SL := shortStop initial := barInitial strategy.entry("Short", strategy.short, 10) strategy.exit("Short exit","Short",limit = TP , stop = SL) alert("Short signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close) //label.new(bar_index,high,text = "Short\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.abovebar, textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down) if long and (high[1] >= TP or low[1] <= SL) drawing := false long := false if high[1] >= TP label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (Long)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_down) else label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (Long)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_up) if short and (low[1] <= TP or high[1] >= SL) drawing := false short := false if low[1] <= TP label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (short)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up) else label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (short)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down) //STRATEGY //strategy.entry("buy", strategy.long, 10, when = longCondition) //strategy.exit("bracket", "buy", 10, limit = TP, stop = SL) //strategy.entry("short", strategy.long, 10, when = shortCondition) //strategy.exit("bracket", "short", 10, limit = TP, stop = SL) //DRAWING plotshape(longCondition, title = "Long Signal", location=location.belowbar, style=shape.labelup, color=color.green, textcolor=color.white, size=size.small, text="Long") plotshape(shortCondition, title = "Short Signal", location=location.abovebar, style=shape.labeldown, color=color.red, textcolor=color.white, size=size.small, text="Short") profitLine = plot(drawing and drawing[1] ? TP : na, title = "Take profit", color = color.green, style = plot.style_linebr) currentLine =plot(drawing and drawing[1] ? middle : na, title = "Middle Line", color = color.white, style = plot.style_linebr) lossLine = plot(drawing and drawing[1] ? SL : na, title = "Stop Loss", color = color.red, style = plot.style_linebr) fill(currentLine,profitLine, title = "Profit Background" ,color = color.new(color.green,75)) fill(currentLine,lossLine, title = "Loss Background" ,color = color.new(color.red,75)) plot(superTrend1, title = "Fast Supertrend", color = dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na) plot(superTrend2, title = "Medium Supertrend", color = dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na) plot(superTrend3, title = "Slow Supertrend", color = dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na) plot(ema, title = "EMA",color = color.yellow) //plot(k, color = color.blue) //plot(d, color = color.orange) //h1 = hline(80) //h2 = hline(20) //fill(h1,h2, color = color.new(color.purple,60))