
Тройная стратегия SuperTrend и Stoch RSI - это количественная торговая стратегия, которая сочетает в себе трендовое слежение и перекуп сверхпродажной индикации в течение нескольких временных рамок. Стратегия использует три различных параметров, установленных на параметрах, чтобы определить тенденцию рынка и в сочетании с сигналом опережающей покупки и продажи от Stoch RSI, чтобы отправить торговый сигнал. В конкретных операциях, когда стратегия одновременно выдает сигнал покупки/продажи от двух более быстрых индикаторов SuperTrend, если индикатор Stoch RSI также подтверждает этот сигнал, будет выполнена соответствующая операция по покупке/продаже.
Центральная логика трёхкратной стратегии SuperTrend и Stoch RSI заключается в фильтрации торгового сигнала, чтобы повысить качество сигнала и снизить погрешность.
Во-первых, стратегия использует три группы индикаторов SuperTrend с различными параметрами для определения основных тенденций на рынке. Эти три группы индикаторов SuperTrend имеют разные параметры, временные рамки от быстрых до медленных, которые используются для захвата изменений в тренде на разных уровнях.
Во-вторых, стратегия включает в себя индикатор Stoch RSI, чтобы определить, является ли сигнал чрезмерно перекупленным или перепроданным. Показатель Stoch RSI, в сочетании с преимуществами RSI и Stochastic, позволяет эффективно определить, находится ли рынок в состоянии перекупа или перепродажи. Мы можем отправить окончательный сигнал покупки/продажи, если самый быстрый и самый быстрый сигналы SuperTrend совпадают с сигналом Stoch RSI.
С помощью сочетания нескольких индикаторов и нескольких временных рамок, трёхкратная стратегия SuperTrend и Stoch RSI может эффективно отфильтровывать рыночный шум, повышать надежность сигналов и уменьшать количество ошибочных сделок.
Самое большое преимущество трёх SuperTrend и Stoch RSI стратегий заключается в эффективном сочетании нескольких индикаторов и нескольких временных рамок, что дает нам следующие преимущества:
Уменьшение ошибочных торговых сигналов. Комбинация трех индикаторов SuperTrend и индикатора Stoch RSI позволяет значительно уменьшить шум и ошибочные сигналы, которые существуют в одном индикаторе.
Повышение соотношения выигрышных сигналов. Хотя частота сигналов снижается, соотношение выигрышных сигналов значительно повышается.
Подходит для трендовых рынков. Многовременные фреймворковые колебания полезны для захвата средне-длиннолинейных тенденций и подходят для рыночных условий с более заметными тенденциями.
Легко добиться лучших результатов с помощью оптимизации параметров. Тройные показатели предоставляют больше возможностей для оптимизации параметров.
Параметры могут быть скорректированы в соответствии с личным стилем. Можно свободно корректировать параметры, чтобы стратегия соответствовала своему стилю торговли.
Существуют определенные риски в трёх стратегиях SuperTrend и Stoch RSI, которые сосредоточены на следующих аспектах:
Снижение частоты сигналов. Многоуровневый механизм фильтрации заставляет стратегию иметь заметное снижение частоты торгов.
Некоторые сигналы могут быть пропущены. Консервативность стратегии может привести к тому, что некоторые потенциальные возможности могут быть пропущены.
Количество показателей увеличивает зависимость от параметров. Чем больше показателей и параметров, тем сложнее оптимизировать стратегию.
Ограниченная способность следить за тенденциями. Многочисленные временные рамки также ограничивают гибкость стратегии следить за тенденциями.
Для вышеуказанных рисков мы можем оптимизировать их путем корректировки параметров показателей, внедрения дополнительных показателей для принятия решений и т. Д., Чтобы стратегия могла получать более высокую качество прибыли при одновременном управлении рисками.
Существует еще много возможностей для дальнейшей оптимизации трёхкратных стратегий SuperTrend и Stoch RSI, в основном в следующих областях:
Настройка набора показателей, чтобы найти оптимальные параметры. Можно ввести дополнительные тесты на параметры набора показателей, чтобы найти оптимальные параметры.
Увеличение стратегии стоп-стоп и контроль риска в одном транзакции. Это может значительно повысить стабильность стратегии.
Введение большего количества показателей для проверки сигналов. Например, введение показателей объема торгов для многостороннего суждения.
Добавлена адаптационная функция, позволяющая автоматически оптимизировать и корректировать параметры стратегии в соответствии с изменениями рынка.
Прогнозирование в сочетании с алгоритмами машинного обучения. Использование алгоритмов ИИ для прогнозирования точности сигналов показателей.
С помощью постоянной оптимизации, тройная стратегия SuperTrend и Stoch RSI может стать стабильной и эффективной количественной стратегией торговли, которая принесет нам значительную альфу.
Тройная стратегия 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))