En la carga de los recursos... Cargando...

Elder's Force Index Estrategia de negociación cuantitativa basada en la desviación estándar y las medias móviles

El autor:¿ Qué pasa?, Fecha: 2024-11-28 17:08:24
Las etiquetas:El EFIEl ATREl EMALa SMA- ¿ Qué?

img

Resumen general

Esta estrategia es un sistema de negociación cuantitativo basado en el índice de fuerza de Elder (EFI), que combina desviación estándar y promedios móviles para la generación de señales, mientras que utiliza ATR para el posicionamiento dinámico de stop-loss y take-profit. La estrategia calcula indicadores EFI rápidos y lentos, los normaliza utilizando desviación estándar y genera señales comerciales a través del análisis cruzado, creando un sistema comercial completo. Emplea mecanismos dinámicos de stop-loss y trailing take-profit para controlar eficazmente los riesgos mientras persigue mayores rendimientos.

Principio de la estrategia

La estrategia se basa en varios elementos fundamentales:

  1. Utiliza dos períodos diferentes (13 y 50) para calcular los índices de fuerza rápida y lenta
  2. Normaliza ambos períodos de EFI utilizando la desviación estándar para hacer que las señales sean más estadísticamente significativas
  3. Genera señales largas cuando tanto el EFI rápido como el lento superan simultáneamente el umbral de desviación estándar
  4. Genera señales cortas cuando tanto el EFI rápido como el EFI lento rompen simultáneamente por debajo del umbral de desviación estándar
  5. Utiliza el ATR para posicionamiento dinámico de stop-loss que se ajusta al movimiento del precio
  6. Implementa un mecanismo de aprovechamiento de los beneficios basado en ATR para proteger y aumentar los beneficios

Ventajas estratégicas

  1. El sistema de señales combina características de impulso y volatilidad, mejorando la fiabilidad de las operaciones
  2. La normalización de la desviación estándar hace que las señales sean estadísticamente significativas, reduciendo las señales falsas
  3. Mecanismo dinámico de suspensión de pérdidas que controla eficazmente el riesgo y evita grandes retiros
  4. Mecanismo de retraso de las ganancias protege y permite que las ganancias crezcan
  5. Lógica de estrategia clara con parámetros ajustables, adecuada para la optimización en diferentes mercados

Riesgos estratégicos

  1. Puede generar señales falsas en mercados altamente volátiles, lo que requiere mecanismos de filtrado adicionales
  2. La selección de parámetros sensibles podría conducir a un exceso de negociación, aumentando los costes de transacción
  3. Posibilidad de retraso en los puntos de inversión de tendencia que afecten al rendimiento de la estrategia
  4. La posición de stop-loss incorrecta podría dar lugar a salidas prematuras o pérdidas excesivas
  5. Necesidad de considerar el impacto de los costes de transacción en los rendimientos de la estrategia

Direcciones de optimización

  1. Añadir un mecanismo de evaluación de las condiciones del mercado para utilizar diferentes parámetros en diferentes estados del mercado
  2. Introducción de filtros de volumen para mejorar la fiabilidad de la señal
  3. Optimizar los parámetros de stop loss y take profit para adaptarse mejor a la volatilidad del mercado
  4. Añadir filtros de tendencia para evitar operaciones frecuentes en mercados variados
  5. Considere la posibilidad de añadir filtros de tiempo para evitar el comercio durante los períodos desfavorables

Resumen de las actividades

La estrategia construye un sistema de negociación completo mediante la combinación de indicadores EFI, desviación estándar y ATR. Sus fortalezas se encuentran en la alta fiabilidad de la señal y el control de riesgos razonable, aunque todavía se necesita optimización para diferentes entornos de mercado. La estabilidad y rentabilidad de la estrategia se pueden mejorar aún más agregando evaluación de la condición del mercado, filtrado de volumen y otros mecanismos. En general, proporciona un marco comercial cuantitativo sólido con valor práctico.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Elder's Force Index Strategy with ATR-Based SL and TP", overlay=true)

// Input parameters for fast and long EFI
efi_fast_length = input.int(13, "Fast EFI Length", minval=1)
efi_long_length = input.int(50, "Long EFI Length", minval=1)
stdev_length = input.int(50, "Standard Deviation Length", minval=2, maxval=300)
numdev = input.float(2, "Number of Deviations", minval=1, maxval=20, step=0.1)
atr_length = input.int(14, "ATR Length", minval=1)
atr_multiplier_sl = input.float(1.5, "ATR Multiplier for Stop Loss", step=0.1)
trailing_tp_multiplier = input.float(0.5, "Multiplier for Trailing Take Profit", step=0.1)

// Elder's Force Index Calculation for Fast and Long EFI
efi_fast = ta.ema((close - close[1]) * volume, efi_fast_length)
efi_long = ta.ema((close - close[1]) * volume, efi_long_length)

// Calculate Standard Deviation for Fast EFI
efi_fast_average = ta.sma(efi_fast, stdev_length)
efi_fast_stdev = ta.stdev(efi_fast, stdev_length)
efi_fast_diff = efi_fast - efi_fast_average
efi_fast_result = efi_fast_diff / efi_fast_stdev

// Calculate Standard Deviation for Long EFI
efi_long_average = ta.sma(efi_long, stdev_length)
efi_long_stdev = ta.stdev(efi_long, stdev_length)
efi_long_diff = efi_long - efi_long_average
efi_long_result = efi_long_diff / efi_long_stdev

// Define upper and lower standard deviation levels
upper_sd = numdev
lower_sd = -numdev

// Define entry conditions based on crossing upper and lower standard deviations
long_condition = efi_fast_result > upper_sd and efi_long_result > upper_sd
short_condition = efi_fast_result < lower_sd and efi_long_result < lower_sd

// Check if a position is already open
is_position_open = strategy.position_size != 0

// Calculate ATR for stop loss and take profit
atr = ta.atr(atr_length)

// Initialize stop loss and take profit variables
var float stop_loss = na
var float take_profit = na

// Execute trades based on conditions, ensuring only one trade at a time
if (long_condition and not is_position_open)
    strategy.entry("Long", strategy.long)
    stop_loss := close - atr * atr_multiplier_sl  // Set initial stop loss based on ATR
    take_profit := close + atr * trailing_tp_multiplier  // Set initial take profit based on ATR

if (short_condition and not is_position_open)
    strategy.entry("Short", strategy.short)
    stop_loss := close + atr * atr_multiplier_sl  // Set initial stop loss based on ATR
    take_profit := close - atr * trailing_tp_multiplier  // Set initial take profit based on ATR

// Update exit conditions
if (is_position_open)
    // Update stop loss for trailing
    if (strategy.position_size > 0)  // For long positions
        stop_loss := math.max(stop_loss, close - atr * atr_multiplier_sl)
        
        // Adjust take profit based on price movement
        take_profit := math.max(take_profit, close + atr * trailing_tp_multiplier)

    else if (strategy.position_size < 0)  // For short positions
        stop_loss := math.min(stop_loss, close + atr * atr_multiplier_sl)
        
        // Adjust take profit based on price movement
        take_profit := math.min(take_profit, close - atr * trailing_tp_multiplier)

    // Set exit conditions
    strategy.exit("Long Exit", from_entry="Long", stop=stop_loss, limit=take_profit)
    strategy.exit("Short Exit", from_entry="Short", stop=stop_loss, limit=take_profit)


Relacionados

Más.