Estrategias de swing trading


Fecha de creación: 2023-10-11 16:29:37 Última modificación: 2023-10-11 16:29:37
Copiar: 0 Número de Visitas: 647
1
Seguir
1617
Seguidores

Descripción general

Se trata de una estrategia de seguimiento de tendencias basado en el cruce de las medias móviles, combinada con la gestión de los estancamientos de pérdidas y el efecto de la palanca, con el objetivo de identificar tendencias en varios mercados y maximizar los beneficios.

Principio de estrategia

La estrategia utiliza como señal de negociación el cruce de las medias móviles rápidas y las medias móviles lentas. Se toman posiciones de más cabeza cuando se cruza la media móvil lenta por encima de las medias móviles rápidas y posiciones de cabeza vacía cuando se cruza la media móvil lenta por debajo de las medias móviles rápidas.

Para filtrar el ruido de las transacciones de tendencias no principales, la estrategia también introduce el promedio móvil de 200 días como filtro de tendencia. La señal de negociación se emite solo cuando el precio está por encima o por debajo del promedio móvil de 200 días.

La estrategia adopta una estrategia de stop loss para el intercambio. Después de la negociación, se establece un stop loss y un stop loss en proporción fija, por ejemplo, se establece un stop loss del 1% y un stop loss del 1% y se cancela la posición cuando el precio toca el stop loss o el stop loss.

Para maximizar la ganancia de las operaciones, la estrategia utiliza el efecto de palanca. De acuerdo con las características de los diferentes mercados, se puede elegir el porcentaje de palanca adecuado, por ejemplo, 10 veces la palanca.

Análisis de las ventajas

  • Una de las ventajas de las estrategias es que se pueden identificar tendencias en varios mercados, incluidos los mercados de criptomonedas, acciones y futuros, ampliando la aplicabilidad de las estrategias.

  • La aplicación de cruce de línea media rápida y lenta y el filtro de tendencia permiten una mejor identificación de la dirección de la tendencia y una mejor tasa de ganancia en el curso de la tendencia.

  • La adopción de una estrategia de stop-loss en intervalos permite controlar las pérdidas individuales en un rango aceptable, lo que favorece el funcionamiento estable de la estrategia.

  • El efecto de la palanca puede aumentar los beneficios de las operaciones y así aprovechar al máximo las ventajas de la estrategia.

  • Diseño de la interfaz visual, el uso de diferentes colores de fondo para identificar el mercado de la cabecera y la cabecera, el usuario puede intuir la situación actual del mercado.

Análisis de riesgos

  • Las estrategias se basan en la idea de negociación de tendencias, y el efecto de la negociación se rebaja en un mercado con una liquidación de la agitación. El tamaño de la posición debe ser controlado adecuadamente.

  • Si existe el riesgo de arbitraje en el límite de pérdidas fijo, el límite de pérdidas se ajustará en función del mercado.

  • El apalancamiento aumenta la escala de las operaciones y aumenta el riesgo de las mismas. Es necesario controlar la proporción de apalancamiento para evitar que se supere el rango de pérdidas aceptables.

  • El promedio móvil en sí mismo es retrasado, y puede causar problemas de retraso en las señales de negociación.

Dirección de optimización

  • Se puede estudiar el rendimiento de las estrategias bajo diferentes combinaciones de parámetros, seleccionando la longitud de la línea media rápida y lenta que es mejor para la combinación de parámetros.

  • Se puede combinar con otros indicadores o modelos como señales de filtración para mejorar la precisión de la estrategia. Por ejemplo, la introducción de paros ATR, indicadores RSI, etc.

  • Se pueden utilizar indicadores de identificación de tendencias, como el indicador DC, para mejorar aún más la capacidad de discernimiento de la estrategia sobre las tendencias.

  • Se pueden utilizar modelos de aprendizaje automático para optimizar las señales estratégicas y identificar momentos de negociación más efectivos.

  • Se puede considerar la posibilidad de ajustar dinámicamente la amplitud del stop loss para establecer un stop loss más razonable en función de la volatilidad y la situación del mercado.

Resumir

La estrategia en su conjunto utiliza un método de seguimiento de tendencias más científico y sistémico, y se complementa con el control de riesgos y el aumento de los beneficios mediante el control de pérdidas y el apalancamiento. La estrategia se puede aplicar ampliamente en varios mercados y se espera obtener ganancias adicionales estables.

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

////////////////////////////////////////////////////////////////////////////////
// Bozz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
// strategy("Bozz Strategy", "", true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, margin_long=0, margin_short=0)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = (strategy.equity * leverage) / close 

// Long Side
strategy.entry("Long Entry", strategy.long,  when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)