Estrategia de stop loss en dos etapas


Fecha de creación: 2023-10-25 18:11:30 Última modificación: 2023-10-25 18:11:30
Copiar: 0 Número de Visitas: 729
1
Seguir
1617
Seguidores

Estrategia de stop loss en dos etapas

Descripción general

La idea principal de la estrategia es establecer dos puntos de parada, y cuando se activa el primer punto de parada, el punto de parada se traslada al precio de entrada, para evitar que el stop se bloquee.

Principio de estrategia

Esta estrategia se basa en el indicador de la banda de Brin y el indicador estocástico de entrada. Hacer vacío cuando el precio está por encima de la banda de Brin y hacer más cuando el indicador estocástico muestra una sobreventa.

En concreto, la lógica de entrada de la estrategia es la siguiente:

  1. Hacer una entrada adicional cuando el precio de cierre está por debajo de la banda de Brin y la línea Stochastic K pasa por la línea D

  2. Cuando el precio de cierre está por encima de la banda de Brin y la línea Stochastic K cruza la línea D y se abre la entrada

La estrategia establece dos puntos de parada, el primero fijado en 200 y el segundo en 500.

Cuando se activa el primer punto de parada en el movimiento de precios, la estrategia mueve el punto de parada al precio de entrada. De esta manera, se puede bloquear las ganancias de la primera etapa, al tiempo que se evita que el stop loss se vea afectado por las fluctuaciones de precios.

Cuando se activa el segundo punto de parada o se activa el punto de parada, la estrategia se liquida por completo.

Ventajas estratégicas

La mayor ventaja de esta estrategia de parada de dos etapas es que se puede lograr el bloqueo de ganancias, al mismo tiempo que se evita que la parada se encuentre al borde de la fluctuación del precio. Al mover el punto de parada al precio de entrada, se puede reducir la probabilidad de que la parada se encuentre al borde de la fluctuación del precio, protegiendo las ganancias.

Otra ventaja es que la estrategia utiliza una combinación de un indicador de Brin para determinar el rango de fluctuación de los precios y un indicador estocástico para determinar el exceso de compra y venta, que se complementan entre sí y pueden mejorar la precisión de la entrada.

Riesgo estratégico

El principal riesgo de esta estrategia es que tanto el indicador de la banda de Brin como el indicador estocástico pueden generar señales erróneas. Si el rango de la banda de Brin se calcula erróneamente, se perderá el tiempo de entrada o se generará una señal errónea. Si el indicador estocástico produce una falsa ruptura, también se producirá una entrada errónea.

Además, el movimiento de los puntos de parada al precio de entrada también conlleva el riesgo de ser recaudado. Si se produce una reversión de tipo V, los puntos de parada pueden ser activados por segunda vez.

Para reducir estos riesgos, se pueden ajustar los parámetros de las bandas de Bryn, optimizar la combinación de parámetros de los indicadores estocásticos y aumentar adecuadamente el intervalo de los puntos de parada.

Dirección de optimización de la estrategia

La estrategia de detención de pérdidas en dos etapas puede ser optimizada aún más:

  1. Se pueden probar diferentes combinaciones de parámetros, optimizar los parámetros de las bandas de Bryn y los parámetros estocásticos para encontrar la combinación óptima de parámetros.

  2. Se pueden probar diferentes configuraciones de punto de parada, optimizar el tamaño del punto de parada y encontrar la configuración óptima.

  3. Se pueden agregar otros indicadores, como el promedio móvil, para formar una estrategia de combinación de indicadores múltiples y mejorar la precisión de la entrada.

  4. Se pueden estudiar diferentes lógicas de movimiento del punto de parada, como el movimiento a un cierto intervalo, en lugar del precio de entrada.

  5. Se puede aumentar el número de movimientos de los puntos de parada y configurar movimientos de parada de tres o más etapas.

Resumir

Esta estrategia utiliza el indicador de la banda de Brin y el indicador estocástico para determinar el momento de entrada, establece dos puntos de parada y mueve el punto de parada al precio de entrada después de que se alcance el primer punto de parada, formando una estrategia de parada en dos etapas. Esta estrategia puede bloquear efectivamente las ganancias y evitar que las paradas se bloqueen. La estrategia tiene ventajas destacadas, pero también hay cierto espacio para mejorar. La estrategia puede perfeccionarse aún más a través de la optimización de parámetros, la combinación de varios indicadores, el ajuste lógico del punto de parada, etc.

Código Fuente de la Estrategia
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © fpsd4ve

//@version=5

// Add Bollinger Bands indicator (close, 20, 2) manually to visualise trading conditions
strategy("2xTP, SL to entry", 
     overlay=false,
     pyramiding=0,
     calc_on_every_tick=false,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=25,
     initial_capital=1000,
     commission_type=strategy.commission.percent,
     commission_value=0.01
     )

// PARAMETERS
// Assumes quote currency is FIAT as with BTC/USDT pair
tp1=input.float(200, title="Take Profit 1")
tp2=input.float(500, title="Take Profit 2")
sl=input.float(200, title="Stop Loss")
stOBOS = input.bool(true, title="Use Stochastic overbought/oversold threshold")

// Colors
colorRed = #FF2052
colorGreen = #66FF00


// FUNCTIONS
// Stochastic
f_stochastic() =>
    stoch = ta.stoch(close, high, low, 14)
    stoch_K = ta.sma(stoch, 3)
    stoch_D = ta.sma(stoch_K, 3)
    stRD = ta.crossunder(stoch_K, stoch_D)
    stGD = ta.crossover(stoch_K, stoch_D)
    [stoch_K, stoch_D, stRD, stGD]


// VARIABLES
[bbMiddle, bbUpper, bbLower] = ta.bb(close, 20, 2)
[stoch_K, stoch_D, stRD, stGD] = f_stochastic()


// ORDERS
// Active Orders
// Check if strategy has open positions
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
// Check if strategy reduced position size in last bar
longClose = strategy.position_size < strategy.position_size[1]
shortClose = strategy.position_size > strategy.position_size[1]

// Entry Conditions
// Enter long when during last candle these conditions are true:
// Candle high is greater than upper Bollinger Band
// Stochastic K line crosses under D line and is oversold
longCondition = stOBOS ?
     low[1] < bbLower[1] and stGD[1] and stoch_K[1] < 25 :
     low[1] < bbLower[1] and stGD[1]

// Enter short when during last candle these conditions are true:
// Candle low is lower than lower Bollinger Band
// Stochastic K line crosses over D line and is overbought
shortCondition = stOBOS ?
     high[1] > bbUpper[1] and stRD[1] and stoch_K[1] > 75 :
     high[1] > bbUpper[1] and stRD[1]

// Exit Conditions
// Calculate Take Profit 
longTP1 = strategy.position_avg_price + tp1
longTP2 = strategy.position_avg_price + tp2
shortTP1 = strategy.position_avg_price - tp1
shortTP2 = strategy.position_avg_price - tp2

// Calculate Stop Loss
// Initialise variables
var float longSL = 0.0
var float shortSL = 0.0

// When not in position, set stop loss using close price which is the price used during backtesting
// When in a position, check to see if the position was reduced on the last bar
// If it was, set stop loss to position entry price. Otherwise, maintain last stop loss value
longSL := if inLong and ta.barssince(longClose) < ta.barssince(longCondition)
    strategy.position_avg_price
else if inLong
    longSL[1]
else
    close - sl

shortSL := if inShort and ta.barssince(shortClose) < ta.barssince(shortCondition)
    strategy.position_avg_price
else if inShort
    shortSL[1]
else
    close + sl

// Manage positions
strategy.entry("Long", strategy.long, when=longCondition)
strategy.exit("TP1/SL", from_entry="Long", qty_percent=50, limit=longTP1, stop=longSL)
strategy.exit("TP2/SL", from_entry="Long", limit=longTP2, stop=longSL)

strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("TP1/SL", from_entry="Short", qty_percent=50, limit=shortTP1, stop=shortSL)
strategy.exit("TP2/SL", from_entry="Short", limit=shortTP2, stop=shortSL)


// DRAW
// Stochastic Chart
plot(stoch_K, color=color.blue)
plot(stoch_D, color=color.orange)

// Circles
plot(stOBOS ? stRD and stoch_K >= 75 ? stoch_D : na : stRD ? stoch_D : na, color=colorRed, style=plot.style_circles, linewidth=3)
plot(stOBOS ? stGD and stoch_K <= 25 ? stoch_D : na : stGD ? stoch_K : na, color=colorGreen, style=plot.style_circles, linewidth=3)

// Levels
hline(75, linestyle=hline.style_dotted)
hline(25, linestyle=hline.style_dotted)