Estrategia de negociación de órdenes de límite multi-MA

El autor:¿ Qué pasa?, Fecha: 2023-09-22 14:16:20
Las etiquetas:

Resumen general

Esta es una estrategia de negociación que establece órdenes límite basadas en múltiples promedios móviles. Establecerá diferentes números de órdenes límite largos o cortos cuando el precio rompe diferentes niveles de MA, formando una posición múltiple en forma de pirámide. Cuando el precio rompe el MA nuevamente, se abrirán órdenes límite inversa. Cuando se mantienen posiciones, las posiciones se cerrarán por órdenes de mercado inverso si el precio rompe el MA medio.

Estrategia lógica

La estrategia utiliza promedios móviles para determinar la dirección de la tendencia. Específicamente, determina el número de órdenes de límite largo basado en si el precio rompe las 3 líneas MA ascendentes. Y determina el número de órdenes de límite corto basado en si el precio rompe las 3 líneas MA descendentes.

Por lo tanto, cuanto más fuerte sea la tendencia, más órdenes límite en la misma dirección se establecerán. Cuando el precio muestra señales de reversión, se abrirán posiciones inversas.

Toda la estrategia combina la apertura de estilo pirámide con el cierre de estilo avance para formar la lógica de negociación.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Utilizando MAs para determinar tendencias, simple e intuitivo de operar.

  2. La apertura piramidal puede obtener mejores precios promedio en la etapa inicial de las tendencias.

  3. El stop loss MA medio puede detener las pérdidas y controlar los riesgos a tiempo.

  4. Las órdenes limitadas evitan deslizamientos.

  5. Los parámetros personalizables se adaptan a los diferentes productos.

  6. Estructura clara, fácil de entender y extender.

Análisis de riesgos

Los riesgos de la estrategia incluyen:

  1. El retraso de la MA puede causar errores de juicio.

  2. Las órdenes de límite fallidas pueden perder oportunidades de entrada.

  3. La media de MA puede ser demasiado cruda para juzgar los avances.

  4. La configuración incorrecta de los parámetros puede dar lugar a posiciones demasiado grandes.

  5. El período de prueba posterior insuficiente puede causar un sobreajuste.

  6. No hay consideración de los costos de transacción.

Las soluciones son:

  1. Añadir otros indicadores para confirmar, optimizar parámetros.

  2. Establece el vencimiento, ajusta los precios límite.

  3. Agregue la toma de ganancias o la lógica en el medio de MA stop loss.

  4. Optimizar los parámetros, evaluar las relaciones riesgo-recompensa.

  5. Ampliar el período de pruebas de retroceso, pruebas de retroceso de múltiples mercados.

  6. Agregue los costos de transacción y la lógica de deslizamiento.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar los parámetros para más productos, utilizando métodos de aprendizaje automático.

  2. Añadir otros indicadores para su confirmación, por ejemplo, MACD, KDJ, etc.

  3. Agregue la lógica de toma de ganancias en la línea media de MA.

  4. Ajuste dinámico de los tamaños de las posiciones y los niveles de stop loss.

  5. Optimizar los precios límite para mejorar los costes de entrada, por ejemplo basándose en la volatilidad.

  6. Gestionar los costes para evitar las tendencias de exceso de persecución.

  7. Prueba de parámetros en diferentes productos para construir conjuntos de parámetros.

Conclusión

Esta estrategia abre posiciones en forma de pirámide con órdenes límite para lograr mejores costos promedio. Utiliza el MA medio para detener la pérdida para controlar los riesgos. La estructura de la estrategia es simple y clara, fácil de entender y extender. Pero se puede mejorar introduciendo otros indicadores, optimizando parámetros, mejorando la lógica de orden límite, etc. para hacerlo más robusto. En general, esta estrategia proporciona una idea simple y práctica de la negociación de órdenes límite que tiene algún valor de referencia.


/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", 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 Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
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")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//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 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Más.