Estrategia de negociación de movimiento

El autor:¿ Qué pasa?, fecha: 2023-10-11 16:29:37
Las etiquetas:

Resumen general

Se trata de una estrategia de seguimiento de tendencias basada en el cruce de promedios móviles, combinada con la gestión de stop loss/take profit y el efecto de apalancamiento, con el objetivo de identificar tendencias en múltiples mercados y maximizar las ganancias.

Estrategia lógica

La estrategia utiliza el cruce de promedios móviles rápidos y lentos como señales comerciales.

Para filtrar las operaciones de ruido de tendencias menores, también utiliza un MA de 200 días como filtro de tendencia.

La estrategia utiliza paradas de trading de rango. Después de la entrada, se establecen niveles de stop loss y take profit por porcentaje fijo, por ejemplo, 1% stop loss y 1% take profit. Las posiciones se cerrarán cuando el precio alcance el stop loss o take profit.

El efecto de apalancamiento se emplea para amplificar las ganancias comerciales.

Análisis de ventajas

  • Una ventaja es que puede identificar tendencias en múltiples mercados, incluidas las criptomonedas, las acciones y los futuros, lo que hace que la estrategia sea ampliamente aplicable.

  • El uso de un cruce MA rápido/lento y un filtro de tendencia puede identificar mejor la dirección de la tendencia y lograr una buena tasa de ganancia en los mercados de tendencia.

  • Las paradas de negociación de rango ayudan a controlar la pérdida de una sola operación dentro del rango soportable, lo que permite un funcionamiento estable de la estrategia.

  • El efecto de apalancamiento amplifica las ganancias comerciales, haciendo pleno uso de la ventaja de la estrategia.

  • El diseño de la interfaz visual con diferentes colores de fondo para los mercados alcista/osario ofrece una visión intuitiva del mercado.

Análisis de riesgos

  • La estrategia es de tendencia, por lo que puede tener un rendimiento inferior en los mercados agitados y limitados al rango.

  • Los niveles deben ajustarse en función de la volatilidad específica del mercado.

  • El apalancamiento amplifica el tamaño de la posición, así como los riesgos.

  • La naturaleza tardía de las medias móviles puede causar señales comerciales retrasadas.

Direcciones de optimización

  • Prueba de diferentes combinaciones de parámetros y selecciona las longitudes máximas óptimas de velocidad/lenteza.

  • Incorporar otros indicadores o modelos como señales de filtro para mejorar la precisión, por ejemplo, paradas ATR, RSI, etc.

  • Investigue otras herramientas de identificación de tendencias como ADX para mejorar aún más la capacidad de captura de tendencias.

  • Utilice modelos de aprendizaje automático para optimizar las señales de estrategia y encontrar puntos de entrada / salida más efectivos.

  • Considere el stop loss/take profit dinámico basado en la volatilidad y las condiciones del mercado para obtener paradas más sensatas.

Resumen de las actividades

La estrategia emplea un enfoque sistemático de seguimiento de tendencias y utiliza paradas / tomar ganancias y apalancamiento para controlar el riesgo y aumentar las ganancias. Es ampliamente aplicable en todos los mercados con potencial de alfa estable.


/*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)

Más.