Estrategia de negociación cuantitativa basada en múltiples indicadores

El autor:¿ Qué pasa?, fecha: 2023-10-25 18:06:44
Las etiquetas:

img

Resumen general

Esta estrategia combina múltiples indicadores técnicos para tomar decisiones comerciales largas y cortas.

Estrategia lógica

La estrategia utiliza principalmente bandas de Bollinger para juzgar la volatilidad de los precios. Las bandas de estrechamiento representan una disminución de la volatilidad que puede conducir a una ruptura. El RSI se utiliza para identificar las condiciones de sobrecompra y sobreventa.

Además, el ADX se utiliza para evaluar la fuerza de la tendencia. El ADX alto representa una tendencia fuerte, favoreciendo el comercio de tendencia. El ADX bajo no representa una tendencia clara, considerando la reversión media. Finalmente, los promedios móviles definen la dirección de la tendencia a largo plazo.

Específicamente, cuando las bandas se aprietan, el RSI se acerca a sus límites, y los precios se rompen por debajo de la banda inferior, se espera un rebote, ir largo. Cuando las bandas se aprietan, el RSI se acerca a sus límites, y los precios se rompen por encima de la banda superior, se espera una disminución, ir corto. Además, con un ADX alto, agregue largos en tendencia alcista. Con un ADX bajo, agregue cortos en tendencia bajista. Combinar indicadores mejora la robustez del sistema.

Análisis de ventajas

La estrategia de múltiples indicadores tiene las siguientes ventajas:

  1. La combinación de indicadores mejora la precisión y la robustez. El indicador único es propenso a señales falsas, mientras que los múltiples indicadores verifican las señales y evitan malas operaciones.

  2. Considera tanto el comercio de tendencia como de rango, adaptable a diferentes condiciones del mercado.

  3. Longs y shorts reducen los riesgos direccionales y evitan movimientos extremos.

  4. Detener pérdidas y tomar ganancias bloquear las ganancias y limitar las pérdidas cuando las operaciones van mal.

  5. La optimización de parámetros mejora continuamente la estrategia adaptándose a los mercados cambiantes.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Más indicadores aumentan la complejidad. La configuración incorrecta puede degradar el rendimiento. Se necesitan pruebas y optimización extensas.

  2. La dependencia excesiva de los indicadores técnicos mientras se ignoran los fundamentales puede causar señales inexactas.

  3. Es posible que los mercados ya se hayan movido cuando surgen las señales, lo que representa un riesgo de persecución.

  4. El comercio bidireccional aumenta la frecuencia, aumentando los costos y la presión.

  5. Los riesgos de ajuste a la curva existen.

Los riesgos se pueden gestionar mediante un estricto stop loss, un tamaño de posición prudente, un apalancamiento razonable, etc. En general, la estrategia tiene un gran valor práctico.

Oportunidades de mejora

Algunas maneras de optimizar la estrategia:

  1. Prueba diferentes conjuntos de parámetros para encontrar valores óptimos utilizando algoritmos graduales, aleatorios o genéticos.

  2. Agregue más indicadores como KDJ, Williams para construir un conjunto de indicadores robusto.

  3. Optimizar los modelos de dimensionamiento de posiciones para gestionar el riesgo dinámicamente.

  4. Incorporar modelos de aprendizaje automático para predecir las tendencias y movimientos de precios.

  5. Prueba en diferentes productos, plazos y mercados para mejorar la adaptabilidad.

  6. Refinar los tiempos de entrada y salida para capturar las tendencias temprano y salir antes de las reversiones.

  7. Emplear la toma de ganancias, paradas de trailing para bloquear las ganancias y limitar las pérdidas.

  8. Añadir factores fundamentales y análisis de la estructura del mercado para filtrar las señales técnicas.

Resumen de las actividades

Esta estrategia automatiza la negociación mediante la interpretación de múltiples indicadores. Se beneficia de la validación cruzada de indicadores, el comercio de doble dirección, el stop loss / take profit, etc. El sobreajuste y las señales falsas requieren precaución. La optimización y las pruebas continuas pueden transformarlo en un sistema robusto y práctico, que representa el futuro de las estrategias de negociación cuántica.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)

//RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up1 = ta.change(high)
	down1 = -ta.change(low)
	plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
	minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 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)
sig = adx(dilen, adxlen)




out = ta.sma(close, 14)

sma1=ta.sma(close,55)

ema200=ta.ema(close,200)



longCondition = (out>sma1) and ta.crossover(source1, lower1)

if (longCondition )
    strategy.entry("long", strategy.long)
    
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)

if (shortCondition )
    strategy.entry("short", strategy.short)
    
    
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100

strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))

    
//if strategy.position_avg_price<0
    
    
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)


    
    


Más.