Estrategia de negociación con oscilador de equilibrio multifactorial


Fecha de creación: 2024-01-12 14:08:33 Última modificación: 2024-01-12 14:08:33
Copiar: 0 Número de Visitas: 663
1
Seguir
1617
Seguidores

Estrategia de negociación con oscilador de equilibrio multifactorial

Descripción general

La estrategia de comercio de oscilladores de equilibrio multifactorial es una estrategia de comercio cuantitativa que utiliza una combinación de varias señales de indicadores técnicos. La estrategia combina hábilmente la energía de la tasa de cambio (ROC), la fuerza relativa (RSI), el índice de canales de mercancías (CCI), el índice de William (%R) y el índice de dirección promedio (ADX) para juzgar el movimiento de la volatilidad del mercado y generar señales de comercio mediante el cálculo de un indicador de fluctuación integral.

La mayor ventaja de esta estrategia reside en la capacidad de juzgar el mercado de manera objetiva y sistemática, buscando los mejores momentos de entrada y salida. Cuando la línea de indicadores de oscilación atraviesa la línea de sobreventa de 0.75, genera una señal de compra; cuando la línea de indicadores de oscilación atraviesa la línea de sobreventa de 0.25, genera una señal de posición baja.

Principio de estrategia

El núcleo de la estrategia de comercio de oscilladores de equilibrio multifactorial es el cálculo de un indicador de fluctuación integral. Los pasos para calcular el indicador son los siguientes:

  1. Calcular el valor de cada uno de los indicadores técnicos: incluidos el índice de tasa de cambio (ROC), el índice de fuerza relativa (RSI), el índice de canales de mercancías (CCI), el índice de William (%R) y el índice de dirección promedio (ADX)

  2. Estandarizar los valores de los indicadores técnicos en un rango de 0-1 para comparar

  3. Utiliza el pensamiento del promedio ponderado para calcular el valor de un indicador de fluctuación integral. Cada indicador técnico tiene un peso ajustable, por defecto, ROC 2, RSI 0,5, CCI 2, % R 0,5, ADX 0,5. Multiplica el valor de cada indicador estandarizado por el peso correspondiente, suma y divide por la suma de los pesos, obteniendo un valor de fluctuación integral en el intervalo 0-1

  4. Cuando el valor de la oscilación integral atraviesa las líneas de sobreventa y sobreventa adecuadamente establecidas, se produce la señal de negociación correspondiente.

Se puede ver que la estrategia utiliza la energía de varios indicadores técnicos de forma flexible para juzgar el exceso de mercado y tomar decisiones comerciales a través de un método sistemático. Esto evita el ruido del mercado causado por un solo indicador técnico y permite mantener la estabilidad de las decisiones comerciales en varios casos.

Ventajas estratégicas

Las estrategias de negociación de oscilladores de equilibrio multifactorial tienen las siguientes ventajas:

  1. Proporcionar una metodología de análisis de mercado objetiva y sistemática. Utilizando múltiples indicadores técnicos para evitar los defectos de una sola herramienta, y al mismo tiempo generar señales de negociación prácticas a través de métodos cuantitativos.

  2. Las estrategias de optimización de entradas y salidas. La valoración precisa y el procesamiento estandarizado de los indicadores de volatilidad proporcionan una base cuantitativa para juzgar el mercado.

  3. La altura se puede ajustar. Se puede ajustar el peso y los parámetros de los indicadores según el estilo de negociación individual para adaptarse a diferentes condiciones de mercado.

  4. Señales de alerta en tiempo real. Se puede configurar una alerta para señales de compra y de salida, asegurando la información de los últimos acontecimientos del mercado.

  5. Estricta retroalimentación y optimización. Antes del disco duro, se puede juzgar y optimizar los parámetros de la estrategia mediante la plena retroalimentación de los datos históricos, lo que mejora la eficacia de la batalla en vivo.

Riesgo estratégico

A pesar de las muchas ventajas de las estrategias de negociación de oscilladores de equilibrio multifactorial, también existen ciertos riesgos en la aplicación práctica, que se manifiestan principalmente en:

  1. Riesgo de optimización de parámetros. Si el peso del indicador y la configuración de los parámetros no son apropiados, afectará el efecto del disco. En este momento, se necesita buscar el parámetro óptimo a través de una gran cantidad de pruebas de retroalimentación.

  2. El riesgo de la configuración de la zona de sobreventa y sobrecompra es diferente según las circunstancias. La configuración de la zona requiere considerar la situación general.

  3. Riesgo de dispersión del indicador. Cuando la dispersión de algunos indicadores afecta a la evaluación del indicador integrado. En este caso, se puede considerar eliminar el indicador o reducir la ponderación.

  4. Limitaciones de los modelos cuantitativos. Cualquier modelo cuantitativo puede fallar en ciertas circunstancias. El operador aún debe mantener una conciencia de riesgo adecuada.

Para evitar riesgos, es necesario realizar una adecuada retroalimentación y optimización de parámetros antes de la puesta en marcha, comprender las limitaciones de la estrategia, rastrear el efecto de la puesta en marcha, ajustar los parámetros o los ajustes de peso de manera flexible según las circunstancias. La intervención humana cuando sea necesaria también es muy importante.

Dirección de optimización

Las estrategias de negociación de oscilladores de equilibrio multifactorial pueden optimizarse aún más en los siguientes aspectos:

  1. Continuar enriqueciendo los modelos multifactoriales. Se puede considerar la inclusión de más diferentes tipos de indicadores técnicos para mejorar el juicio del modelo.

  2. Experimentar con métodos de aprendizaje automático. Se pueden entrenar modelos avanzados como redes neuronales para predecir cada indicador individual y extraer más características implícitas.

  3. Combinación de aspectos básicos y macro. Aumentar los factores básicos como los datos económicos, los informes de desempeño para juzgar la situación del mercado.

  4. La adopción de parámetros de ajuste adaptativo. Adaptación dinámica de los indicadores de peso y parámetros según los cambios en el entorno del mercado.

  5. Introducción de mecanismos de detención de pérdidas. Establecimiento de límites razonables de detención de pérdidas y control activo de pérdidas individuales.

  6. Gestión de fondos integrada. Ajuste el tamaño de las posiciones en función del tamaño de la posesión para lograr una gestión de fondos cuantitativa.

Resumir

La estrategia de trading de un oscilador de equilibrio multifactor es una excelente estrategia de trading cuantitativa. Reúne la esencia de varios indicadores técnicos para juzgar el mercado a través de un método cuantitativo riguroso. Al mismo tiempo, tiene una gran flexibilidad de personalización que se puede ajustar al estilo personal.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche

//@version=5
strategy("Ultimate Balance Oscillator Strategy", overlay=true)

// Indicator Weights
weightROC = input.float(2, "Rate of Change (ROC) Weight", group="Weightings")
weightRSI = input.float(0.5, "Relative Strength Index (RSI) Weight", group="Weightings")
weightCCI = input.float(2, "Commodity Channel Index (CCI) Weight", group="Weightings")
weightWilliamsR = input.float(0.5, "Williams %R Weight", group="Weightings")
weightADX = input.float(0.5, "Average Directional Index (ADX) Weight", group="Weightings")

// ROC Settings
rocLength = input.int(20, "Length", minval=1, group="ROC")

// RSI Settings
rsiLength = input.int(14, "Length", minval=1, group="RSI")

// CCI Settings
cciLength = input.int(20, "Length", minval=1, group="CCI")

// Williams %R Settings
williamsRLength = input.int(14, "Length", minval=1, group="Williams %R")

// ADX Settings
adxLength = input.int(14, "ADX Length", minval=1, group="ADX")
adxDiLength = input.int(14, "DI Length", minval=1, group="ADX")

// Source
source_options = input.string("hlc3", "Source", options=["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"])

price_open = request.security(syminfo.tickerid, "D", open)
price_high = request.security(syminfo.tickerid, "D", high)
price_low = request.security(syminfo.tickerid, "D", low)
price_close = request.security(syminfo.tickerid, "D", close)
price_hl2 = request.security(syminfo.tickerid, "D", hl2)
price_hlc3 = request.security(syminfo.tickerid, "D", hlc3)
price_ohlc4 = request.security(syminfo.tickerid, "D", ohlc4)

get_source(source_option) =>
    price = price_close
    if source_option == "open"
        price := price_open
    else if source_option == "high"
        price := price_high
    else if source_option == "low"
        price := price_low
    else if source_option == "close"
        price := price_close
    else if source_option == "hl2"
        price := price_hl2
    else if source_option == "hlc3"
        price := price_hlc3
    else
        price := price_ohlc4
    price

src = get_source(source_options)

// Overbought/Oversold Levels
obLevel = input.float(0.75, "Overbought Level")
osLevel = input.float(0.25, "Oversold Level")

// Calculating the indicators
rocValue = ta.change(close, rocLength)
rsiValue = ta.rsi(close, rsiLength)
cciValue = (src - ta.sma(src, cciLength)) / (0.015 * ta.dev(src, cciLength))
williamsRValue = -100 * (ta.highest(high, williamsRLength) - close) / (ta.highest(high, williamsRLength) - ta.lowest(low, williamsRLength))

dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truerange = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
    minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

adxValue = adx(adxDiLength, adxLength)

// Normalizing the values
normalize(value, min, max) =>
    (value - min) / (max - min)

normalizedROC = normalize(rocValue, ta.lowest(rocValue, rocLength), ta.highest(rocValue, rocLength))
normalizedRSI = normalize(rsiValue, 0, 100)
normalizedCCI = normalize(cciValue, ta.lowest(cciValue, cciLength), ta.highest(cciValue, cciLength))
normalizedWilliamsR = normalize(williamsRValue, ta.lowest(williamsRValue, williamsRLength), ta.highest(williamsRValue, williamsRLength))
normalizedADX = normalize(adxValue, 0, 50)

// Calculating the combined oscillator line
oscillatorLine = (normalizedROC * weightROC + normalizedRSI * weightRSI + normalizedCCI * weightCCI + normalizedWilliamsR * weightWilliamsR + normalizedADX * weightADX) / (weightROC + weightRSI + weightCCI + weightWilliamsR + weightADX)

// Strategy conditions
enterLong = ta.crossover(oscillatorLine, obLevel)
exitLong = ta.crossunder(oscillatorLine, osLevel)

// Strategy orders
if (enterLong)
    strategy.entry("Buy", strategy.long)
if (exitLong)
    strategy.close("Buy")

// Alert conditions
if (enterLong)
    alert("Buy signal")
if (exitLong)
    alert("Exit signal")