Estrategia de volatilidad envolvente bidireccional


Fecha de creación: 2023-11-21 12:04:19 Última modificación: 2023-11-21 12:04:19
Copiar: 0 Número de Visitas: 605
1
Seguir
1617
Seguidores

Estrategia de volatilidad envolvente bidireccional

Descripción general

La estrategia es una estrategia de negociación bidireccional que sigue la fluctuación. Utiliza el indicador ATR de fluctuación real promedio para establecer un punto de parada y determinar la dirección de la tendencia en función de la dirección en que el precio rompe el punto de parada.

Principio de estrategia

La estrategia utiliza la volatilidad del ATR de 3 días. El valor del ATR se multiplica por un factor como punto de parada. Cuando el precio está por encima del punto de parada, se juzga como una tendencia alcista y se cierra cuando el precio baja por encima del punto de parada; cuando el precio está por debajo del punto de parada, se juzga como una tendencia a la baja y se cierra cuando el precio sube por encima del punto de parada.

Análisis de las ventajas

  • Utiliza ATR para rastrear la volatilidad del mercado de forma dinámica, reduciendo la probabilidad de que se rompa el stop loss
  • El comercio bidireccional, donde se puede beneficiarse de las fluctuaciones bidireccionales del mercado
  • El punto de apertura inverso se elige al comienzo de la tendencia para aumentar la probabilidad de obtener ganancias

Análisis de riesgos

  • El ATR no refleja adecuadamente la volatilidad real, lo que hace que el stop loss se rompa.
  • Las posiciones múltiples con riesgo de GAP
  • Es probable que haya pequeñas ganancias y pérdidas frecuentes.

En función del riesgo, se puede aumentar adecuadamente el coeficiente ATR, aumentar el área de amortiguamiento de pérdidas, controlar la frecuencia de las transacciones, establecer el límite mínimo de pérdidas, etc.

Dirección de optimización

  • Indicadores de cambio de tendencia en combinación con otros indicadores
  • Optimización de los parámetros ATR
  • El control de volumen de transacciones

Resumir

La estrategia en su conjunto es una estrategia de seguimiento de pérdidas binarias estable. Con el indicador ATR, se establece de forma dinámica el stop loss y se controla el riesgo de retiro. Al mismo tiempo, la negociación bidireccional aumenta la oportunidad de obtener ganancias.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BCH Swinger v1", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)

/////////////////////////////////////////////////////////////
//START - SET DATE RANGE

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year")
ToMonth   = input(defval = 10, title = "To Month", minval = 1)
ToDay     = input(defval = 01, title = "To Day", minval = 1)
ToYear    = input(defval = 2020, title = "To Year")

startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true

/////////////////////////////////////////////////////////////
//END - SET DATE RANGE



/////////////////////////////////////////////////////////////
//START - INDICATORS

length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)

/////////////////////////////////////////////////////////////
//END - INDICATORS



/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction",  minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange

strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)

/////////////////////////////////////////////////////////////
//END - TRADING RULES