Esta estrategia es una estrategia de negociación de doble dirección que rastrea la volatilidad. Utiliza el indicador Average True Range (ATR) para establecer las pérdidas de parada y determina la dirección de la tendencia basada en el precio que rompe el nivel de pérdida de parada.
La estrategia utiliza ATR de 3 días para calcular la volatilidad. El valor de ATR multiplicado por un coeficiente se utiliza como el nivel de stop loss. Cuando el precio está por encima del nivel de stop loss, lo juzga como una tendencia alcista y cierra posiciones largas cuando el precio cae por debajo del nivel de stop loss. Cuando el precio está por debajo del nivel de stop loss, lo juzga como una tendencia bajista y cierra posiciones cortas cuando el precio se eleva por encima del nivel de stop loss.
Para mitigar los riesgos: aumentar el coeficiente ATR para niveles de parada más amplios, limitar la frecuencia de operaciones, establecer niveles mínimos de toma de ganancias, etc.
Esta es una estrategia general estable de parada de seguimiento de doble dirección. ATR establece niveles de parada dinámicos para controlar las reducciones. La negociación de doble dirección también aumenta las posibilidades de ganancia.
/*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