La estrategia de la fuerza

El autor:¿ Qué pasa?, Fecha: 2024-01-24 11:25:01
Las etiquetas:

img

Resumen general

La estrategia de avance de fuerza es una estrategia de trading cuantitativa basada en promedios móviles e índice de fuerza relativa (RSI). Detecta la dirección de tendencia del mercado mediante el monitoreo de los avances de precios de los promedios móviles clave y utiliza el indicador RSI para determinar las señales de entrada. La idea central es emitir señales comerciales cuando los precios penetran el promedio móvil, combinadas con las señales de sobrecompra/sobreventa del indicador RSI.

Estrategia lógica

La estrategia de avance de fuerza emplea dos promedios móviles. El primero es un EMA de 10 períodos como el promedio móvil rápido. El segundo es un EMA de 200 períodos como el promedio móvil lento. La línea rápida representa la tendencia actual de precios y la línea lenta representa la tendencia de precios a largo plazo. Cuando los precios suben y penetran por encima de la línea de 10 días, es una señal alcista. Cuando los precios caen y penetran por debajo de la línea de 10 días, es una señal bajista.

La estrategia también incorpora el indicador RSI para determinar momentos de entrada específicos. Si los precios están en una tendencia al alza y un punto bajo de RSI aparece por debajo del promedio móvil rápido (RSI cae por debajo de 5), se activa una señal larga. Si los precios están en una tendencia a la baja y un punto alto de RSI aparece por encima del promedio móvil rápido (RSI supera 95), se activa una señal corta.

El principio de stop loss después de tomar posiciones largas / cortas es salir de la posición si los precios vuelven a romper la media móvil de 10 días.

Análisis de ventajas

La mayor ventaja de esta estrategia es su fuerte capacidad de seguir tendencias. Las medias móviles tienen una excelente funcionalidad de evaluación de tendencias. La estrategia hace pleno uso de las líneas rápidas y lentas, donde la línea rápida juzga la tendencia a corto plazo y la línea lenta juzga la tendencia a largo plazo. Cuando la línea rápida tiene una penetración ascendente de la línea lenta, indica tendencias ascendentes a corto y largo plazo, que es una fuerte señal de compra.

La combinación de puntos altos y bajos de RSI puede emitir efectivamente señales comerciales cuando se producen condiciones de sobrecompra o sobreventa, lo que permite la participación en puntos de reversión potenciales para mejorar el rendimiento real.

Análisis de riesgos

Aunque la estrategia tiene una capacidad de seguimiento de tendencias relativamente fuerte, ninguna estrategia de indicadores técnicos puede evitar completamente las pérdidas.

  1. Cuando los precios fluctúan violentamente, las señales comerciales generadas por las medias móviles pueden retrasarse.

  2. Los indicadores de RSI son propensos a la divergencia que puede causar un juicio erróneo de la señal de comercio.

  3. Los parámetros inadecuados en el funcionamiento a largo plazo podrían conducir a un exceso de negociación.

Para mitigar los riesgos, se pueden ajustar y optimizar parámetros como la media móvil y el RSI, los rangos de stop-loss se pueden aflojar razonablemente, los tamaños de posición se pueden controlar adecuadamente.

Direcciones de optimización

Hay margen para una mayor optimización de la estrategia, centrada principalmente en:

  1. Añadir medias móviles adaptativas para ajustar automáticamente los parámetros basados en la volatilidad del mercado para mejorar la flexibilidad.

  2. Incorporar indicadores de volatilidad como las bandas de Bollinger para hacer frente a las violentas oscilaciones de los precios del mercado.

  3. Aumentar los algoritmos de aprendizaje automático a través de la capacitación de IA para mejores combinaciones de parámetros y reglas comerciales para mejorar la automatización.

  4. Ampliar las muestras de ensayo a través de carteras de múltiples mercados para validar la eficacia entre mercados.

  5. Introducir módulos de análisis fundamental basados en políticas macro, eventos importantes, etc., para proporcionar apoyo a la toma de decisiones estratégicas.

Resumen de las actividades

La estrategia de avance de fuerza es una estrategia práctica basada en promedios móviles. Juzga las tendencias a través de la penetración de precios de promedios móviles rápidos y lentos y entra precisamente en el mercado con la ayuda de indicadores RSI. Esta combinación utiliza plenamente las fortalezas de los promedios móviles y los indicadores de sobrecompra / sobreventa. La estrategia se valida en varios mercados con rendimientos constantes y riesgos controlables. Es una estrategia comercial cuantitativa recomendada.


/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-23 00:00:00
period: 30m
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/
// © JoseMetal
//@version=5

//== Constantes
c_blanco              = color.rgb(255, 255, 255, 0)
c_negro               = color.rgb(0, 0, 0, 0)
c_amarillo_radiactivo = color.rgb(255, 255, 0, 0)
c_cian_radiactivo     = color.rgb(0, 255, 255, 0)
c_verde_radiactivo    = color.rgb(0, 255, 0, 0)
c_verde               = color.rgb(0, 128, 0, 0)
c_verde_oscuro        = color.rgb(0, 80, 0, 0)
c_rojo_radiactivo     = color.rgb(255, 0, 0, 0)
c_rojo                = color.rgb(128, 0, 0, 0)
c_rojo_oscuro         = color.rgb(80, 0, 0, 0) 
c_naranja_oscuro      = color.rgb(200, 120, 0, 0)
noneColor             = color.new(color.white, 100)
max_float             = 10000000000.0



//== Funciones

//== Declarar estrategia y período de testeo
strategy("Estrategia Larry Connors", shorttitle="Estrategia Larry Connors", overlay=true)
fecha_inicio     = input(timestamp("1 Jan 2000"), title="• Fecha de inicio", group="Período de pruebas", inline="periodo_de_pruebas")
vela_en_fecha    = true
posicion_abierta = strategy.position_size != 0
LONG_abierto     = strategy.position_size > 0
SHORT_abierto    = strategy.position_size < 0

GRUPO_P           = "Posiciones"
P_permitir_LONGS  = input.bool(title="LONGS", group=GRUPO_P, defval=true, inline="posiciones")
P_permitir_SHORTS = input.bool(title="SHORTS", group=GRUPO_P, defval=true, inline="posiciones")

GRUPO_general = "General"
mostrar_color_velas = input.bool(title="Colorear velas", defval=true, group=GRUPO_general)



//== Inputs de indicadores
// Medias móviles simples
GRUPO_SMAs = "SMAs"
SMA_1_fuente = input.source(title="• (Media de salida) Fuente / Long.", group=GRUPO_SMAs, defval=close, inline="sma_1")
SMA_1_length = input.int(title="", group=GRUPO_SMAs, defval=10, minval=1, inline="sma_1")
SMA_2_fuente = input.source(title="• (Media tendencial) Fuente / Long.", group=GRUPO_SMAs, defval=close, inline="sma_2")
SMA_2_length = input.int(title="", group=GRUPO_SMAs, defval=200, minval=1, inline="sma_2")
SMA_1        = ta.ema(SMA_1_fuente, SMA_1_length)
SMA_2        = ta.ema(SMA_2_fuente, SMA_2_length)

// RSI
GRUPO_RSI    = "RSI"
RSI_src      = input.source(title="• Fuente / Longitud", group=GRUPO_RSI, defval=close, inline="rsi_calc")
RSI_length   = input.int(title="", group=GRUPO_RSI, defval=2, minval=1, inline="rsi_calc")
RSI          = ta.rsi(RSI_src, RSI_length)
RSI_nivel_os = input.int(title="• Sobreventa / Sobrecompra", group=GRUPO_RSI, defval=5, minval=0, maxval=99, inline="rsi_niveles")
RSI_nivel_ob = input.int(title="", group=GRUPO_RSI, defval=95, minval=1, maxval=100, inline="rsi_niveles")


//== Cálculo de condiciones
cierre_sobre_SMA_1 = close > SMA_1
tendencia_alcista  = close > SMA_2
RSI_en_sobreventa  = RSI < RSI_nivel_os
RSI_en_sobrecompra = RSI > RSI_nivel_ob



//== Entrada (deben cumplirse todas para entrar)
LONG_condition_1    = tendencia_alcista
LONG_condition_2    = not cierre_sobre_SMA_1 // Vela con cierre bajo la media rápida
LONG_condition_3    = RSI_en_sobreventa[1] and not RSI_en_sobreventa // Sobreventa en la vela anterior y ya no en la actual
all_LONG_conditions = LONG_condition_1 and LONG_condition_2 and LONG_condition_3
entrar_en_LONG      = P_permitir_LONGS and all_LONG_conditions and vela_en_fecha and not LONG_abierto

SHORT_condition_1    = not tendencia_alcista
SHORT_condition_2    = cierre_sobre_SMA_1 // Vela con cierre sobre la media rápida
SHORT_condition_3    = RSI_en_sobrecompra[1] and not RSI_en_sobrecompra // Sobrecompra en la vela anterior y ya no en la actual
all_SHORT_conditions = SHORT_condition_1 and SHORT_condition_2 and SHORT_condition_3
entrar_en_SHORT      = P_permitir_SHORTS and all_SHORT_conditions and vela_en_fecha and not SHORT_abierto

if (entrar_en_LONG)
    strategy.entry("Abrir Long", strategy.long)

if (entrar_en_SHORT)
    strategy.entry("Abrir Short", strategy.short)



//== Salida
exit_LONG_conditions  = cierre_sobre_SMA_1
exit_SHORT_conditions = not cierre_sobre_SMA_1


if (LONG_abierto and exit_LONG_conditions)
    strategy.close("Abrir Long")

if (SHORT_abierto and exit_SHORT_conditions)
    strategy.close("Abrir Short")


//== Ploteo en pantalla
// SMAs
plot(SMA_1, "Media de salida", color=color.aqua, linewidth=2)
plot(SMA_2, "Media tendencial", color=tendencia_alcista ? color.green : color.red, linewidth=4)

// Color de fondo
bgcolor = entrar_en_LONG ? color.new(color.green, 85) : entrar_en_SHORT ? color.new(color.red, 85) : color.new(color.black, 100)
bgcolor(bgcolor)

// Color de las velas según sobrecompra/sobreventa del RSI
color_velas = mostrar_color_velas ? (RSI_en_sobreventa ? #00a800 : RSI_en_sobrecompra ? #ca0000 : na) : na
barcolor(color_velas)


Más.