Compra direccional de baja volatilidad con toma de ganancias y stop loss

El autor:¿ Qué pasa?, Fecha: 2023-12-18 12:00:07
Las etiquetas:

img

Resumen general

La estrategia se llama Low Volatility Directional Buy with Profit Taking and Stop Loss. Utiliza el crossover de promedio móvil como señales de compra y combina la toma de ganancias y la parada de pérdidas para bloquear las ganancias. Es adecuado para monedas de baja volatilidad.

Estrategia lógica

La estrategia utiliza 3 promedios móviles con diferentes períodos: 50-período, 100-período y 200-período.

Esto señala una ruptura con el rango de baja volatilidad y el comienzo de una tendencia. El rápido aumento de los MA de 50 períodos representa el fortalecimiento del impulso a corto plazo; el aumento de los MA de 100 períodos también indica que la fuerza a medio plazo se une para estabilizar la tendencia alcista.

Después de la entrada, la estrategia utiliza la toma de ganancias y la parada de pérdidas para bloquear las ganancias. La toma de ganancias se establece en el 8% del precio de entrada. La parada de pérdidas se establece en el 4% del precio de entrada. Con una mayor toma de ganancias sobre la parada de pérdidas, se asegura que la estrategia permanezca rentable en general.

Análisis de ventajas

Las ventajas de esta estrategia:

  1. Captar con precisión las oportunidades de tendencia de las rupturas de baja volatilidad.
  2. Lógica simple y clara con promedios móviles que son fáciles de calcular y backtest.
  3. Las opciones razonables de obtención de ganancias y de detención de pérdidas garantizan ganancias estables.
  4. Los parámetros flexibles y configurables hacen que las optimizaciones sean fáciles.

Análisis de riesgos

También hay algunos riesgos:

  1. Las señales de fuga equivocadas pueden causar pérdidas.
  2. Es difícil detener las pérdidas cuando los mercados se invierten.
  3. El uso incorrecto de los parámetros de toma de ganancias y stop loss afecta a la rentabilidad.

Soluciones:

  1. Añadir otros indicadores para filtrar las señales y garantizar la validez de la ruptura.
  2. Acortar el período de suspensión de pérdidas para reducir las pérdidas por reversión.
  3. Prueba diferentes ratios de toma de ganancias y stop loss para encontrar el óptimo.

Direcciones de optimización

Las optimizaciones pueden realizarse en las siguientes áreas:

  1. Prueba diferentes períodos de promedio móvil para encontrar la mejor combinación.
  2. Añadir volumen, etc. para confirmar las rupturas de tendencia.
  3. Ajuste dinámico del porcentaje de toma de ganancias y stop loss.
  4. Incorporar aprendizaje automático, etc. para predecir la tasa de éxito de la fuga.
  5. Ajustar parámetros basados en diferentes condiciones de mercado y monedas.

En resumen, la estrategia tiene una lógica clara en general, obtiene beneficios de bajo riesgo mediante la configuración de períodos promedio móvil y porcentaje de toma de ganancias / stop loss. Se puede aplicar de manera flexible en el comercio cuantitativo. Se pueden realizar optimizaciones adicionales en áreas como señales de entrada y métodos de stop loss, combinadas con ajuste de parámetros para lograr mejores resultados.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Low volatility Buy w/ TP & SL (by Coinrule)',title='Low volatility Buy w/ TP & SL', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 10,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2019, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

//MA inputs and calculations
movingaverage_fast = sma(close, input(50))
movingaverage_slow = sma(close, input(200))
movingaverage_normal= sma(close, input(100))



//Entry 
strategy.entry(id="long", long = true, when = movingaverage_slow > movingaverage_normal and movingaverage_fast > movingaverage_normal)

//Exit
longStopPrice  = strategy.position_avg_price * (1 - 0.04)
longTakeProfit = strategy.position_avg_price * (1 + 0.08)

strategy.close("long", when = close < longStopPrice or close > longTakeProfit and window())

//PLOT

plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)


Más.