Estrategia del índice de vigor relativo estocástico de Ehlers Fisher

El autor:¿ Qué pasa?, Fecha: 2023-12-22 12:04:23
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el indicador del Índice de Vigor Relativo Estocástico de Ehlers Fisher propuesto por John Ehlers en su libro Análisis Cibernético para Acciones y Futuros. La estrategia utiliza el indicador de Ehlers Fisher para juzgar la fuerza relativa de las acciones y lo combina con reglas comerciales personalizadas para entradas y salidas.

Estrategia lógica

La estrategia primero calcula el precio de cierre - precio de apertura, que es el cuerpo del candelabro. Luego calcula el precio alto - precio bajo, que es la sombra del candelabro. Tomando la suma y el promedio de estas dos partes respectivamente, obtiene el impulso del stock. Luego dividiendo el impulso con la volatilidad del stock, obtiene el índice de vigor relativo (RVI).

A continuación, la fórmula de Ehlers Fisher se aplica en RVI para obtener el valor de la señal. Va largo cuando la señal cruza sobre el gatillo, y va corto cuando la señal cruza por debajo del gatillo. Además, se implementan stop loss fijos y trailing stop loss para controlar los riesgos.

Análisis de ventajas

Esta estrategia integra las características de impulso y el indicador estocástico de las acciones, que pueden determinar efectivamente la fuerza relativa en el mercado. El diseño del indicador Ehlers Fisher puede reducir el impacto del ruido y generar señales comerciales relativamente confiables.

En comparación con el uso de un único indicador de impulso o un indicador estocástico, esta estrategia combina indicadores y modelos de manera orgánica, lo que puede mejorar la calidad de las señales.

Análisis de riesgos

Esta estrategia se basa principalmente en el indicador Ehlers Fisher. Cuando hay cambios drásticos en el mercado, los parámetros del indicador deben optimizarse para adaptarse al nuevo entorno. Si los parámetros se establecen incorrectamente, puede generar señales incorrectas o señales rezagadas.

Además, existe cierto grado de riesgo de ajuste de curva intrínsecamente en la propia estrategia. Si el entorno del mercado en backtesting y trading en vivo cambia en gran medida, el rendimiento de la estrategia puede desviarse en gran medida. En este caso, los parámetros de la estrategia deben ajustarse y las reglas de trading requieren optimización para adaptarse a las nuevas condiciones del mercado.

Direcciones de optimización

Esta estrategia puede optimizarse aún más en los siguientes aspectos:

  1. Optimizar los parámetros del indicador Ehlers Fisher para una mayor sensibilidad o filtrado de ruido.

  2. Modela el indicador con algoritmos de aprendizaje automático como LSTM para generar señales comerciales más confiables.

  3. Incorporar indicadores de volatilidad del mercado como ATR para ajustar dinámicamente la distancia de stop loss.

  4. Aumentar el apoyo a modelos multifactoriales que combinen otros indicadores técnicos y fundamentales para mejorar la calidad de la señal.

  5. Optimizar la lógica de posiciones abiertas/cerradas con criterios dinámicos de entrada/salida.

Conclusión

Esta estrategia utiliza el indicador RVI estocástico de Ehlers Fisher para determinar la tendencia y la fortaleza del mercado, y establece mecanismos de stop loss razonables para controlar los riesgos. En comparación con los indicadores individuales, esta estrategia combina múltiples indicadores y modelos orgánicamente, lo que puede filtrar el ruido y proporcionar señales de alta calidad.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Fisher Stochastic Relative Vigor Index Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
p = input(10, title = "Length")
FisherStoch(src, len) =>
    val1 = stoch(src, src, src, len) / 100
    val2 = (4 * val1 + 3 * val1[1] + 2 * val1[2] + val1[3]) / 10
    FisherStoch = 0.5 * log((1 + 1.98 * (val2 - 0.5)) / (1 - 1.98 * (val2 - 0.5))) / 2.64

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

signal = FisherStoch(RVI, p)
trigger = signal[1]
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
    barsSinceEntry := 0
if ((crossover(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossunder(signal, trigger))) and abs(signal) > 2 / 2.64
    strategy.entry("Long", strategy.long)
    barsSinceEntry := 0
if ((crossunder(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossover(signal, trigger))) and abs(signal) > 2 / 2.64
    strategy.entry("Short", strategy.short)
    barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
    strategy.close_all()
    barsSinceEntry := 0
    
hline(0, title="ZeroLine", color=gray) 
signalPlot = plot(signal, title = "Signal", color = blue)
triggerPlot = plot(trigger, title = "Trigger", color = green)
fill(signalPlot, triggerPlot, color = signal < trigger ? red : lime, transp = 50)

Más.