
La estrategia de ruptura del campo de fuerza es una estrategia de negociación cuantitativa basada en promedios móviles e índices relativamente fuertes. La estrategia determina la dirección de la tendencia del mercado mediante la detección de la ruptura del precio del promedio móvil clave, en combinación con el indicador RSI para determinar el momento de entrada. La idea central es emitir una señal de negociación cuando el precio rompe la media móvil, complementada con una señal de compra y venta de RSI.
La estrategia de ruptura de campo de fuerza utiliza dos medias móviles, la primera es una EMA de 10 períodos como una media móvil rápida, y la segunda es una EMA de 200 períodos como una media móvil lenta. La línea rápida representa la tendencia de los precios actuales, y la línea lenta representa la tendencia de los precios a largo plazo.
La estrategia también combina el indicador RSI para determinar el momento específico de entrada. Si el precio está en una tendencia ascendente, se emite una señal de cierre cuando se produce un punto bajo del RSI por debajo de la media móvil rápida (RSI menor a 5), y si el precio está en una tendencia descendente, se emite una señal de cierre cuando se produce un punto alto del RSI por encima de la media móvil rápida (RSI mayor a 95).
El principio de la parada de pérdidas después de hacer más shorting es que si el precio vuelve a caer o romper la línea de 10 días, se detiene la salida.
La mayor ventaja de esta estrategia es que tiene una gran capacidad de seguimiento de tendencias. La media móvil tiene una buena función de determinación de tendencias. La estrategia aprovecha al máximo las ventajas de la línea media rápida y lenta, la línea rápida determina la dirección de la tendencia a corto plazo y la línea lenta determina la dirección de la tendencia a largo plazo.
La inclusión del indicador RSI también aumenta la ventaja de la estrategia. La combinación de los puntos altos y bajos del RSI puede enviar señales de negociación efectivas en caso de sobrecompra y sobreventa, lo que permite entrar en juego en posibles puntos de inflexión y aumentar la efectividad real de la estrategia.
A pesar de que la estrategia tiene una gran capacidad de seguimiento de tendencias, ninguna estrategia de indicadores técnicos puede evitar completamente las pérdidas, y todavía existe un cierto riesgo. En concreto, puede haber los siguientes riesgos:
Para reducir el riesgo, se pueden ajustar los parámetros de las medias móviles, optimizar la combinación de parámetros RSI, relajar adecuadamente la distancia de la línea de parada, controlar razonablemente el tamaño de la posición, etc. La combinación de parámetros optimizada debe ser plenamente verificada en la retroevaluación.
La estrategia aún tiene margen de mejora y se centra en los siguientes aspectos:
Aumentar el promedio móvil adaptativo, ajustando automáticamente los parámetros del promedio móvil según la volatilidad del mercado, lo que lo hace más flexible.
La inclusión de indicadores de volatilidad, como las bandas de Brin, permite una respuesta efectiva a un entorno de mercado con fuertes fluctuaciones de precios.
Aumentar los algoritmos de aprendizaje automático para obtener mejores combinaciones de parámetros y reglas de negociación mediante el entrenamiento de la IA, lo que hace que las estrategias sean más inteligentes.
La combinación de múltiples mercados, la ampliación de las muestras de prueba y la validación de estrategias entre diferentes mercados.
Introducción de módulos de análisis fundamental, en combinación con políticas macroeconómicas y eventos importantes para evaluar el movimiento del mercado y proporcionar una base para la toma de decisiones estratégicas.
La estrategia de ruptura de campo de fuerza es una estrategia de media móvil muy práctica. Aplica el principio de que el precio rompa la línea media lenta y rápida para determinar la tendencia, mientras que el indicador RSI ayuda a ingresar con precisión. Esta combinación aprovecha al máximo las ventajas de la línea media y el indicador de sobreventa y sobreventa.
/*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)