Трехкратный прорыв с помощью стратегии RSI

Автор:Чао Чжан, Дата: 2024-02-29 14:57:49
Тэги:

img

Обзор

Эта стратегия объединяет индикаторы Bollinger Bands и RSI для генерации торговых сигналов. Она отслеживает, пробиваются ли цены закрытия трех свечей через верхние или нижние полосы одновременно, и объединяет индикатор Vortex и индикатор RSI для подтверждения торговых сигналов.

Принцип стратегии

Стратегия основывается главным образом на следующих принципах:

  1. Используйте 20-периодные полосы Боллинджера, рассмотреть вопрос о выпуске торговых сигналов, когда цены пробиваются через верхние или нижние полосы на закрытии
  2. Требуется три свечи, чтобы прорваться в то же время, чтобы избежать ложных прорывов
  3. Комбинировать индикатор Vortex, когда сильно перекуплено VIP>1.25, когда сильно перепродано VIM>1.25, фильтровать сигналы
  4. Объедините индикатор RSI, чтобы определить перекупленность и перепроданность, подумайте о том, чтобы пойти коротко, когда RSI проходит через 70, и подумайте о том, чтобы пойти долго, когда RSI проходит через 30
  5. При выполнении вышеперечисленных условий генерируются длинные и короткие сигналы

Анализ преимуществ

Основными преимуществами этой стратегии являются:

  1. Трехмерные полосы BB фильтруют ложные прорывы и обеспечивают надежность прорывов
  2. Индикатор Vortex оценивает силу рынка и избегает неблагоприятной торговли на рынке
  3. Показатель RSI оценивает зону перекупленности и перепроданности в сочетании с индикатором Bollinger Bands для входа
  4. Сочетание нескольких индикаторов позволяет всесторонне оценить ситуацию на рынке, а надежность сигнала относительно высока.

Анализ рисков

Стратегия также сопряжена с некоторыми рисками:

  1. Индикатор Bollinger Bands очень чувствителен к параметрам, длина и множитель StdDev должны быть оптимизированы
  2. Индикатор Vortex также довольно чувствителен к параметру цикла, который необходимо корректировать для разных рынков
  3. Показатель RSI подвержен дивергенции и может также упускать тенденции
  4. В случае несогласия в оценке трех показателей, невозможно будет войти, упустив некоторые возможности.

Меры контроля риска включают:

  1. Оптимизируйте параметры и используйте параметры с самым высоким показателем победы в обратном тестировании
  2. Комбинировать другие показатели, такие как фильтрация объема торговли
  3. Соответственно расслабить логику оценки показателей, чтобы не упустить хорошие возможности

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

Стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизировать длину и множитель StdDev полос Боллинджера, чтобы найти оптимальные параметры
  2. Оптимизировать цикл индикатора Vortex, чтобы сделать его более подходящим для различных рынков
  3. Увеличить оценку других индикаторов, таких как объем торговли, MACD и т.д., для обогащения диверсифицированных сигналов
  4. Корректировать логику оценки показателя для предотвращения невозможности входа из-за расхождения показателей
  5. Увеличить стратегию стоп-лосса для контроля максимальных потерь на одну сделку

Резюме

Эта стратегия сочетает в себе несколько индикаторов для суждения. В то время как обеспечивает надежность сигнала, она также имеет некоторые проблемы. Благодаря оптимизации параметров, обогащенным источникам сигнала, скорректированной логике суждения и стоп-лосс и т. Д., Стабильность и рентабельность стратегии могут быть дополнительно улучшены. Это дает хорошую идею для количественной торговли.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Noway0utstorm

//@version=5
strategy(title='RSI + BB  over 3 bar+--- vortex0.71.3  ', shorttitle='NoWaytruongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Больше