Esta estrategia utiliza las señales de ruptura de precios y el mecanismo de stop loss oscilante para la gestión de riesgos. Se hace largo cuando el precio rompe la resistencia y se hace corto cuando el precio rompe el soporte. Al mismo tiempo, se aplican paradas de stop loss y profit taking para un mejor control del riesgo.
La estrategia se basa en los siguientes puntos clave:
Usando MA para determinar la dirección de la tendencia: se trazan MA rápidos y lentos, MA rápido que cruza por encima de MA lento señala tendencia alcista, mientras que cruza por debajo de las señales de tendencia bajista.
Cuando el precio sube y rompe su nivel más alto reciente, se considera que rompe el nivel de resistencia, yendo largo.
Cuando el precio cae y rompe el mínimo de oscilación reciente, se considera que rompe el nivel de soporte, yendo corto.
Después de la entrada, la línea de stop loss se establece y sigue ajustándose en función de la fluctuación del precio, formando un mecanismo de stop loss oscilante.
El stop loss controla el riesgo, el take profit bloquea las ganancias.
Específicamente, utiliza el promedio de precios altos y bajos como fuente, traza EMA rápidos y lentos para determinar tendencias. Cuando la EMA rápida supera la EMA lenta y surge la señal de ruptura de resistencia, se va largo. Cuando la EMA rápida cae por debajo de la EMA lenta y aparece la ruptura de soporte, se corta. Después de la entrada, el precio más bajo en ciertos períodos se establece como la línea de stop loss, sigue ajustándose a medida que aumenta el precio.
Las ventajas de esta estrategia incluyen:
Seguir las tendencias puede generar ganancias estables de las tendencias a largo plazo.
Control de riesgos excelente, parada oscilante y parada protectora reducen rápidamente las pérdidas.
Las señales de resistencia de largo y de apoyo corto proporcionan señales confiables.
Las reglas son sencillas, los indicadores y las señales son sencillos y fáciles de seguir.
Adaptable al mercado, funciona bien en diferentes productos y condiciones de mercado.
Algunos riesgos a tener en cuenta para esta estrategia:
Riesgo de fracaso de la ruptura: el precio puede tener retroceso o retroceso después de la ruptura inicial, lo que desencadena el stop loss.
El riesgo de optimización de parámetros. La mala sintonización de parámetros conduce a demasiadas o muy pocas señales. La optimización requiere prudencia.
En condiciones extremas, las EMA pueden dejar de funcionar o retrasarse en el precio.
El riesgo de reversión de tendencia: mantener una posición en contra de la tendencia genera pérdidas acumuladas cuando la tendencia se invierte.
Un ajuste adecuado de los parámetros, una gran pérdida de parada, el estricto cumplimiento de las reglas pueden mitigar en gran medida los riesgos anteriores.
La estrategia puede mejorarse aún más en los siguientes aspectos:
Optimización del marco de tiempo, ajuste de los períodos de cálculo de las MAs y los patrones de precios, encuentre las mejores combinaciones.
Optimización de la adaptabilidad, ajuste de parámetros para diferentes productos.
Optimización de pérdida de parada. Prueba métodos de pérdida de parada más avanzados como parada de seguimiento, parada de la lámpara.
Tomemos la optimización de ganancias. Adopte ganancias adaptativas o exponenciales tomando salidas para una mejor recompensa.
Añadir filtros de volumen y volatilidad para evitar falsas rupturas.
Mejorar las señales de entrada, combinar más indicadores o patrones para confirmar las entradas.
Esta es una estrategia de breakout eficaz con un buen control de riesgos, un modelo de ganancias estable y un flujo lógico sencillo.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 30m basePeriod: 15m 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/ // © EduardoMattje //@version=4 strategy("Reversal closing price", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000) src = input(hl2, "Price source") order_direction = input("Both", "Order direction", options=["Both", "Long", "Short"]) // EMA calculation and plot ema_long_period = input(80, "EMA long period") ema_short_period = input(8, "EMA short period") ema_long = ema(src, ema_long_period) ema_short = ema(src, ema_short_period) ema_bull = ema_short > ema_long ema_bear = ema_short < ema_long plot(ema_long, "EMA long", ema_bull ? color.green : color.red, 3) plot(ema_short, "EMA short", ema_bull ? color.green : color.red, 3) // Settings risk_reward_ratio = input(2.0, "Risk to reward ratio", minval=1.0, step=0.1) stop_lookback = input(3, "Stoploss candle lookback", minval=1) ema_cross_stop = input(true, "Close if EMA crosses in oposite direction") allow_retracing = input(true, "Allow price retracing") // RCP calculation rcp_bull = low[0] < low[1] and low[0] < low[2] and close[0] > close[1] rcp_bear = high[0] > high[1] and high[0] > high[2] and close[0] < close[1] // Order placement in_market = strategy.position_size != 0 long_condition = rcp_bull and ema_bull and not in_market and order_direction != "Short" short_condition = rcp_bear and ema_bear and not in_market and order_direction != "Long" bought = strategy.position_size[0] > strategy.position_size[1] and strategy.position_size[1] == 0 sold = strategy.position_size[0] < strategy.position_size[1] and strategy.position_size[1] == 0 closed = not in_market and in_market[1] long_position = strategy.position_size > 0 short_position = strategy.position_size < 0 buy_price = high + syminfo.mintick sell_price = low - syminfo.mintick if long_condition strategy.entry("Long", true, stop=buy_price) if short_condition strategy.entry("Short", false, stop=sell_price) if allow_retracing better_price_long = barssince(closed) > barssince(long_condition) and barssince(long_condition) >= 1 and not in_market and ema_bull and buy_price < valuewhen(long_condition, buy_price, 0) and buy_price[0] < buy_price[1] if better_price_long strategy.cancel("Long") strategy.entry("Long", true, stop=buy_price) better_price_short = barssince(closed) > barssince(short_condition) and barssince(short_condition) >= 1 and not in_market and ema_bear and sell_price > valuewhen(short_condition, sell_price, 0) and sell_price[0] > sell_price[1] if better_price_short strategy.cancel("Short") strategy.entry("Short", false, stop=sell_price) // Stoploss orders stop_price = long_position ? valuewhen(bought, lowest(stop_lookback)[1] - syminfo.mintick, 0) : short_position ? valuewhen(sold, highest(3)[1] + syminfo.mintick, 0) : na stop_comment = "Stoploss triggered" strategy.close("Long", low <= stop_price, stop_comment) strategy.close("Short", high >= stop_price, stop_comment) plot(stop_price, "Stop price", color.red, 2, plot.style_linebr) // EMA cross close orders if ema_cross_stop if long_position and ema_bear strategy.close("Long", comment=stop_comment) if short_position and ema_bull strategy.close("Short", comment=stop_comment) // Take profit orders stop_ticks = abs(strategy.position_avg_price - stop_price) take_profit_price = long_position ? valuewhen(bought, strategy.position_avg_price + stop_ticks * risk_reward_ratio, 0) : short_position ? valuewhen(sold, strategy.position_avg_price - (stop_ticks * risk_reward_ratio), 0) : na target_comment = "Take profit" strategy.close("Long", high >= take_profit_price, target_comment) strategy.close("Short", low <= take_profit_price, target_comment) plot(take_profit_price, "Target price", color.green, 2, plot.style_linebr)