
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.
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.
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.
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.
/*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