Estrategia de ruptura de la zona de valor transitorio

El autor:¿ Qué pasa?, fecha: 2023-12-12 10:58:22
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es determinar el rango de precios actual combinando indicadores de RSI de diferentes ciclos, y tomar acciones de compra o venta correspondientes en ciclos más pequeños cuando hay una ruptura en un RSI de ciclo más grande.

Estrategia lógica

Los principales pasos para esta estrategia para determinar el rango de precios y encontrar oportunidades comerciales son:

  1. Calcular el índice de variación RSI basado en un ciclo más amplio (por ejemplo, diario).
  2. Determinar si el RSI del ciclo más amplio alcanzó un nuevo máximo o mínimo dentro del período de retroalimentación.
  3. Si hay una ruptura, juzgue la tendencia del precio ( alcista o bajista) en un ciclo más pequeño (por ejemplo, 5 min) y tome las acciones de compra o venta correspondientes.

Por ejemplo, cuando el RSI diario rompe su máximo anterior, juzgamos que actualmente es un mercado alcista. Y cuando el RSI diario se rompe por debajo de su mínimo anterior, lo juzgamos como un mercado bajista. En ambos casos tomamos acciones largas y cortas respectivamente en el gráfico de 5 minutos.

Análisis de ventajas

En comparación con las estrategias tradicionales que sólo se centran en un período, esta estrategia tiene las siguientes ventajas:

  1. Una evaluación más precisa del valor relativo actual de los precios. Los ciclos más largos como los diarios pueden filtrar el ruido del mercado a corto plazo y determinar la tendencia general y el área de valor.

  2. La combinación de indicadores a través de períodos mejora la confiabilidad de la señal.

  3. Una gran ruptura de ciclo señala la dirección general, mientras que solo necesitamos localizar oportunidades en ciclos pequeños como 5 minutos para obtener ganancias.

  4. La combinación de períodos cruzados ayuda a evitar quedar atrapados. Podemos salir rápidamente cuando los grandes indicadores del ciclo comienzan a revertirse.

Análisis de riesgos

Los principales riesgos de esta estrategia consisten en:

  1. Un juicio erróneo en indicadores de ciclos grandes. La determinación ineficaz del área de valor en el RSI diario, etc., puede conducir a señales defectuosas. Se necesita ajuste de parámetros del RSI para mejorar la precisión.

  2. Divergencia entre el movimiento de precios de ciclos pequeños y la determinación de ciclos grandes. A veces los movimientos a corto plazo contrarrestan las tendencias generales. Necesitamos establecer un stop loss adecuado para controlar la pérdida.

  3. La gestión inadecuada del riesgo. Las pérdidas excesivas en el comercio único debidas a una mala calificación de las posiciones podrían conducir a una reducción irrecuperable.

Direcciones de optimización

La estrategia sigue teniendo mucho que mejorar, principalmente en los siguientes aspectos:

  1. Prueba más combinaciones de períodos para encontrar parámetros óptimos.

  2. Ajuste de parámetros de RSI para mejorar la precisión del juicio.

  3. Añadir más indicadores. Traer más indicadores como MA para ayudar a juzgar la dirección de la tendencia.

  4. Mejorar el mecanismo de stop loss. Ajustar dinámicamente los puntos de stop loss basados en las condiciones de extracción.

  5. Optimizar las reglas de posicionamiento y gestionar los tamaños de posiciones específicas para cada operación de manera más científica.

Conclusión

Esta estrategia realiza el arbitraje de período cruzado entre diferentes dimensiones de tiempo mediante la evaluación de la condición alcista en los RSI de período cruzado. Esta idea de juicio de período cruzado merece una mayor explotación. Podemos seguir mejorándola a través de ajuste de parámetros, optimización de pérdidas de parada, combinaciones de indicadores para que sea más ventajosa. En general, esta estrategia tiene una idea única y un gran potencial para ser mejorada.


/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
//
otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)")
otf = input(defval="180", title="Second Momentum Timeframe")

// Function to dectect a new bar
is_newbar(res) =>
    t = time(res)
    change(t) != 0 ? true : false

// Check how many bars are in our upper timeframe
since_new_bar = barssince(is_newbar(otf))
otf_total_bars = na
otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1]

//Calculate RSI Values
ctf_rsi = rsi(open, otf_period)

breakline=input(title="Breaks in lines", defval = true, type=bool)

so = request.security(syminfo.tickerid, otf, rsi(open, otf_period))
sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period))


final_otf_so = na
final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so

final_otf_sc = na
final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc

barsback = input(11, title='Bars back to check for a swing')
// showsig = input(false, title='Show Signal Markers')
 
swing_detection(index)=>
    swing_high = false
    swing_low = false
    start = (index*2) - 1 // -1 so we have an even number of
    swing_point_high = final_otf_so[index]
    swing_point_low = final_otf_sc[index]
    
    //Swing Highs
    for i = 0 to start
        swing_high := true
        if i < index 
            if final_otf_so[i] > swing_point_high 
                swing_high := false
                break
        // Have to do checks before pivot and after seperately because we can get
        // two highs of the same value in a row. Notice the > and >= difference
        if i > index
            if final_otf_so[i] >= swing_point_high 
                swing_high := false
                break
        
    //Swing lows
    for i = 0 to start
        swing_low := true
        if i < index
            if final_otf_sc[i] < swing_point_low 
                swing_low := false
                break  
        // Have to do checks before pivot and after seperately because we can get
        // two lows of the same value in a row. Notice the > and >= difference
        if i > index
            if final_otf_sc[i] <= swing_point_low 
                swing_low := false
                break 
        
    [swing_high, swing_low]
 
// Check for a swing
[swing_high, swing_low] = swing_detection(barsback)
 

long =  final_otf_so > final_otf_sc
short = final_otf_so < final_otf_sc

if swing_low and long
    strategy.entry("My Long Entry Id", strategy.long)


if swing_high and short
    strategy.entry("My Short Entry Id", strategy.short)

Más.