Estrategia de trading de ruptura del indicador de momentum


Fecha de creación: 2023-09-18 21:28:22 Última modificación: 2023-09-18 21:28:22
Copiar: 0 Número de Visitas: 691
1
Seguir
1617
Seguidores

Descripción general

La estrategia utiliza el indicador de movimiento del Brin para realizar operaciones de ruptura, principalmente para determinar si el precio ha roto el Brin y se ha desviado, emitiendo una señal de compra y venta.

El principio

La estrategia se basa principalmente en el indicador de la banda de Brin para determinar la dirección de la tendencia. La banda de Brin es una zona en forma de banda formada por una media móvil y su diferencia estándar. La línea media de la banda de Brin es la media móvil de n días, la línea superior es la media + 2 veces la diferencia estándar y la línea inferior es la media - 2 veces la diferencia estándar.

Concretamente, la estrategia primero calcula los precios más altos y más bajos en n días, y calcula el precio medio (((precio más alto + precio más bajo) / 2). Luego calcula la media móvil ponderada de la distancia entre el precio de cierre y el precio medio para formar la línea media de la banda de Brin, y la línea media se suma a la diferencia estándar de 2 veces para formar la subida y bajada.

Si el precio de cierre de la bolsa rompe la vía, indica que está en una tendencia alcista; si rompe la vía, indica que está en una tendencia descendente. Haga más cuando rompa la vía, haga más cuando rompa la vía.

Además, la estrategia también introdujo un mecanismo de apertura de posición inversa. Cuando el precio rompe la banda de Brin y se pone en marcha, si el MACD está bajando, se tomará una operación de mercado inverso para cerrar.

Las ventajas

  1. El uso de la cinta de Bryn para determinar la dirección de la tendencia tiene cierta capacidad de seguimiento de tendencias.

  2. El diseño inverso de la apertura de la posición puede obtener ganancias adversas.

  3. Se pueden personalizar los parámetros como el ciclo de la banda de Bryn y el múltiplo de la diferencia estándar para adaptarse a las transacciones de diferentes períodos.

  4. Se puede cerrar y reabrir para reducir el riesgo.

Riesgos y contramedidas

  1. Las bandas de Brin se utilizan a menudo en acciones de alta volatilidad y pueden no ser adecuadas para variedades de largo ciclo como Resources o índices. Se puede probar la eficacia de diferentes parámetros de ciclo.

  2. La señal de ruptura puede presentar falsas rupturas. Se puede combinar con otros factores para filtrar la señal.

  3. La apertura de posiciones inversa puede ampliar aún más las pérdidas. Se puede cerrar el módulo de apertura de posiciones inversa.

  4. El retiro puede ser mayor. Se puede ajustar la escala de la posición adecuadamente.

Dirección de optimización

  1. Se puede considerar la inclusión de filtros de tendencia para evitar mercados convulsivos con direcciones inciertas.

  2. Se puede probar el múltiplo de la diferencia estándar de la banda de Bryn para buscar un parámetro más adecuado.

  3. Se pueden introducir estrategias de stop loss para controlar las pérdidas individuales.

  4. Se puede optimizar la lógica de apertura y subida de posiciones para que las señales de negociación sean más claras.

Resumir

Esta estrategia se basa en el indicador de la banda de Brin, para determinar la ruptura de la tendencia del precio. La estrategia de seguimiento de tendencia básica se puede lograr con la configuración de parámetros simples.

Overview

This strategy uses Bollinger Bands momentum indicator for breakout trading, mainly judging if price breaks through the upper or lower Bollinger Bands for trading signals.

Principles

The strategy is primarily based on Bollinger Bands indicator to determine trend direction. Bollinger Bands consist of a middle band based on a moving average and upper/lower bands defined by standard deviations. The middle band is a n-period moving average, the upper band is middle band + 2 standard deviations, and the lower band is middle band - 2 standard deviations. When price approaches the upper band it indicates overbought conditions, and when it approaches the lower band it signals oversold conditions.

Specifically, the strategy first calculates the highest high and lowest low over last n periods, and the middle price ((highest high + lowest low)/2). It then calculates the distance between close price and middle price, uses exponential moving average of the distance to form the middle band, and adds/subtracts 2 times standard deviation above and below to form the upper and lower bands.

When close price breaks through the upper band, it signals an uptrend; when it breaks the lower band, it signals a downtrend. The strategy goes long when the upper band is broken, and goes short when the lower band is broken.

In addition, the strategy incorporates a counter-trend mechanism. When price breaks the upper band but MACD is falling, it will take a counter-trend short position.

Advantages

  1. Using Bollinger Bands to determine trend direction provides certain trend following capability.

  2. Counter-trend design allows profiting from reversals.

  3. Customizable parameters like period and standard deviation multiples make it adaptable to different trading horizons.

  4. Disable counter-trend trading to reduce risk.

Risks and Mitigations

  1. Bollinger Bands work best for high volatility stocks, may not be suitable for stable commodities or indices. Can test different period parameters.

  2. Breakout signals may have false breakouts. Can add filters with other indicators.

  3. Counter-trend trading can further increase losses. Can disable counter-trend module.

  4. Drawdowns may be significant. Can adjust position sizing.

Enhancement Opportunities

  1. Consider adding trend filter to avoid whipsaw in non-directional markets.

  2. Test different standard deviation multiples to find optimal parameters.

  3. Incorporate stop loss to control single trade loss.

  4. Optimize entry and add-on logic for clearer trading signals.

Summary

The strategy uses Bollinger Bands as the primary indicator and trades based on trend breakouts. With simple parameters it provides basic trend following capabilities. But false breakout risks exist, requiring additional filters. Parameters, stop loss and risk controls can be enhanced. Overall it serves as a reasonable baseline breakout strategy.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()