Esta estrategia es una estrategia de trading de oscilación interdiurna basada en la tecnología de movilidad, que utiliza el ATR para detener la pérdida. La estrategia fue creada por Kory Hoang de Stable.
La estrategia utiliza el indicador de movimiento para identificar la dirección de la tendencia, combinado con el indicador ATR para establecer una línea de stop loss, para lograr una estrategia de trading de convulsiones de compras bajas y ventas altas.
En el código, primero se establece el rango de tiempo para la reevaluación.
En la sección de indicadores, se calculan los siguientes indicadores:
La lógica principal para juzgar la tendencia es:
Si el cierre es superior al vstop de la línea de stop de la caída anterior, se considera una tendencia alcista; si el cierre es inferior al vstop de la línea de stop de la caída anterior, se considera una tendencia descendente.
La posición de la línea de stop loss se ajusta cuando la tendencia cambia.
Específicamente, en una tendencia alcista, la línea de stop loss se define como el valor del precio más alto de la línea K anterior menos el ATR; en una tendencia bajista, la línea de stop loss se define como el valor del precio más bajo de la línea K anterior más el ATR.
Esto permite realizar un seguimiento de tendencias y detener los daños.
La parte de las reglas de negociación, cuando se abre una posición y se rompe la línea de stop-loss, se hace más nada.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
La optimización se puede hacer en los siguientes aspectos:
La estrategia puede ser optimizada en las siguientes direcciones:
Prueba de diferentes parámetros ATR para encontrar la combinación óptima de parámetros. Puede volver a probar varios parámetros para evaluar la relación riesgo-beneficio.
Se puede introducir un indicador de fluctuación para liberar adecuadamente la amplitud de la suspensión cuando la oscilación aumenta.
Combinado con el filtrado de tendencias, evitar los mercados inestables no significa abrir una posición. Se puede aumentar el indicador de juicio de tendencias, y solo se puede abrir una posición cuando la tendencia es clara.
Mecanismos de gestión de posiciones aumentados. Las posiciones se pueden ajustar según el uso de fondos, el número de pérdidas consecutivas, etc.
Aumentar el control del riesgo de intervalo nocturno. Se puede detener el riesgo de pérdida antes del cierre, evitando el salto de precios durante la noche.
Esta estrategia sirve como base para las estrategias de trading intradiario de la conmoción, con un pensamiento general claro, el uso de técnicas de determinación de la tendencia de la potencia y el uso de los indicadores ATR para el seguimiento del punto de deslizamiento y el control efectivo del riesgo.
También hay mucho espacio para la optimización, que puede ser mejorada en varios aspectos, como la determinación de tendencias, el método de stop loss, la gestión de posiciones, etc., para hacer que la estrategia sea más adecuada para la negociación real. En general, esta estrategia ofrece un buen marco básico para la negociación cuantitativa.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("BTC Swinger", 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 = 2010, title = "From Year") ToMonth = input(defval = 12, title = "To Month", minval = 1) ToDay = input(defval = 31, 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