Estrategia de negociación de retroceso basada en una media móvil dinámica

El autor:¿ Qué pasa?, Fecha: 2024-02-27 14:38:45
Las etiquetas:

img

Resumen general

Esta estrategia emplea un sistema dual de promedios móviles para identificar oportunidades potenciales de ruptura en acciones o criptomonedas seleccionadas. El principio básico es comprar cuando el promedio móvil a corto plazo rebota por debajo del promedio móvil a largo plazo y vender cuando los precios vuelven a probar el promedio móvil a largo plazo.

Estrategia lógica

La estrategia utiliza dos promedios móviles simples (SMA) con diferentes períodos como señales comerciales. El primer SMA tiene un período más largo para representar la dirección general de la tendencia. El segundo SMA tiene un período más corto para capturar las fluctuaciones de precios a corto plazo.

Cuando la SMA a corto plazo cruza por encima de la SMA a largo plazo desde abajo, señala una tendencia alcista en los precios en general, por lo que la estrategia abre una posición larga.

Además, la estrategia tiene condiciones de "sobreventa" y "sobrecompra" para evitar la negociación en situaciones extremas.

Ventajas

  • El sistema de medias móviles dobles identifica eficazmente las tendencias a medio plazo
  • Combina los méritos de la tendencia de seguimiento y la negociación de retroceso
  • Las condiciones de sobreventa y sobrecompra reducen las operaciones innecesarias

Análisis de riesgos

  • Difícil de determinar el tiempo de finalización exacto de la retirada, puede detenerse prematuramente
  • Incapacidad para reducir rápidamente las pérdidas cuando la tendencia cambia, podría sufrir grandes retractos
  • La mala regulación de los parámetros puede dar lugar a un exceso de operaciones o a una operación conservadora

Direcciones de optimización

Hay más margen para optimizar esta estrategia:

  1. Utilice indicadores técnicos más avanzados como las bandas de Bollinger y KD para medir las ondas y tendencias de precios
  2. Incorporar más factores como el cambio de volumen, la volatilidad para determinar la finalización de la retirada
  3. Tamaño dinámico de las posiciones para maximizar el potencial de ganancia
  4. Optimice la lógica de stop loss con KAMA, las nubes de Ichimoku y las señales de menor marco de tiempo

Conclusión

Esta estrategia combina los puntos fuertes de la tendencia de seguimiento y el comercio de retroceso utilizando un sistema de media móvil dual para detectar oportunidades. Al mismo tiempo, las condiciones de sobrecompra / sobreventa incrustadas evitan la apertura de posiciones innecesarias. Es una estrategia de comercio de cantidades muy práctica que merece una investigación y optimización más profundas.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep    = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin    = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')

// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2   = (ma2/ma1-1) < too_deep
too_thin2   = (ma2/ma1-1) > too_thin

// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1  = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na

// Entry and close orders
if buy_condition
    strategy.entry('Long',strategy.long)
if buy_condition[1]
    buy_price := open
if close_condition1 or close_condition2
    strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
    buy_price := na

plot(ma1,color = color.blue)
plot(ma2,color = color.orange)



Más.