Estrategia de captura inversa


Fecha de creación: 2023-11-24 16:43:25 Última modificación: 2023-11-24 16:43:25
Copiar: 0 Número de Visitas: 676
1
Seguir
1617
Seguidores

Estrategia de captura inversa

Descripción general

La estrategia de captura de reversión es una estrategia de inversión que utiliza la combinación de la línea de Brin de la volatilidad con el indicador de dinámica RSI. Establece el canal de Brin y la línea de sobrecompra y sobreventa del RSI como señales para buscar oportunidades de inversión para negociar cuando la dirección de la tendencia cambia.

Principio de estrategia

La estrategia utiliza la línea de Brill como el indicador técnico principal, complementado con indicadores dinámicos como el RSI para validar las señales de negociación. La lógica específica es:

  1. Para determinar la dirección de la tendencia del gran ciclo, determine si es un alza o una baja. Utilice el EMA de 50 días y el tenedor dorado de 21 días para determinar.
  2. En una tendencia bajista, cuando el precio sube para romper la baja de Brin y el indicador RSI acaba de rebotar desde la zona de sobreventa, aparece una forma de horquilla de oro, que indica que la zona de sobreventa ha tocado fondo y se considera una señal de compra.
  3. En una tendencia alcista, cuando los precios bajan y rompen la vía de Brin, mientras que el RSI acaba de retroceder de la zona de sobreventa, aparece una forma de horquilla muerta, lo que indica que la zona de sobreventa ha comenzado a retroceder, lo que se considera una señal de venta.
  4. Las señales de compra y venta mencionadas anteriormente deben cumplirse al mismo tiempo para evitar falsas señales.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. La combinación de índice de fluctuación y índice de movimiento, la señal es más confiable.
  2. El riesgo de inversión es menor y es adecuado para operaciones de línea corta.
  3. Las reglas de programación son claras y las transacciones automáticas son fáciles.
  4. La combinación de las operaciones con las tendencias evita la apertura de posiciones desordenadas en mercados convulsionados.

Análisis de riesgos

La estrategia también tiene los siguientes riesgos:

  1. El canal de la línea de Bryn corre el riesgo de romper la señal falsa y necesita filtrar el indicador RSI.
  2. El riesgo de fracaso de la inversión, que debe detenerse a tiempo.
  3. El riesgo de no saber cuándo es el momento de la vuelta es que se puede entrar antes o perder el mejor lugar.

Para los riesgos anteriores, se puede configurar la posición de stop loss para controlar la abertura de riesgo, a la vez que se optimizan los parámetros, se ajusta el ciclo de la línea de builtin o el parámetro RSI.

Dirección de optimización

La estrategia se puede optimizar principalmente en las siguientes direcciones:

  1. Optimización de los parámetros de las bandas de Bryn, ajuste de la longitud de los ciclos y el tamaño de la diferencia estándar para buscar la combinación óptima de parámetros.
  2. Optimización del ciclo de las medias móviles para determinar la duración óptima del ciclo para juzgar la tendencia.
  3. Ajuste el parámetro RSI para encontrar el mejor rango de zona de sobrecompra y sobreventa.
  4. Añadir otras combinaciones de indicadores, como KDJ, MACD, etc., para enriquecer la razón de ingreso del sistema.
  5. Aumentar los algoritmos de aprendizaje automático para buscar automáticamente los mejores parámetros utilizando la tecnología de IA.

Resumir

La estrategia de captura de reversión es una estrategia de comercio de línea corta que tiene un mejor efecto en general. Combina el juicio de tendencia y la señal de reversión, que puede filtrar las falsas señales de los mercados convulsos, evitar la cobertura de la tendencia en los mercados de tendencia y controlar el riesgo. A través de la optimización continua de los parámetros y modelos, se puede obtener un mejor efecto de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This is an Open source work. Please do acknowledge in case you want to reuse whole or part of this code.
// Please see the documentation to know the details about this.

//@version=5
strategy('Strategy:Reversal-Catcher', shorttitle="Reversal-Catcher", overlay=true , currency=currency.NONE, initial_capital=100000)

// Inputs
src = input(close, title="Source (close, high, low, open etc.")

BBlength = input.int(defval=20, minval=1,title="Bollinger Period Length, default 20")
BBmult = input.float(defval=1.5, minval=1.0, maxval=4, step=0.1, title="Bollinger Bands Standard Deviation, default is 1.5")

fastMovingAvg = input.int(defval=21, minval=5,title="Fast Exponential Moving Average, default 21", group = "Trends")
slowMovingAvg = input.int(defval=50, minval=8,title="Slow Exponential Moving Average, default 50", group = "Trends")

rsiLenght = input.int(defval=14, title="RSI Lenght, default 14", group = "Momentum")
overbought = input.int(defval=70, title="Overbought limit (RSI), default 70", group = "Momentum")
oversold = input.int(defval=30, title="Oversold limit (RSI), default 30", group = "Momentum")

hide = input.bool(defval=true, title="Hide all plots and legends from the chart (default: true)")


// Trade related
tradeType = input.string(defval='Both', group="Trade settings", title="Trade Type", options=['Both', 'TrendFollowing', 'Reversal'], tooltip="Consider all types of trades? Or only Trend Following or only Reversal? (default: Both).")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=false, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked. (Default: off)", group="Trade settings")


// Utils
annotatePlots(txt, val, hide) => 
    if (not hide)
        var l1 = label.new(bar_index, val, txt, style=label.style_label_left, size = size.tiny, textcolor = color.white, tooltip = txt)
        label.set_xy(l1, bar_index, val)

/////////////////////////////// Indicators /////////////////////
vwap = ta.vwap(src)
plot(hide ? na : vwap, color=color.purple, title="VWAP", style = plot.style_line)
annotatePlots('VWAP', vwap, hide)

// Bollinger Band of present time frame
[BBbasis, BBupper, BBlower] = ta.bb(src, BBlength, BBmult)
p1 = plot(hide ? na : BBupper, color=color.blue,title="Bollinger Bands Upper Line")
p2 = plot(hide ? na : BBlower, color=color.blue,title="Bollinger Bands Lower Line")
p3 = plot(hide ? na : BBbasis, color=color.maroon,title="Bollinger Bands Width", style=plot.style_circles, linewidth = 1)
annotatePlots('BB-Upper', BBupper, hide)
annotatePlots('BB-Lower', BBlower, hide)
annotatePlots('BB-Base(20-SMA)', BBbasis, hide)

// RSI
rsi = ta.rsi(src, rsiLenght)

// Trend following
ema50 = ta.ema(src, slowMovingAvg)
ema21 = ta.ema(src, fastMovingAvg)
annotatePlots('21-EMA', ema21, hide)
annotatePlots('50-EMA', ema50, hide)


// Trend conditions
upTrend = ema21 > ema50 
downTrend = ema21 < ema50


// Condition to check Special Entry: HH_LL
// Long side:
hhLLong = barstate.isconfirmed and (low > low[1]) and (high > high[1]) and (close > high[1])
hhLLShort = barstate.isconfirmed and (low < low[1]) and (high < high[1]) and (close < low[1])

longCond =  barstate.isconfirmed and (high[1] < BBlower[1]) and (close > BBlower) and (close < BBupper) and hhLLong and ta.crossover(rsi, oversold) and downTrend
shortCond = barstate.isconfirmed and (low[1] > BBupper[1]) and (close < BBupper) and (close > BBlower) and hhLLShort and ta.crossunder(rsi, overbought) and upTrend

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, 1, limit=na, stop=na, comment="Long[E]")
        sl := low[1]
        target := high >= BBbasis ? BBupper : BBbasis
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, 1, limit=na, stop=na, comment="Short[E]")
        sl := high[1]
        target := low <= BBbasis ? BBlower : BBbasis
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long[SL]" : "Long[T]")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short[SL]" : "Short[T]")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "EoD[Exit]", alert_message = "EoD Exit", immediately = true)