Esta estrategia se basa en una estrategia multivariable de medias móviles. Utiliza 3 medias móviles de diferentes parámetros para generar señales de negociación.
La estrategia utiliza la función sma para calcular el promedio móvil de la longitud de len, ma. Luego, se calcula el promedio móvil de una proporción determinada de 3 desplazamientos en función de ma: longline1, longline2, longline3. Donde longline1 desplaza -4%, longline2 desplaza -5%, y longline3 desplaza -6%.
En la generación de señales de compra, si no hay posición en ese momento, abra más posiciones cuando el precio atraviese la línea larga 1; si ya tiene una posición de una mano, abra otra mano cuando el precio atraviese la línea larga 2; si ya tiene una posición de dos manos, abra otra mano cuando el precio atraviese la línea larga 3, mantenga hasta tres posiciones adicionales.
En la generación de señales de venta, si se tiene una posición en exceso en ese momento, y una posición baja cuando el precio está por debajo de ma.
La estrategia puede hacer más para lograr un efecto de seguimiento de tendencias mediante la clasificación por lotes.
La solución al riesgo:
La estrategia puede ser optimizada en los siguientes aspectos:
Añadir otros indicadores para determinar la dirección de la tendencia, por ejemplo, agregar el MACD para determinar la fuerza de la tendencia
Optimización de los parámetros de la media móvil para encontrar la combinación óptima de parámetros
El número y proporción de matanza excesiva en lotes para evitar la persecución
Se añade un mecanismo móvil de stop loss que permite establecer el stop loss en función del ATR
Se puede ajustar el número de posiciones en función de la fluctuación dinámica de la tasa de mercado y reducir las posiciones en caso de gran fluctuación
Probar el efecto de los diferentes parámetros de variedad para encontrar la variedad más adecuada para la estrategia
Desarrollo de un módulo de Exit para considerar la salida de la barra de frenado en determinadas formas
En general, la estrategia utiliza la media móvil para determinar la dirección de la tendencia y, a través de la clasificación por lotes, se puede seguir la tendencia para obtener ganancias. Sin embargo, existe un cierto retraso y riesgo de seguimiento. Se puede optimizar la estrategia mediante la adición de indicadores de juicio auxiliares, parámetros de optimización, ajuste de la gestión de la posición, aumento de mecanismos de detención de pérdidas, etc., para que pueda adaptarse a diferentes condiciones del mercado y lograr un efecto de ganancias estables y controlables.
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Lenghs")
src = input(ohlc4, title = "MA Source")
longlevel1 = input(-4.0, title = "Long line 1")
longlevel2 = input(-5.0, title = "Long line 2")
longlevel3 = input(-6.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
//MA
ma = sma(src, len)
longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult
longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult
longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult
//Lines
offset = needoffset ? 1 : 0
plot(ma, color = color.blue)
plot(longline1, offset = offset, color = color.lime)
plot(longline2, offset = offset, color = color.lime)
plot(longline3, offset = offset, color = color.lime)
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2))
if size > 0
strategy.entry("TP", strategy.short, 0, limit = ma)