Estrategia de trading cuantitativo multifactorial que combina el RSI y el CCI dinámicos


Fecha de creación: 2023-11-27 18:54:34 Última modificación: 2023-11-27 18:54:34
Copiar: 0 Número de Visitas: 732
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo multifactorial que combina el RSI y el CCI dinámicos

Descripción general

Esta estrategia permite una estrategia de comercio cuantitativa impulsada por múltiples factores mediante la combinación de indicadores dinámicos RSI, indicadores CCI y la media MA múltiple. La estrategia considera de manera integral varias dimensiones, como la tendencia, la sobrecompra y la sobreventa, para juzgar y generar señales de comercio.

Principio de estrategia

Indicadores técnicos

  • Líneas medias de MA: calcula el promedio de los precios de cierre en un período determinado para determinar la tendencia de los precios
  • Indicadores de la RSI son relativamente fuertes: las zonas de sobrecompra y sobreventa
  • Indicador CCI de tendencia: cómo juzgar el estado de sobrecompra y sobreventa
  • Indicador Stoch KDJ: para determinar si un indicador aleatorio está alejado de la tendencia principal

Señales de comercio

Las señales de compra: MA12 con MA26, CCI por debajo de 100 (sobrevendido), Stoch KDJ por debajo de 80 (sobrevendido)

Señales de venta: Dinámica de penetración bajo el RSI, Stoch KDJ por encima de 80 (sobrecompra)

Ventajas estratégicas

  1. La conducción de múltiples factores, el juicio integral, la reducción de las falsas señales
  2. Sellable, detección en tiempo real de sobrecompra y sobreventa
  3. Combina tendencias, aleatoriedad y varios indicadores tecnológicos convencionales
  4. Adaptación de varios conjuntos de parámetros, alta flexibilidad

Riesgo estratégico

  1. La combinación de múltiples factores es demasiado compleja y difícil de ajustar
  2. El rendimiento de la estrategia está altamente relacionado con la selección de parámetros
  3. Optimización de parámetros estrictamente en el proceso de cuantificación
  4. Hay un alto riesgo de ajuste de la curva

Optimización de la estrategia

  1. Más conjuntos de datos para probar la solidez de las estrategias
  2. Pruebas de combinación de varios grupos de parámetros para encontrar el parámetro óptimo
  3. Aumentar el mecanismo de detención de pérdidas para reducir el máximo retiro
  4. Aumentar el control de las posiciones para evitar la caída de la caída
  5. Prueba de la adecuación de los contratos de diferentes variedades

Resumir

La estrategia utiliza una combinación de varios indicadores técnicos y un juicio impulsado por múltiples factores para encontrar los mejores parámetros a través de la optimización de parámetros y la verificación estadística rigurosa, lo que permite obtener un mejor efecto de la estrategia. Sin embargo, la complejidad es alta y se necesita para evitar el riesgo de sobreajuste, al tiempo que se controla la posición y el paro para reducir la máxima reversión.

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