Estrategia de trading con límite de medias móviles múltiples


Fecha de creación: 2023-09-22 14:16:20 Última modificación: 2023-09-22 14:16:20
Copiar: 1 Número de Visitas: 702
1
Seguir
1702
Seguidores

Descripción general

La estrategia es una estrategia de negociación basada en la fijación de un límite de precios en varias líneas medias. Se establece un número diferente de órdenes de compra o venta en función de la ruptura de precios en diferentes líneas medias, formando una posición piramidal de múltiples órdenes. Cuando el precio vuelve a romper la línea mediana, se abre una posición inversa en el límite.

Principio de estrategia

La estrategia utiliza un indicador de la línea media para determinar la dirección de la tendencia. En concreto, el número de órdenes de límite máximo se establece en función de si el precio ha roto la línea media de las 3 líneas superiores. El número de órdenes de límite máximo se establece en función de si el precio ha roto la línea media de las 3 líneas inferiores.

De esta manera, cuanto más fuerte sea la tendencia del precio, se establecerán más ofertas de límite de tendencia simultánea; cuando se produzca una señal de reversión del precio, se realizará una apertura de posición inversa. La línea media del eje central se utiliza para juzgar la ruptura de la posición y emitir una señal de posición plana.

Toda la estrategia forma una pirámide de apertura de posición combinada con una brecha de posición baja. El objetivo es abrir posiciones a precios medios múltiples, reducir los costos; la línea media del eje medio se detiene y controla el riesgo.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de tendencias medias para juzgar, el manejo es sencillo e intuitivo.

  2. La apertura de una posición piramidal permite obtener mejores costos al comienzo de la tendencia.

  3. La pérdida de la línea media del eje central se puede detener a tiempo para controlar el riesgo.

  4. El precio límite para abrir una posición evita el deslizamiento.

  5. Los parámetros se pueden personalizar para adaptarse a diferentes variedades.

  6. La estructura es clara, fácil de entender y ampliar.

Análisis de riesgos

La estrategia también tiene los siguientes riesgos:

  1. El retraso en el promedio puede conducir a errores de juicio.

  2. El fracaso de los boletos limitados puede causar la pérdida de tiempo de entrada.

  3. La pérdida de la línea media del eje central puede ser demasiado abrupta y no permitir una ruptura El juicio.

  4. La configuración incorrecta de los parámetros puede causar una posición de la pirámide demasiado grande.

  5. El tiempo de detección insuficiente puede causar una curva de sobreajuste.

  6. No se tiene en cuenta el factor de los honorarios.

Las soluciones para los riesgos son:

  1. Para confirmar y optimizar los parámetros en combinación con otros indicadores.

  2. Establezca el plazo de validez y ajuste el precio de la tarifa límite.

  3. Establezca paradas en la línea media del eje central, o agregue una lógica de juicio de ruptura.

  4. Optimización de parámetros para evaluar la rentabilidad.

  5. Ampliar el rango de tiempo de respuesta, respuesta en varios mercados.

  6. La adición de comisiones y la lógica de los puntos de deslizamiento.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización de parámetros para adaptarse a más variedades. Se pueden utilizar métodos de aprendizaje automático.

  2. Añadir otros indicadores de filtro de confirmación. Por ejemplo MACD, KDJ, etc.

  3. En el eje mediano se añade la lógica de parada.

  4. Ajuste dinámico de las posiciones de apertura y de parada.

  5. Optimización de la fijación de la oferta de precios límite, mejora de los costos. Por ejemplo, la fijación de precios en función de la amplitud de fluctuación.

  6. Aumentar la gestión de los costos y evitar el cobro excesivo.

  7. Prueba el efecto de los parámetros de las diferentes variedades, construye un grupo de parámetros.

Resumir

La estrategia establece un precio de límite de línea media para formar una pirámide de apertura de posiciones para obtener un costo óptimo. El uso de la línea de límite de la línea media para controlar el riesgo. La estructura de la estrategia es simple, clara, fácil de entender y ampliar.

Código Fuente de la Estrategia
/*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()