Estrategia de posición de impulso de NoroBands

El autor:¿ Qué pasa?, Fecha: 2024-01-18 10:58:48
Las etiquetas:

img

Resumen general

Esta estrategia combina la teoría de bandas de Noro con técnicas cuantitativas para formar una estrategia de ruptura de impulso.

Estrategia lógica

  1. Calcule las bandas superior e inferior utilizando el rango verdadero promedio.
  2. Utilice el indicador RSI para determinar las zonas de sobrecompra y sobreventa.
  3. La ruptura de los precios máximos y mínimos muestra la dirección del impulso del precio.
  4. Las barras de color indican mercados alcistas o bajistas. El verde significa mercado alcista para largo mientras que el rojo significa mercado bajista para corto.
  5. Combinar la media móvil para identificar la divergencia de las señales comerciales.

Ventajas

  1. La combinación de múltiples indicadores mejora la precisión.
  2. La combinación de la teoría de bandas y las técnicas cuantitativas hace que la estrategia sea más efectiva.
  3. La mezcla de impulso de ruptura y la inversión media de comercio amplía la sala de ganancias.
  4. Alta extensibilidad para ajustar los parámetros según los mercados.

Los riesgos

  1. Los parámetros necesitan optimización y pruebas constantes.
  2. No responde a tiempo a los interruptores largos y cortos, causando probablemente pérdidas.
  3. Frecuencia de operaciones alta, afectada fácilmente por las comisiones y el deslizamiento.
  4. Los parámetros deben ajustarse oportunamente para adaptarse a los diferentes ciclos.

Optimización

  1. Validación de marcos de tiempo múltiples para encontrar la mejor combinación de parámetros.
  2. Añadir un stop loss para reducir la pérdida única.
  3. Una mayor gestión de la posición para mejorar la eficiencia de los beneficios.
  4. Combine el aprendizaje profundo para la optimización automática de parámetros.

Resumen de las actividades

Esta estrategia combina indicadores cuantitativos típicos para lograr ganancias efectivas a través de indicadores de impulso y reversión media. También utiliza la teoría del rango verdadero promedio para localizar puntos de entrada razonables. Un buen ejemplo de combinación de teoría y técnicas. Con la optimización de parámetros y la mejora del control de riesgos, se convertirá en una estrategia cuantitativa eficiente y estable.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.5", shorttitle = "NoroBands str 1.5", overlay=true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, defval = true, title = "Use ColorBar")
usecb = input(true, defval = true, title = "Use CryptoBottom")
usersi = input(true, defval = true, title = "Use RSI")
usemm = input(true, defval = true, title = "Use min/max")
usepyr = input(true, defval = true, title = "Use pyramiding")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
needpy = input(false, defval = false, title = "Show Avg.price line")
src = close

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
lencb = abs(close - mac)
sma = sma(lencb, 100)
max = max(open, close)
min = min(open, close)

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

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

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 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")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")
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)

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) and (min < min[1] or usemm == false) and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) and (close > strategy.position_avg_price or usepyr == false or strategy.position_size >= 0) ? 1 : 0 
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 and usersi == true and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
//dn3 = fastrsi > 95 and usersi = true ? 1 : 0

//Avg Price
colpy = needpy == false ? na : black
plot(strategy.position_avg_price, color = colpy)

up4 = close < strategy.position_avg_price and usepyr == true and strategy.position_size >= 0 ? 1 : 0 
dn4 = close > strategy.position_avg_price and usepyr == true and strategy.position_size <= 0 ? 1 : 0 

//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 0)

longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true) or up4 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1 or dn4 == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Más.