Estrategia de interrupción de la oscilación eficiente con doble stop-profit y stop-loss

El autor:¿ Qué pasa?, Fecha: 2024-02-01 14:46:00
Las etiquetas:

img

Resumen general

Esta es una estrategia de negociación bidireccional altamente eficiente diseñada sobre la base de indicadores de canal y principios de ruptura. Puede lograr una alta tasa de ganancia de negociación bidireccional en acciones y criptomonedas en marcos de tiempo de 1 minuto.

Estrategia lógica

La estrategia utiliza indicadores SMA para construir canales. Se entra en largo cuando el precio se rompe por encima del canal y entra en corto cuando los precios se rompen por debajo del canal.

Específicamente, la estrategia calcula el carril superior e inferior del canal. El carril superior es el SMA de 10 períodos del precio cerrado multiplicado por 1.02; El carril inferior es el SMA de 10 períodos del precio más bajo dividido por 1.02. Ir largo cuando el precio cerrado rompe por encima del carril superior, ir corto cuando el precio cerrado rompe por debajo del carril inferior.

Después de ir largo, dos niveles de take profit se establecen en el 1% y el 3% respectivamente, con un stop loss del 3%.

Análisis de ventajas

Las estrategias de ruptura de canal como esta tienen ventajas como señales de entrada claras, alta frecuencia de operación, obtención de ganancias de varios niveles, etc. Las principales ventajas son:

  1. El uso de indicadores de canal para identificar el rango de oscilación de precios y seleccionar puntos de ruptura para entrar puede obtener una tasa de ganancia relativamente alta.

  2. Operando en un gráfico de 1 minuto para capturar más oportunidades y satisfacer la necesidad de comercio de velocidad.

  3. Tener dos niveles de toma de ganancias permite bloquear más ganancias cuando la tendencia va bien.

  4. Un stop loss relativamente amplio le da al movimiento del precio algo de espacio, evitando un stop loss prematuro.

Análisis de riesgos

El mayor riesgo con estas estrategias de ruptura son las rupturas falsas que conducen a pérdidas.

  1. Las señales de ruptura pueden ser falsas y no alcanzar el take profit o el stop loss. Un problema común en el análisis técnico.

  2. El umbral de stop loss en el 3% podría ser difícil para algunos comerciantes de soportar.

  3. Esta estrategia es más adecuada para el comercio a corto plazo y necesita monitoreo.

Direcciones de optimización

Las estrategias de ruptura de tendencia como esta pueden optimizar principalmente en los siguientes aspectos:

  1. Pruebe más indicadores para construir canales y encuentre otros más confiables para reducir las fallas.

  2. Optimice el ajuste de parámetros de promedio móvil, descubra las mejores combinaciones de parámetros.

  3. Prueba mecanismos de entrada más complejos, como añadir filtros de volumen, etc.

  4. Establecer combinaciones de parámetros adaptables a las características de los diferentes productos para lograr la autoadaptación de los parámetros.

  5. Añadir mecanismos de pérdida de parada automática que ajustan dinámicamente la pérdida de parada con el tiempo.

Conclusión

Esta es una estrategia de comercio bidireccional eficiente basada en indicadores de canal. Ingresa a los mercados a través de principios de ruptura, doble toma de ganancias para bloquear recompensas, stop loss para controlar riesgos. Una optimización adicional puede lograr resultados aún mejores. Pero los operadores aún deben tener cuidado con riesgos como falsos breakouts.


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

//@version=4
strategy("Erweiterte SSL Channel Strategy mit 2 TPs, SL und BE", overlay=true)

period = input(title="Period", defval=10)
len = input(title="Length", defval=10)
multiplier = input(title="Multiplier", defval=1.0, minval=1.0)
tp1Percent = input(title="Take Profit 1 (%)", defval=1.0) / 100
tp2Percent = input(title="Take Profit 2 (%)", defval=20.0) / 100
slPercent = input(title="Stop Loss (%)", defval=3.0) / 100

var float tp1Price = na
var float tp2Price = na
var float slPrice = na
var bool tp1Reached = false

smaHigh = sma(high * multiplier, len)
smaLow = sma(low / multiplier, len)

Hlv = 0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : nz(Hlv[1])
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

plot(sslDown, linewidth=2, color=color.red)
plot(sslUp, linewidth=2, color=color.lime)

longCondition = crossover(close, sslUp)
shortCondition = crossunder(close, sslDown)

if (longCondition)
    strategy.entry("Long", strategy.long)
    tp1Price := strategy.position_avg_price * (1 + tp1Percent)
    tp2Price := strategy.position_avg_price * (1 + tp2Percent)
    slPrice := strategy.position_avg_price * (1 - slPercent)
    tp1Reached := false

if (shortCondition)
    strategy.entry("Short", strategy.short)
    tp1Price := strategy.position_avg_price * (1 - tp1Percent)
    tp2Price := strategy.position_avg_price * (1 - tp2Percent)
    slPrice := strategy.position_avg_price * (1 + slPercent)
    tp1Reached := false

// Take Profit, Break-even und Stop-Loss Logik
if (strategy.position_size > 0) // Long-Positionen
    if (not tp1Reached and close >= tp1Price)
        strategy.close("Long", qty_percent = 50)
        strategy.exit("BE Long", "Long", stop = strategy.position_avg_price)
        tp1Reached := true
    if (tp1Reached and close < tp1Price)
        strategy.exit("BE Long", "Long", stop = strategy.position_avg_price)
    if (close >= tp2Price)
        strategy.close("Long", qty_percent = 100)
    if (not tp1Reached)
        strategy.exit("SL Long", "Long", stop = slPrice)

if (strategy.position_size < 0) // Short-Positionen
    if (not tp1Reached and close <= tp1Price)
        strategy.close("Short", qty_percent = 50)
        strategy.exit("BE Short", "Short", stop = strategy.position_avg_price)
        tp1Reached := true
    if (tp1Reached and close > tp1Price)
        strategy.exit("BE Short", "Short", stop = strategy.position_avg_price)
    if (close <= tp2Price)
        strategy.close("Short", qty_percent = 100)
    if (not tp1Reached)
        strategy.exit("SL Short", "Short", stop = slPrice)


Más.