Трехкратная стратегия RSI SuperTrend и Stoch

Автор:Чао Чжан, Дата: 2023-12-06 14:29:00
Тэги:

img

Обзор

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

  1. Сочетание трех индикаторов SuperTrend и Stoch RSI может значительно уменьшить шум и ложные сигналы, которые приходят с отдельными индикаторами.

  2. Несмотря на снижение частоты сигнала, доля прибыльных сигналов значительно улучшается.

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

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

  5. Параметры могут быть свободно настроены, чтобы лучше соответствовать собственному стилю торговли.

Риски стратегии

Существуют также некоторые риски, связанные со стратегией Triple SuperTrend и Stoch RSI:

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

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

  3. Увеличение зависимости от параметров. Больше показателей означает большие трудности в оптимизации.

  4. Ограниченная способность следовать трендам.

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

Руководство по оптимизации

Есть еще много возможностей для дальнейшей оптимизации стратегии тройного супертенда и RSI Stoch:

  1. Настройка параметров индикатора для наилучшей комбинации.

  2. Для лучшего контроля рисков внедряйте стоп-лосс/прибыль.

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

  4. Встроенные адаптивные возможности для автоматической оптимизации параметров в соответствии с меняющейся динамикой рынка.

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

При непрерывной оптимизации стратегия 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))




Больше