Estrategia de salida de ganancias por porcentaje múltiple

El autor:¿ Qué pasa?, Fecha: 2023-12-01 15:22:29
Las etiquetas:

img

Resumen general

Esta estrategia implementa la funcionalidad de establecer salidas de ganancias porcentuales múltiples. La estrategia primero juzga las condiciones largas y cortas para ingresar posiciones. Luego utiliza una función personalizada percentAsPoints para convertir los porcentajes en ticks de precios. El programa establece 4 salidas con porcentajes de ganancias de 1%, 2%, 3% y 4% basados en las configuraciones, y también establece una salida de stop loss común de 2%. Esto logra el efecto de salidas de ganancias porcentuales múltiples.

Estrategia lógica

La lógica central de esta estrategia es usar cruces SMA para determinar entradas. Específicamente, cuando el SMA rápido (14) cruza por encima del SMA lento (28), será largo. Cuando el SMA rápido (14) cruza por debajo del SMA lento (28), será corto.

Entonces, ¿cómo establecer salidas de ganancias porcentuales múltiples? Aquí se utiliza una función personalizada de porcentajeAsPoints para convertir los porcentajes en ticks de precios.

percentAsPoints(pcnt) =>
    strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) 

Si el tamaño de la posición no es 0, calcula los ticks de precio por porcentaje multiplicado por el precio medio de entrada y dividido por el tamaño mínimo de tick.

Con esta función, podemos convertir fácilmente los porcentajes en ticks. El programa luego establece 4 salidas basadas en porcentajes de ganancias de 1%, 2%, 3% y 4%:

lossPnt = percentAsPoints(2)

strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)   

strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)

strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)  

strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)

También se utiliza un stop loss común del 2% para todas las salidas. Esto logra el efecto de salidas de ganancias porcentuales múltiples.

Análisis de ventajas

Esta estrategia de salida de ganancias porcentuales múltiples tiene las siguientes ventajas:

  1. Por lo general, las salidas posteriores tienen objetivos de ganancias más grandes y riesgos más altos, y esta estrategia equilibra los riesgos y los rendimientos.

  2. La salida por lotes permite la recuperación de capital, reduciendo los riesgos. Por ejemplo, con un tamaño de lote del 25%, el 1% de ganancia puede devolver 1/4 del capital, y las posiciones posteriores son todas por ganancias puras.

  3. El 2% de stop loss evita pérdidas extremas en movimientos anormales del mercado.

  4. La implementación es simple y limpia, fácil de entender y modificar.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Las salidas porcentuales pueden causar una agitación lateral, con precios que oscilan alrededor de los precios de salida, lo que desencadena salidas frecuentes.

  2. Las salidas por lotes aumentan el número de operaciones y las comisiones.

  3. Las salidas demasiado conservadoras pueden conducir a ganancias insuficientes, mientras que las salidas demasiado agresivas tienen mayores riesgos.

  4. Las salidas de porcentaje fijo no tienen en cuenta la volatilidad y las tendencias del mercado.

Direcciones de optimización

Teniendo en cuenta los riesgos anteriores, podrían realizarse nuevas optimizaciones en los siguientes aspectos:

  1. Optimizar las salidas para adaptarse en función de la volatilidad y la fortaleza del mercado utilizando métodos como las salidas ATR. Salidas más ajustadas en mercados agitados y salidas más amplias en tendencias fuertes.

  2. Optimice los porcentajes y rangos de lotes para encontrar combinaciones óptimas de riesgo y retorno. Agregue la optimización de parámetros para encontrar los mejores parámetros.

  3. Reducir el número de salidas para evitar el exceso de negociación. Por ejemplo, establecer una zona de amortiguamiento de precios, sólo salir después de superar cierto movimiento de precios.

  4. Tenga en cuenta los factores de comisión, evite salidas donde la ganancia proyectada es menor que los costos de comisión.

  5. Utilice salidas de cartera de órdenes basadas en la profundidad en lugar de mover los precios de salida.

Resumen de las actividades

Esta estrategia logra el efecto de salidas de ganancias porcentuales múltiples, con 4 salidas al 1%, 2%, 3% y 4%, lo que permite salidas rentables graduales, y el uso del 2% de stop loss para evitar grandes pérdidas en movimientos extremos. Equilibra los riesgos y los rendimientos y evita perder más ganancias. Pero existen algunos riesgos como la agitación y mayores frecuencias comerciales. Las sugerencias de optimización proporcionadas pueden ayudar a mejorar el rendimiento en más condiciones de mercado cuando se incorporan a la estrategia.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov

//@version=4
strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10)

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

percentAsPoints(pcnt) =>
    strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

lossPnt = percentAsPoints(2)

strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)

profitPercent(price) =>
    posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
    (price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100

p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound")
p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound")
fill(p1, p2, color = color.red)

Más.