Estrategia de negociación adaptativa basada en indicadores de impulso

El autor:¿ Qué pasa?, Fecha: 2024-01-05 11:43:25
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de negociación de acciones adaptativa basada en indicadores de impulso. Integra bandas de Bollinger, canales de Keltner e indicador de compresión de precios para lograr el juicio de tendencia, la identificación de puntos de avance y la salida de stop-loss para la negociación automatizada.

Principio de la estrategia

El núcleo de esta estrategia es construir un canal de precios a través de bandas de Bollinger y canales de Keltner e identificar las señales comerciales cuando el precio rompe el canal. Tomará una posición larga cuando el precio rompe el canal y tomará una posición corta cuando el precio rompe el canal. Además, cuando el precio se aprieta en el canal, la estrategia determinará la dirección de operación basada en el valor positivo y negativo del indicador de compresión de precios.

Específicamente, las bandas de Bollinger calculan la desviación estándar del precio para trazar el carril superior e inferior; Keltner Channels traza el carril superior e inferior basado en el rango de volatilidad promedio del precio ± promedio. Cuando ocurre la fusión del canal entre los dos, se considera que el mercado entra en consolidación mientras se espera la próxima ruptura. El indicador de compresión de precios refleja si el precio está comprimido entre los dos canales. La estrategia determina la dirección del mercado en función del valor positivo y negativo del indicador de compresión.

En resumen, esta estrategia integra múltiples indicadores para juzgar el movimiento de los precios y formar una lógica clara de largo y corto plazo, que puede filtrar eficazmente las falsas rupturas e identificar oportunidades comerciales de alta probabilidad.

Ventajas de la estrategia

  1. La combinación de indicadores puede mejorar la precisión.

  2. La diferencia del indicador sirve como una condición auxiliar para evitar operaciones innecesarias.

  3. El canal sirve como la posición de stop-loss, que se puede ajustar automáticamente en función de la fluctuación del mercado para reducir las pérdidas.

  4. Con sólo unos pocos parámetros clave, es fácil de probar, optimizar e integrar en sistemas de negociación automatizados.

Riesgos de la estrategia

  1. Cambios frecuentes de largo a corto cuando el mercado fluctúa bruscamente, lo que conduce a un mayor número de operaciones.

  2. Los parámetros de indicadores incorrectos pueden perder buenas oportunidades comerciales. Requiere pruebas y optimización suficientes para encontrar los parámetros óptimos.

  3. Solo se aplica a acciones con una dirección clara, no adecuadas para mercados extremadamente volátiles.

Direcciones de optimización

  1. Aumentar el módulo de control de posición para optimizar la eficiencia de la utilización del capital.

  2. Aumentar el modelo de aprendizaje automático para ajustar dinámicamente los parámetros de los indicadores, lo que permite que los indicadores se adapten automáticamente a diferentes ciclos y diferentes existencias.

  3. Mejorar la estrategia de stop loss mediante la introducción de más indicadores auxiliares para determinar el tiempo de stop loss.

Conclusión

Esta estrategia integra bandas de Bollinger, canales de Keltner e indicador de compresión de precios para formar una lógica clara para el sistema de juicio y control de riesgos. Combina el juicio de tendencia y las operaciones de ruptura, puede adaptarse automáticamente a las condiciones del mercado e identificar oportunidades comerciales de alta probabilidad. Con una mayor optimización de parámetros y mejora de las condiciones auxiliares, esta estrategia puede fortalecerse aún más en una herramienta importante para la negociación cuantitativa.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juliopetronilo

//@version=4
strategy("DMI/ADX/Squeeze Robot", shorttitle="DMI/ADX/SQZ", overlay=true)

// Squeeze Momentum Indicator
length = input(20, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)")

source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

ma = sma(source, lengthKC)
rangeKC = useTrueRange ? tr : (high - low)
rangema = sma(rangeKC, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = not (sqzOn or sqzOff)

val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)

// DMI/ADX Plot
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
keyLevel = input(23, title="Key Level for ADX")

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

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

[sig, up, down] = adx(dilen, adxlen)

// Estrategia de Trading
strategy.entry("Buy", strategy.long, when=sqzOn and crossover(up, down) and crossover(val, 0))
strategy.entry("Sell", strategy.short, when=sqzOn and crossunder(up, down) and crossunder(val, 0))
strategy.close("Buy", when=sqzOff)
strategy.close("Sell", when=sqzOff)

// Plot de los indicadores
plot(val, color=color.blue, style=plot.style_histogram, linewidth=4)
plot(0, color=noSqz ? color.blue : sqzOn ? color.black : color.rgb(236, 238, 247), style=plot.style_cross, linewidth=2)
plot(up, color=color.blue, title="+DI")
plot(down, color=color.gray, title="-DI")
plot(keyLevel, color=color.white, title="Key Level")



Más.