
Esta estrategia es una estrategia de comercio de oscilación diurna basada en la tecnología de la dinámica, que utiliza el ATR Stop Loss. La estrategia fue creada por Kory Hoang de Stably.
La estrategia utiliza el indicador de dinámica para identificar la dirección de la tendencia, en combinación con el indicador ATR para establecer una línea de parada y pérdida, para lograr una estrategia de comercio de convulsiones de bajo precio y alto precio.
En primer lugar, el código establece el rango de tiempo de la detección.
Luego, en la sección de indicadores, se calculan los siguientes:
La principal lógica para juzgar las tendencias es:
Si el cierre es superior a la línea de parada anterior a la caída, se considera una tendencia alcista; si el cierre es inferior a la línea de parada anterior a la subida, se considera una tendencia bajista.
Ajuste la posición de la línea de stop loss en caso de cambio de tendencia.
En concreto, en una tendencia ascendente, la línea de parada se define como el precio más alto de la línea K anterior menos el valor de ATR; en una tendencia descendente, la línea de parada se define como el precio más bajo de la línea K anterior más el valor de ATR.
Esto permite el seguimiento de la tendencia y el stop loss.
En la parte de reglas de negociación, se puede hacer más caída cuando se abre una posición y se rompe la línea de parada.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Se puede optimizar en los siguientes aspectos:
La estrategia puede ser optimizada en las siguientes direcciones:
Prueba diferentes parámetros de ATR para encontrar la combinación óptima de parámetros. Se pueden volver a medir varios grupos de parámetros para evaluar la relación de riesgo-beneficio.
Se puede introducir un indicador de fluctuación para relajar adecuadamente el stop loss cuando la fluctuación aumenta.
En combinación con el filtro de tendencias, evitar que los mercados de la oscilación no necesiten abrir posiciones. Puede aumentar los indicadores de juicio de tendencias y abrir posiciones solo cuando la tendencia es clara.
Mecanismos de gestión de posiciones. Se puede ajustar la posición en función de la utilización de los fondos, el número de paradas de pérdidas continuas, etc.
Aumentar el control de riesgo de la brecha nocturna. Se puede detener activamente el pérdida antes del cierre, evitando que los precios de la noche a la mañana se disparen.
Esta estrategia sirve como una estrategia básica de negociación de la oscilación intradiaria, con una idea general clara, el uso de técnicas de dinámica para juzgar las tendencias y el uso del indicador ATR para el seguimiento de los puntos de parada de los puntos de deslizamiento, para controlar el riesgo de manera efectiva.
Hay mucho espacio para la optimización, y luego se puede mejorar desde varios puntos de vista, como el juicio de tendencias, el método de stop loss y la administración de posiciones, para que la estrategia sea más adecuada para el comercio en el mercado real. En general, esta estrategia proporciona un buen marco básico para el comercio cuantitativo.
/*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