
La estrategia se basa en el índice de dinamismo relativo aleatorio de Ehlers-Fischel, propuesto por John Ehlers en su cuaderno de análisis de control de acciones y futuros. La estrategia utiliza el índice de Ehlers-Fischel para juzgar la fortaleza relativa de las acciones y para comprar y vender en combinación con reglas de negociación personalizadas.
La estrategia primero calcula el precio de cierre - precio de apertura, es decir, la parte real de la acción. Luego calcula el precio alto - precio bajo, es decir, la parte de la línea de sombra de la acción. Calcula la dinámica de la acción mediante la suma y el promedio de estas dos partes respectivamente.
A continuación, se aplica la fórmula de cálculo del índice de Ehlers-Fischer para el RVI, obteniendo el valor de la señal. Cuando la señal pasa por encima del valor de la activación, se hace más, y cuando baja, se hace vacío. Además, se establecen paradas fijas y paradas de seguimiento para controlar el riesgo.
La estrategia utiliza las características dinámicas de las acciones y los indicadores aleatorios para evaluar la fuerza relativa del mercado. El diseño del índice de Erles-Fischer reduce el impacto del ruido y genera una señal de negociación más confiable. El índice de dinámica refleja la tendencia y la volatilidad de las acciones mismas.
En comparación con el uso de indicadores dinámicos o aleatorios, la estrategia realiza una combinación orgánica de indicadores y modelos que mejoran la calidad de la señal. A través de una estricta regla de stop loss, la estrategia también permite controlar el riesgo, siempre que se garantice la rentabilidad.
La estrategia se basa principalmente en el indicador de Ehlers-Fischel, donde los parámetros del indicador necesitan ser optimizados para adaptarse a un nuevo entorno cuando el mercado cambia de forma repentina. Si los parámetros del indicador no están configurados correctamente, se producen señales erróneas o señales de retraso.
Además, la estrategia en sí misma también presenta un cierto riesgo de ajuste curvo. Si el entorno del mercado en la prueba y en el juego real cambia mucho, el rendimiento de la estrategia puede generar un gran desvío. En este caso, es necesario ajustar los parámetros de la estrategia o optimizar las reglas de negociación para adaptarse a las nuevas condiciones del mercado.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimización de los parámetros del índice de Ehlers-Fischer para que sea más sensible o filtre el ruido.
Los indicadores se modelan con algoritmos de aprendizaje automático como LSTM para generar señales de negociación más confiables.
Combinando los indicadores de volatilidad del mercado como el ATR para ajustar dinámicamente la distancia de parada.
Aumentar el soporte de modelos multifactoriales, integrando otros indicadores técnicos y básicos para mejorar la calidad de la señal.
Optimización de la lógica de apertura de la posición, configuración de condiciones de salida dinámicas. Introducción de la tecnología de stop loss y stop loss adaptativa.
La estrategia utiliza el índice de dinamismo relativo aleatorio de Ehlers-Fischer para determinar las tendencias y las debilidades del mercado y establecer un mecanismo de control de riesgo de pérdidas razonable. En comparación con un solo indicador, la estrategia realiza una combinación orgánica de múltiples indicadores y modelos para filtrar el ruido y proporcionar una señal 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)