Estrategia de combinación de indicadores de múltiples momentos

El autor:¿ Qué pasa?, Fecha: 2023-09-24 13:24:47
Las etiquetas:

Resumen general

Esta estrategia experimental combina el Momentum de Chande, RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI y otros indicadores de impulso, entrando en posiciones cuando todos los indicadores dan señales alineadas.

Estrategia lógica

  1. Calcula el momento de cambio y establece sus líneas de compra y venta.

  2. Se calcularán los indicadores RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI y otros indicadores.

  3. Establecer líneas de compra y venta para cada indicador.

  4. Cuando el Momentum de Chande cruce por encima de su línea de compra, compruebe si otros indicadores también están por debajo de sus respectivas líneas de compra.

  5. Por el contrario, cuando el Momentum de Chande cruza por debajo de la línea de venta, mientras que otros indicadores exceden sus líneas de venta, generan una señal corta.

Ventajas

  1. La combinación de indicadores proporciona una validación mutua, evitando señales falsas.

  2. Chande Momentum captura con sensibilidad los cambios de tendencia.

  3. El RMI muestra los niveles de impulso para identificar los niveles de sobrecompra/sobreventa.

  4. Prueba de diferentes cálculos del RSI con HMA RSI, EVW RSI, etc.

  5. La combinación flexible de varios indicadores permite probar la eficacia de los indicadores.

Los riesgos

  1. Los requisitos para la combinación de múltiples indicadores son más difíciles de cumplir, menos operaciones, oportunidades perdidas.

  2. No hay mecanismos de control de riesgos como el stop loss.

  3. El rendimiento del indicador depende de un marco de tiempo y puede no funcionar en todos los períodos.

  4. No hay optimización de parámetros, mal ajuste de parámetros posible.

  5. No hay datos suficientes para validar la estrategia.

Soluciones posibles:

  1. Relajar los umbrales de los indicadores para más operaciones.

  2. Incorporar pérdidas de trailing o pérdidas de parada dura para limitar las pérdidas.

  3. Prueba en diferentes productos y plazos para encontrar parámetros óptimos.

  4. Emplear el aprendizaje automático o la búsqueda en red para la optimización de parámetros.

  5. Prueba de retroceso en más mercados para garantizar la solidez.

Direcciones de optimización

  1. Prueba diferentes conjuntos de parámetros para encontrar la configuración óptima.

  2. Añadir indicadores de impulso adaptativos de escala de tiempo múltiple.

  3. Incorporar la detección de tendencias para evitar operaciones contrarias a la tendencia.

  4. Utilice el aprendizaje automático para mejorar la ponderación de múltiples indicadores.

  5. Combinar con el sistema de promedio móvil para mejorar las entradas.

Resumen de las actividades

Esta estrategia trata de identificar puntos de inflexión de tendencia más confiables mediante la combinación de múltiples indicadores de impulso. La lógica diversificada tiene una gran extensibilidad y potencial de optimización en áreas como selección de parámetros, ponderación de indicadores, control de riesgos, etc., para adquirir más señales de calidad al tiempo que garantiza la robustez, pero los riesgos como el ajuste de la curva deben administrarse.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
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/
// © burgercrisis

//@version=4
strategy("RMI + Triple HMRSI + Double EVWRSI + TERSI Strategy")

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////


src = input(close, "Price", type = input.source)
CMOlength = input(9, minval=1, title="Alpha Chande Momentum Length")

//CMO
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, CMOlength)
sm2 = sum(m2, CMOlength)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)
plot(chandeMO, "Chande MO", color=color.blue)




//RMI
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
length3 = input(title="RMI Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI Momentum ", type=input.integer, minval=1, defval=25)
up3 = rma(max(change(src, momentumLength3), 0), length3)
down3 = rma(-min(change(src, momentumLength3), 0), length3)

rmi3 = (down3 == 0 ? 100 : up3 == 0 ? 0 : 100 - (100 / (1 + up3 / down3)))-50
//
//
// end RMI, end Alex Orekhov copywrite
//
//

lengthMA = input(7)
lengthRSI = input(14)
thrsi = hma(hma(hma(rsi(src, lengthRSI), lengthMA), lengthMA), lengthMA)
thrsi1 = (thrsi-50)*10

lengthMA2 = input(7)
lengthRSI2 = input(14)
devwrsi = ((ema(ema(vwma(rsi(src, lengthRSI2), lengthMA2), lengthMA2), lengthMA2))-50)*5

lengthMA3 = input(7)
lengthRSI3 = input(14)
tersi = ((ema(ema(ema(rsi(src, lengthRSI3), lengthMA3), lengthMA3), lengthMA3))-50)*10

rmirsi = ((thrsi*rmi3/25))

//Boundary Lines

obLevel1 = input(0, title="Chande Sellline")
osLevel1 = input(0, title="Chande Buyline")
hline(obLevel1, color=#0bc4d9)
hline(osLevel1, color=#0bc4d9)

obLevel2 = input(0, title="Triple HMRSI Sellline")
osLevel2 = input(0, title="Triple HMRSI Buyline")
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

obLevel3 = input(0, title="DEVWRSI Sellline")
osLevel3 = input(0, title="DEVWRSI Buyline")
hline(obLevel3, color=#5a0bd9)
hline(osLevel3, color=#5a0bd9)

obLevel4 = input(0, title="TERSI Sellline")
osLevel4 = input(0, title="TERSI Buyline")
hline(obLevel4, color=#5a0bd9)
hline(osLevel4, color=#5a0bd9)

obLevel5 = input(0, title="RMI Sellline")
osLevel5 = input(0, title="RMI Buyline")
hline(obLevel5, color=#5a0bd9)
hline(osLevel5, color=#5a0bd9)

obLevel6 = input(0, title="RMI*RSI Sellline")
osLevel6 = input(0, title="RMI*RSI Buyline")
hline(obLevel6, color=#5a0bd9)
hline(osLevel6, color=#5a0bd9)

plot((thrsi1), title="THRSI")
plot(devwrsi, color=color.red, title="DEVWRSI")
plot(tersi, color=color.yellow, title="TERSI")
plot(rmirsi, color=color.purple, title="RMI*HMRSI")
plot(rmi3, color=color.orange, title="RMI")




longcondition1 = crossover(chandeMO, osLevel1)
shortcondition1 = crossunder(chandeMO, obLevel1)
longcondition2 = rmirsi<osLevel6 and rmi3<osLevel5 and tersi<osLevel4 and devwrsi<osLevel3 and thrsi1<osLevel2  and longcondition1
shortcondition2 = rmirsi>obLevel6 and rmi3>obLevel5 and tersi>obLevel4 and devwrsi>obLevel3 and thrsi1>obLevel2  and shortcondition1

if testPeriod()
    if longcondition2
        strategy.entry("Buy", strategy.long)
    if shortcondition2
        strategy.entry("Sell", strategy.short)






hline(0, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")

Más.