
La estrategia utiliza principalmente el doble de las medias móviles como una señal de compra y venta, para obtener ganancias cuando la tendencia se invierte. Hacer más cuando se cruza la media móvil de largo plazo por encima de las medias móviles de corto plazo, y hacer un descuento cuando se cruza la media móvil de largo plazo por debajo de las medias móviles de corto plazo, es una estrategia de seguimiento de pérdidas común.
La estrategia comienza con dos medias móviles, una de 20 días más corta y otra de 60 días más larga. La entrada se decide a partir de la intersección de las medias de corto y largo plazo.
Concretamente, cuando el corto promedio se cruza en la media de largo plazo, significa que se encuentra en una tendencia ascendente, y hace más; cuando el corto promedio se cruza por debajo de la media de largo plazo, significa que se encuentra en una tendencia descendente, y hace hueco.
La forma de detener una pérdida después de hacer más descubiertos es el seguimiento de la pérdida, de acuerdo con el precio más alto y el precio más bajo para trailing stop, se puede bloquear la máxima ganancia.
La lógica principal del código es la siguiente:
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
En cuanto al riesgo, se puede optimizar de la siguiente manera:
La estrategia puede ser optimizada en los siguientes aspectos:
Se añaden filtros de otros indicadores para formar un mecanismo de entrada con múltiples condiciones y evitar falsas rupturas. Por ejemplo, se puede agregar la determinación del indicador RSI.
Optimización de los parámetros de ciclo de la media móvil para encontrar la combinación óptima de parámetros. Se pueden probar diferentes parámetros de ciclo mediante un recorrido por pasos.
Optimización de los límites de pérdidas. Se puede calcular el límite óptimo de pérdidas a partir de los datos de retroalimentación. También se puede configurar un límite de pérdidas dinámico.
Configurar el mecanismo de reingreso. Después de la salida de la parada de pérdidas, se puede configurar una lógica de reingreso razonable para reducir el número de operaciones.
En combinación con los indicadores de tendencia, se suspende la negociación cuando la tendencia no es evidente, para evitar que la negociación sea nula.
Participar en el mecanismo de gestión de posiciones y ajustar las posiciones y los límites de pérdidas en función de la situación del mercado.
La estrategia de inversión de las medias móviles dobles es sencilla y práctica en general, y es un método común y efectivo para determinar los puntos de inflexión de la tendencia a través de dos líneas de equilibrio. Sin embargo, existe un cierto riesgo, que requiere pruebas de optimización de la configuración de los parámetros y el rango de parada, y el uso de otros indicadores de filtración en combinación, para que la estrategia tenga la máxima eficacia.
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", 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")
needdb = input(true, defval = true, title = "Double Body")
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")
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
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 = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low
//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)
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)