Estrategia de negociación de movimiento

El autor:¿ Qué pasa?, Fecha: 2024-02-05 10:44:19
Las etiquetas:

img

Resumen general

Esta es una estrategia de negociación de swing de intervalo diario basada en técnicas de impulso utilizando ATR Stops. Fue creada por Kory Hoang de Stably.

La estrategia identifica la dirección de la tendencia utilizando indicadores de impulso y establece líneas de stop loss basadas en ATR para implementar el swing trading de compra baja-venta alta.

Estrategia lógica

El código primero establece el rango de tiempo de backtesting.

Luego, en la sección de indicadores, se calculan los siguientes indicadores:

  • atr(): calcular el ATR para el stop loss;
  • max_/min_: el precio más alto/más bajo de la barra anterior;
  • is_uptrend: juzgar si está en una tendencia alcista;
  • Zobraz: línea de pérdida de parada;

La lógica principal para juzgar la tendencia es:

Si el cierre es superior a la línea de stop loss ascendente anterior, se considera una tendencia alcista; si el cierre es inferior a la línea de stop loss ascendente anterior, se considera una tendencia bajista.

Cuando la tendencia cambie, ajuste la posición de la línea de stop loss.

Específicamente, en una tendencia alcista, la línea de stop loss se establece en el precio más alto de la barra anterior menos el valor ATR; en una tendencia bajista, la línea de stop loss se establece en el precio más bajo de la barra anterior más el valor ATR.

Esto realiza la tendencia después de la parada de pérdida.

En la sección de reglas de negociación, abra posiciones largas/cortas cuando el precio rompa la línea de stop loss.

Análisis de ventajas

Las ventajas de esta estrategia:

  1. Juzgar la dirección de la tendencia utilizando técnicas de impulso, detectar puntualmente los puntos de inflexión y evitar falsos breakouts.
  2. ATR stop loss rastrea el precio más alto / más bajo, puede controlar el riesgo bien.
  3. Una lógica estratégica simple y clara, fácil de entender e implementar.
  4. Puede hacer transacciones de compra baja-venta alta entre oscilaciones.

Análisis de riesgos

También hay algunos riesgos:

  1. El parámetro ATR incorrecto puede hacer que la pérdida de frenado sea demasiado floja o demasiado apretada.
  2. Pueden ocurrir violentos golpes en tendencias variadas, causando un stop loss consecutivo.
  3. Alta frecuencia de operaciones, mayores comisiones.

Algunas optimizaciones:

  1. Prueba diferentes parámetros de ATR para encontrar el óptimo.
  2. Optimizar el stop loss combinando métricas de volatilidad en la parte superior del ATR.
  3. Agregue un filtro de tendencia para evitar operaciones innecesarias durante los mercados agitados.

Direcciones de optimización

Algunas direcciones para optimizar esta estrategia:

  1. Prueba diferentes parámetros de ATR para encontrar el óptimo. Prueba posterior de conjuntos de parámetros múltiples y evalúa la relación rendimiento/riesgo.

  2. Añadir métricas de volatilidad, relajar las pérdidas de parada adecuadamente durante los períodos de mayor volatilidad.

  3. Añadir filtro de tendencia para evitar las operaciones durante el mercado agitado.

  4. Añadir un mecanismo de tamaño de posición. Ajustar el tamaño de la posición en función de la tasa de utilización de la cuenta, los tiempos consecutivos de stop loss, etc.

  5. Añadir el control del riesgo de brecha de la noche.

Conclusión

Como una estrategia básica de negociación de swing diario, la lógica general es clara. Juzga la tendencia con técnicas de impulso y utiliza ATR para dejar atrás la pérdida, controlando eficazmente el riesgo.

Todavía hay mucho espacio para la optimización, puede mejorar desde aspectos como el juicio de tendencia, el método de stop loss, el tamaño de la posición, etc. para hacer que la estrategia sea más práctica.


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

Más.