Basado en un sistema de comercio cuantitativo dual


Fecha de creación: 2024-02-26 14:30:54 Última modificación: 2024-02-26 14:30:54
Copiar: 5 Número de Visitas: 654
1
Seguir
1617
Seguidores

Basado en un sistema de comercio cuantitativo dual

Esta estrategia es un sistema de composición de comercio que combina el indicador CCI, el indicador RSI y dos medias móviles. El sistema puede capturar tendencias habituales y, al mismo tiempo, utilizar el cruce del indicador RSI para aumentar la confirmación de la hora de entrada y filtrar algo de ruido.

Principio de estrategia

La estrategia se basa principalmente en el indicador CCI para determinar la dirección de la tendencia. Si el indicador CCI es superior a 100 es un mercado de tijeras, y si es inferior a 100 es un mercado de tijeras. El sistema utiliza dos cruces de medias móviles para ayudar a determinar la dirección de la tendencia.

Una vez que se determina una tendencia en el horizonte, el sistema utiliza el cruce de dos indicadores RSI de diferentes longitudes de parámetros como verificación de entrada. Por ejemplo, en un mercado de múltiples cabezas, si un indicador RSI de corto período atraviesa un indicador RSI de largo período, se obtiene una señal de compra final. Este diseño es principalmente para filtrar el ruido y evitar que los ajustes a corto plazo en la tendencia provoquen operaciones erróneas.

Esta estrategia solo abre posiciones en el horario de negociación designado y cierra todas las posiciones 15 minutos antes del cierre, para evitar el riesgo de la noche a la mañana. Después de abrir la posición, se utiliza el stop loss móvil para bloquear las ganancias.

Análisis de las ventajas

  • Combinando el juicio de tendencias y el cruce de indicadores, se puede identificar la tendencia de manera eficiente y filtrar el ruido, la entrada es precisa
  • El uso de la pérdida móvil para controlar el riesgo de forma activa y evitar que la pérdida sea perseguida
  • Abrir posiciones solo en el horario de negociación especificado, evitando el riesgo de saltar de noche
  • Los parámetros del indicador RSI son ajustables y pueden adaptarse con flexibilidad a diferentes entornos de mercado

Análisis de riesgos

  • Indicadores del CCI no son muy eficaces para evaluar mercados con una volatilidad inusual
  • El doble RSI está más restringido en las condiciones de cruce y puede perder algunas oportunidades
  • La pérdida móvil puede ser demasiado subjetiva y necesita parámetros de optimización
  • Especificar el horario de negociación que puede perderse por el salto en el tiempo causado por las noticias importantes de la noche

Recomendaciones para la optimización

  • Indicadores de CCI para diferentes parámetros para encontrar la mejor combinación de parámetros
  • Prueba de si se puede cancelar la restricción de cruce RSI para entrar directamente en el CCI
  • Optimización de la retroalimentación de los parámetros de la modulación móvil para encontrar el parámetro óptimo
  • Prueba de la eliminación de la lógica de la posición plana obligatoria en lugar de un seguimiento móvil de la parada de pérdidas durante la tenencia de la posición para maximizar los beneficios

Resumir

Esta estrategia tiene en cuenta el análisis de tendencias y la verificación cruzada de indicadores, asegurando la eficacia de las señales de negociación al tiempo que controla el riesgo. A través de la optimización de los parámetros y el ajuste lógico, la estrategia puede aumentar aún más el margen de ganancia y reducir las oportunidades de omisión.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
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/
// © rwestbrookjr

//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)

//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)

fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)

fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)

fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')

// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA

//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")

up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))

//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)

longStop = 0.0, shortStop = 0.0

longStop := if Bull
    stopValue = close - trstp
    math.max(stopValue, longStop[1])
else
    0.0

shortStop := if Bear
    stopValue = close + trstp
    math.min(stopValue, shortStop[1])
else
    999999


//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)

//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
    strategy.entry("Long", strategy.long, 1)
    
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
    strategy.close("Long")

shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
    strategy.entry("Short", strategy.short, 1)

//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
    strategy.close("Short")