Estrategia de trading cuantitativo del índice de poder de Elder basada en la desviación estándar y la media móvil

EFI ATR EMA SMA SD
Fecha de creación: 2024-11-28 17:08:24 Última modificación: 2024-11-28 17:08:24
Copiar: 1 Número de Visitas: 498
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo del índice de poder de Elder basada en la desviación estándar y la media móvil

Descripción general

La estrategia es un sistema de comercio cuantitativo basado en el índice de fuerza de Elder (EFI), que combina la diferencia estándar y las medias móviles para la determinación de señales, y utiliza ATR para ajustar dinámicamente la posición de parada de pérdidas. La estrategia logra un sistema de comercio completo mediante el cálculo de indicadores de EFI rápidos y lentos, y su estandarización para la determinación de señales cruzadas. La estrategia utiliza un mecanismo de parada y seguimiento de pérdidas dinámicas, controlando el riesgo de manera efectiva y buscando mayores ganancias.

Principio de estrategia

La estrategia se basa en los siguientes elementos centrales:

  1. Calcula el índice de fuerza rápida y lenta utilizando dos indicadores EFI de diferentes períodos (de 13 y 50)
  2. La normalización de la diferencia estándar para los dos periodos de EFI permite que la señal sea más estadísticamente significativa
  3. Cuando el EFI rápido y lento al mismo tiempo supera la diferencia estándar superior, se activa la señal de multitarea
  4. Cuando los EFI rápidos y lentos al mismo tiempo superan la diferencia estándar inferior, se activa la señal de vacío
  5. Utiliza ATR para establecer el stop loss de forma dinámica y ajustar el stop loss a medida que el precio cambia
  6. Utilizando un mecanismo de trazabilidad y bloqueo basado en ATR para mantener el crecimiento de las ganancias a la vez que se protegen

Ventajas estratégicas

  1. El sistema de señales combina características de volumen y volatilidad para mejorar la fiabilidad de las operaciones
  2. El uso de la normalización de la diferencia estándar para que la señal tenga un significado estadístico y reduzca la falsa señal
  3. El mecanismo de suspensión de pérdidas dinámicas permite controlar el riesgo y evitar retiros masivos
  4. El mecanismo de seguimiento de la suspensión protege las ganancias ya obtenidas y permite que las ganancias sigan creciendo
  5. La lógica de la estrategia es clara, los parámetros son ajustables, lo que facilita la optimización para diferentes mercados

Riesgo estratégico

  1. En los mercados con gran volatilidad, se pueden generar falsas señales que requieren un mecanismo de filtración adicional.
  2. La selección de parámetros demasiado sensible puede conducir a una sobrecambio y aumentar los costos de transacción.
  3. El retraso en el punto de inflexión de la tendencia puede afectar el rendimiento de la estrategia
  4. La incorrecta configuración de la posición de stop loss puede provocar salidas prematuras o sufrir pérdidas excesivas
  5. Es necesario considerar el impacto de los costos de transacción en los retornos de la estrategia

Dirección de optimización de la estrategia

  1. Aumentar el mecanismo de juicio del entorno del mercado, usando diferentes configuraciones de parámetros en diferentes estados del mercado
  2. Introducción de filtros de tráfico para mejorar la fiabilidad de la señal
  3. Optimización de los parámetros de stop loss para adaptarse mejor a las fluctuaciones del mercado
  4. Aumentar los filtros de tendencia para evitar el comercio frecuente en mercados convulsionados
  5. Considere agregar filtros de tiempo para evitar comerciar en períodos desfavorables

Resumir

La estrategia combina los indicadores EFI, la diferencia estándar y el ATR para construir un sistema de negociación completo. La estrategia tiene la ventaja de que la fiabilidad del sistema de señales es alta y el control de riesgos es razonable, pero aún así se necesita optimizar para diferentes entornos del mercado.

Código Fuente de la Estrategia
/*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)