Стратегия Triple SuperTrend и Stoch RSI


Дата создания: 2023-12-06 14:29:00 Последнее изменение: 2023-12-06 14:29:00
Копировать: 1 Количество просмотров: 1377
1
Подписаться
1619
Подписчики

Стратегия Triple SuperTrend и Stoch RSI

Обзор

Тройная стратегия 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 стратегий заключается в эффективном сочетании нескольких индикаторов и нескольких временных рамок, что дает нам следующие преимущества:

  1. Уменьшение ошибочных торговых сигналов. Комбинация трех индикаторов SuperTrend и индикатора Stoch RSI позволяет значительно уменьшить шум и ошибочные сигналы, которые существуют в одном индикаторе.

  2. Повышение соотношения выигрышных сигналов. Хотя частота сигналов снижается, соотношение выигрышных сигналов значительно повышается.

  3. Подходит для трендовых рынков. Многовременные фреймворковые колебания полезны для захвата средне-длиннолинейных тенденций и подходят для рыночных условий с более заметными тенденциями.

  4. Легко добиться лучших результатов с помощью оптимизации параметров. Тройные показатели предоставляют больше возможностей для оптимизации параметров.

  5. Параметры могут быть скорректированы в соответствии с личным стилем. Можно свободно корректировать параметры, чтобы стратегия соответствовала своему стилю торговли.

Стратегический риск

Существуют определенные риски в трёх стратегиях SuperTrend и Stoch RSI, которые сосредоточены на следующих аспектах:

  1. Снижение частоты сигналов. Многоуровневый механизм фильтрации заставляет стратегию иметь заметное снижение частоты торгов.

  2. Некоторые сигналы могут быть пропущены. Консервативность стратегии может привести к тому, что некоторые потенциальные возможности могут быть пропущены.

  3. Количество показателей увеличивает зависимость от параметров. Чем больше показателей и параметров, тем сложнее оптимизировать стратегию.

  4. Ограниченная способность следить за тенденциями. Многочисленные временные рамки также ограничивают гибкость стратегии следить за тенденциями.

Для вышеуказанных рисков мы можем оптимизировать их путем корректировки параметров показателей, внедрения дополнительных показателей для принятия решений и т. Д., Чтобы стратегия могла получать более высокую качество прибыли при одновременном управлении рисками.

Направление оптимизации стратегии

Существует еще много возможностей для дальнейшей оптимизации трёхкратных стратегий SuperTrend и Stoch RSI, в основном в следующих областях:

  1. Настройка набора показателей, чтобы найти оптимальные параметры. Можно ввести дополнительные тесты на параметры набора показателей, чтобы найти оптимальные параметры.

  2. Увеличение стратегии стоп-стоп и контроль риска в одном транзакции. Это может значительно повысить стабильность стратегии.

  3. Введение большего количества показателей для проверки сигналов. Например, введение показателей объема торгов для многостороннего суждения.

  4. Добавлена адаптационная функция, позволяющая автоматически оптимизировать и корректировать параметры стратегии в соответствии с изменениями рынка.

  5. Прогнозирование в сочетании с алгоритмами машинного обучения. Использование алгоритмов ИИ для прогнозирования точности сигналов показателей.

С помощью постоянной оптимизации, тройная стратегия 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))