La estrategia utiliza principalmente dos medias móviles como señales de compra y venta para obtener ganancias en caso de reversión de tendencia. Es una estrategia común de seguimiento de pérdidas cuando se pasa por medias móviles largas cuando se pasa por medias móviles largas y cuando se pasa por medias móviles largas cuando se pasa por medias móviles largas cuando se sale por debajo de medias móviles cortas.
La estrategia establece dos medias móviles, una mediana de 20 días más corta y una mediana de 60 días más larga. Luego, se decide la entrada considerando el cruce de la mediana corta y la mediana larga.
En concreto, cuando la línea media corta atraviesa la línea media larga, significa que está en una tendencia al alza; cuando la línea media corta atraviesa la línea media larga, significa que está en una tendencia a la baja, significa que está en una tendencia a la baja.
El modo de hacer un stop-loss después de haber hecho más es el stop-loss de seguimiento, basado en el precio más alto y el precio más bajo para hacer un stop de seguimiento, para bloquear el máximo beneficio.
La lógica principal del código es la siguiente:
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
Para optimizar el riesgo, se puede hacer lo siguiente:
La estrategia puede ser optimizada aún más en los siguientes aspectos:
Añadir filtros para otros indicadores, formar un mecanismo de entrada multiconditional y evitar falsos breaks. Por ejemplo, puede incorporarse a la determinación del indicador RSI.
Optimiza los parámetros de ciclo de la línea recta móvil para encontrar la mejor combinación de parámetros. Se pueden probar diferentes parámetros de ciclo de forma paso a paso.
Optimización del rango de stop. Se puede calcular el rango de stop óptimo con datos de retroevaluación. También se puede establecer un rango de stop dinámico.
Configurar un mecanismo de reingreso. Después de una salida de stop loss, se puede establecer una lógica de reingreso razonable para reducir el número de transacciones.
En combinación con indicadores de tendencia, se puede suspender el comercio cuando la tendencia no es clara, evitando transacciones no válidas.
Unirse a un mecanismo de gestión de posiciones para ajustar dinámicamente las posiciones y el rango de pérdidas según la situación del mercado.
La estrategia de doble media móvil inversa es un método común y eficaz para determinar el punto de inflexión de la tendencia a través de la doble media móvil. Sin embargo, existe un cierto riesgo, que requiere una prueba optimizada de la configuración de parámetros y el rango de pérdidas y se usa en combinación con otros indicadores de filtro para maximizar la eficacia de la estrategia.
/*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)