Estrategia de negociación cuantitativa multifáctor combinada de RSI dinámico y CCI

El autor:¿ Qué pasa?, Fecha: 2023-11-27 18:54:34
Las etiquetas:

img

Resumen general

Esta estrategia combina el RSI dinámico, el CCI y múltiples promedios móviles MA para implementar una estrategia de negociación cuantitativa impulsada por múltiples factores.

Principio de la estrategia

Indicadores técnicos

  • MA: Calcula el precio medio de cierre durante un período para determinar la tendencia de los precios
  • RSI: Los jueces sobrecompraron y sobrevendían niveles
  • CCI: Estado de los jueces sobrecomprados y sobrevendidos
  • Stoch KDJ: Jueces desviación del estocástico de la tendencia principal

Señales comerciales

Se trata de una de las empresas más importantes de la Unión.

Signales de venta: RSI cruza por debajo del umbral dinámico, Stoch KDJ por encima de 80 (sobrecomprado)

Ventajas

  1. Impulsado por múltiples factores, juicio integral, menos señales falsas
  2. Umbral dinámico para la detección de sobrecompras y sobreventas en tiempo real
  3. Combina indicadores técnicos de tendencia, estocásticos y generales
  4. Adopta ajuste de parámetros múltiples, alta flexibilidad

Los riesgos

  1. Combinación de múltiples factores demasiado compleja, ajuste de parámetros difícil
  2. Rendimiento muy relacionado con la selección de parámetros
  3. Requiere un proceso cuantitativo estricto para la optimización de parámetros
  4. Riesgo elevado de ajuste de la curva

Optimización

  1. Más pruebas de conjuntos de datos para la robustez de la estrategia
  2. Pruebas de combinación de parámetros múltiples para encontrar el óptimo
  3. Añadir pérdida de parada para reducir la extracción máxima
  4. Añadir dimensionamiento de posición para evitar perseguir y matar
  5. Prueba de adaptabilidad entre diferentes productos

Conclusión

Esta estrategia combina múltiples indicadores técnicos y juicios impulsados por múltiples factores con ajuste de parámetros y validación estadística para lograr buenos resultados. Pero la mayor complejidad, la necesidad de evitar el sobreajuste y el tamaño de posición de control y la pérdida de parada para reducir el descenso máximo. Puede ampliar aún más la estrategia a través de productos y plazos.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)

Más.