Estrategia dinámica de suspensión de pérdidas

El autor:¿ Qué pasa?, Fecha: 2023-12-21 15:58:54
Las etiquetas:

img

Resumen general

Esta estrategia determina la dirección de la tendencia en función de las velas diarias y utiliza los nuevos puntos altos o bajos formados por las velas de 15 minutos como precio de stop loss o precio de stop loss, para ajustar dinámicamente el stop loss y obtener más ganancias.

Estrategia lógica

  1. Compara el precio de cierre de las velas diarias con el precio más alto y más bajo de la velas diarias anteriores para determinar la dirección de la tendencia. Si el precio de cierre es más alto que el precio más alto del día anterior, se define como una tendencia alcista. Si el precio de cierre es más bajo que el precio más bajo del día anterior, se define como una tendencia bajista.

  2. Cuando esté en una tendencia alcista, vaya largo cuando el precio de cierre de la vela de 15 minutos sea mayor que el precio más alto de la vela de 15 minutos anterior. Cuando esté en una tendencia bajista, vaya corto cuando el precio de cierre de la vela de 15 minutos sea inferior al precio más bajo de la vela de 15 minutos anterior.

  3. Establezca el precio más bajo del candelero de 15 minutos anterior como el precio de stop loss después de ir largo.

  4. Cuando el candelabro de 15 minutos vuelva a alcanzar un nuevo máximo o mínimo, ajuste el precio de la parada de pérdida en consecuencia. Ajuste al nuevo mínimo después de ir largo. Ajuste al nuevo máximo después de ir corto. Esto realiza una parada de pérdida dinámica.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede ajustar dinámicamente el precio de stop loss. al tiempo que garantiza el control del riesgo, maximiza la obtención de ganancias y reduce la probabilidad de que se produzca un stop loss.

Las ventajas incluyen:

  1. Los juicios basados en la operación de tendencia pueden determinar oportunamente las tendencias del mercado y elegir la dirección comercial correcta.

  2. Las operaciones de 15 minutos permiten entradas y salidas frecuentes para aprovechar más oportunidades.

  3. El ajuste dinámico del stop loss basado en nuevos máximos o mínimos reduce los riesgos de que se produzca un stop loss.

  4. El posicionamiento razonable del stop loss evita en gran medida pérdidas innecesarias.

Análisis de riesgos

El principal riesgo de esta estrategia proviene de errores en los juicios de tendencia.

  1. Un juicio incorrecto de la tendencia diaria puede conducir a una dirección comercial incorrecta.

  2. Los precios pueden fluctuar violentamente a corto plazo, aumentando la probabilidad de que se produzca un stop loss de 15 minutos.

  3. La identificación incorrecta de los puntos de inversión de tendencia puede dar lugar a pérdidas.

Soluciones correspondientes:

  1. Añadir indicadores de otros marcos de tiempo para juicios exhaustivos para evitar la dependencia de un solo marco de tiempo.

  2. Evaluar la volatilidad del mercado y relajar adecuadamente el intervalo de stop loss durante la alta volatilidad.

  3. Añadir un mecanismo de identificación del punto de inversión de tendencia para cerrar posiciones a tiempo antes de las inversiones.

Direcciones de optimización

Todavía hay espacio para una mayor optimización:

  1. Añadir otros indicadores de marco de tiempo para optimizar la captura de tendencias.

  2. Prueba diferentes ajustes de la proporción de pérdida de parada para encontrar los parámetros óptimos.

  3. Añadir indicadores de volumen para evitar errores de divergencia de volumen.

  4. Añadir mecanismos de inversión de tendencia para optimizar los puntos de salida.

  5. Evaluar la ampliación de los intervalos de precios de parada de seguimiento para reducir aún más los riesgos de que se produzcan pérdidas de parada.

Resumen de las actividades

El rendimiento general de esta estrategia es bueno. La lógica es clara y fácil de entender. Tiene ventajas como el ajuste dinámico de stop loss, el comercio frecuente y el comercio a lo largo de las tendencias. Puede controlar eficazmente los riesgos y bloquear las ganancias, y vale la pena probar y optimizar más. Pero todavía hay margen de mejora. Se recomienda mejorar desde aspectos como el juicio integral desde múltiples ángulos, la optimización de parámetros, la adición de mecanismos de identificación de inversión de tendencias, etc., para fortalecer aún más la estabilidad y la rentabilidad de la estrategia.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-15 02:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Anand's Strategy", overlay=true)

// Get the high and low of the previous day's candle
prev_high = request.security(syminfo.tickerid, "D", high[2])
prev_low = request.security(syminfo.tickerid, "D", low[2])

// var float prev_high = na
// var float prev_low = na

prev_close = request.security(syminfo.tickerid, "D", close[1])


getDayIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "D", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "D", low[_bar])
    [_indexed_high, _indexed_low]

var index = 2

while index >= 0
    [indexed_high_D, indexed_low_D] =  getDayIndexedHighLow(index)
  
    if prev_close > indexed_high_D or prev_close < indexed_low_D
        prev_high := indexed_high_D
        prev_low := indexed_low_D
        break
    // Decrease the index to move to the previous 15-minute candle
    index := index - 1


// Determine the trade direction based on the candle criterion
trade_direction = prev_close > prev_high ? 1 : (prev_close < prev_low ? -1 : 0)

// Get the current close from 15-minute timeframe
current_close = request.security(syminfo.tickerid, "15", close[1])
prev_high_15m = request.security(syminfo.tickerid, "15", high[2])
prev_low_15m = request.security(syminfo.tickerid, "15", low[2])

// var float prev_high_15m = na
// var float prev_low_15m = na

getIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "15", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "15", low[_bar])
    [_indexed_high, _indexed_low]


// Loop through previous 15-minute candles until the condition is met
var  i = 2

while i >= 2
    [indexed_high_15m, indexed_low_15m] =  getIndexedHighLow(i)
  
    if current_close > indexed_high_15m or current_close < indexed_low_15m
        prev_high_15m := indexed_high_15m
        prev_low_15m := indexed_low_15m
        break
    // Decrease the index to move to the previous 15-minute candle
    i := i - 1



buy_condition = trade_direction == 1 and current_close > prev_high_15m
stop_loss_buy = prev_low_15m

// Sell Trade Criteria in Negative Trend
sell_condition = trade_direction == -1 and current_close < prev_low_15m
stop_loss_sell = prev_high_15m


// Trailing Stop Loss for Buy Trade
// Custom Trailing Stop Function for Buy Trade
var float trail_stop_buy = na
trailing_buy_condition = buy_condition and current_close > trail_stop_buy
if trailing_buy_condition
    trail_stop_buy := current_close

// Custom Trailing Stop Function for Sell Trade
var float trail_stop_sell = na
trailing_sell_condition = sell_condition and current_close < trail_stop_sell
if trailing_sell_condition
    trail_stop_sell := current_close

// Take Buy Trade with Stop Loss
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Stop Loss", "Buy", stop=stop_loss_buy)

// Take Sell Trade with Stop Loss
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Stop Loss", "Sell", stop=stop_loss_sell)

// Set the background color based on the trade direction
bgcolor(trade_direction == 1 ? color.new(color.green, 90) : trade_direction == -1 ? color.new(color.red, 90) : na)

Más.