Estrategia de negociación de fluctuación de compensación de la SMA

El autor:¿ Qué pasa?, Fecha: 2023-12-19 10:52:10
Las etiquetas:

img

Resumen de la estrategia

Esta estrategia utiliza promedios móviles simples (SMA) y algunos cálculos matemáticos para determinar puntos de compra / venta. Mantenemos una línea SMA de 100 días como nuestra base. Si el precio de cierre está por debajo de esta línea, determinamos la posición de apertura en función del porcentaje en que el precio está por debajo de la línea (bajo desplazamiento), que es configurable. Del mismo modo, establecemos un alto porcentaje de desplazamiento por encima de la SMA de 100 días antes de cerrar posiciones largas. Si tratamos de cerrar demasiado pronto mientras el precio todavía está subiendo, se activará el stop loss trasero.

Estrategia lógica

La estrategia utiliza tres líneas SMA: línea rápida (default 14 días), línea lenta (default 100 días) y línea de referencia (default 30 días).

Se hace largo cuando el precio de cierre está por debajo de la línea de referencia, el porcentaje por debajo de la línea lenta (bajo desplazamiento) es mayor que el valor configurado, la línea rápida está subiendo y la línea lenta está cayendo.

Cierra largo cuando el precio de cierre está por encima de la línea de referencia, el porcentaje por encima de la línea lenta (alta compensación) es mayor que el valor configurado, el precio de cierre subió durante 3 velas consecutivas, tenemos ganancias abiertas y la línea rápida está por encima de la línea lenta.

El tamaño de la orden se basa en un porcentaje del capital total, esto controla el tamaño de nuestra posición.

Análisis de ventajas

  1. Utilice la ventaja de que el SMA puede suavizar las fluctuaciones de precios y filtrar el ruido del mercado.
  2. Los cruces de SMA tienen cierta capacidad para predecir los cambios de tendencia.
  3. El ajuste de desplazamientos evita falsas rupturas de las líneas SMA.
  4. La combinación de indicadores de tendencia y cruce mejora la precisión de las señales comerciales.
  5. El seguimiento del stop loss bloquea las ganancias y previene las reducciones.

Análisis de riesgos

  1. La SMA en sí tiene retraso y puede perder los puntos de inflexión del precio.
  2. Un ajuste de desplazamiento incorrecto puede hacer que la estrategia sea demasiado agresiva o demasiado conservadora.
  3. El parámetro de stop loss incorrecto puede detenerse demasiado pronto o el porcentaje de stop loss demasiado grande.
  4. Incapaz de hacer frente a las violentas oscilaciones de precios.

Mejoras correspondientes:

  1. Añadir otros indicadores principales a las entradas de filtro.
  2. Prueba de retroceso y optimiza los desplazamientos.
  3. Prueba y encuentra los parámetros óptimos de stop loss.
  4. Reducir el tamaño de la posición durante los períodos de alta volatilidad.

Direcciones de optimización

  1. Prueba las SMA de diferentes períodos para encontrar los parámetros óptimos.
  2. Añadir otros indicadores para determinar la estructura y la tendencia del mercado.
  3. Optimice los parámetros de stop loss para obtener más ganancias.
  4. Ajustar el tamaño de las posiciones en función de la volatilidad del mercado.
  5. Aplicar la estrategia a varios productos simultáneamente para la diversificación.

Conclusión

La estrategia de negociación de fluctuación de compensación de SMA identifica los puntos de entrada óptimos estableciendo compensaciones basadas en diferentes líneas de SMA. El mecanismo de salida establece una parada de pérdida para bloquear las ganancias. Esta estrategia es simple de entender e implementar. Al optimizar parámetros como períodos de SMA, compensaciones, niveles de parada de pérdida, se pueden lograr mejores resultados. Es adecuado para inversores a mediano y largo plazo que buscan ganancias constantes.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
strategy(shorttitle="SMA+Strategy", title="SMA Offset Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.001, "Low Offset (%)", minval=0, step=0.001)
highOffset = input(0.0164, "High Offset (%)", minval=0, step=0.0001)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
distanceLow = (close - smaSlow) / close
distanceHigh = (close - smaSlow) / close

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// guard that the low is under our sma low reference line by our lowOffset %, 
// default is 0.001. (low < smaRef) and (distanceLow > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (distanceLow > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow, 1)) 

// The sell Strategy:
// Guard that close is higher than our sma high reference line by our 
// highOffset %, default is 0.0164. (close > smaRef) and (distanceHigh > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (distanceHigh > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 1.35 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=1.35) * 0.01
     
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

Más.