A estratégia de avanço da força é uma estratégia quantitativa de negociação baseada em médias móveis e no índice de força relativa (RSI). Detecta a direção da tendência do mercado monitorando os avanços de preços das principais médias móveis e usa o indicador RSI para determinar os sinais de entrada.
A estratégia de avanço da força emprega duas médias móveis. A primeira é uma EMA de 10 períodos como a média móvel rápida. A segunda é uma EMA de 200 períodos como a média móvel lenta. A linha rápida representa a tendência de preços atual e a linha lenta representa a tendência de preços de longo prazo. Quando os preços sobem e penetram acima da linha de 10 dias, é um sinal de alta. Quando os preços caem e penetram abaixo da linha de 10 dias, é um sinal de baixa.
A estratégia também incorpora o indicador RSI para determinar momentos específicos de entrada. Se os preços estão em uma tendência ascendente e um ponto baixo do RSI aparece abaixo da média móvel rápida (RSI cai abaixo de 5), um sinal longo é acionado.
O princípio do stop loss após a tomada de posições longas/cortas consiste em sair da posição se os preços romperem novamente a média móvel de 10 dias.
A maior vantagem desta estratégia é sua forte capacidade de seguir tendências. As médias móveis têm uma excelente funcionalidade de julgamento de tendências. A estratégia faz pleno uso dos pontos fortes das linhas rápidas e lentas, onde a linha rápida julga a tendência de curto prazo e a linha lenta julga a tendência de longo prazo. Quando a linha rápida tem uma penetração ascendente da linha lenta, indica tendências ascendentes de curto e longo prazo, o que é um forte sinal de compra.
A adição do indicador RSI também aumenta a vantagem da estratégia. A combinação de pontos altos e baixos do RSI pode efetivamente emitir sinais de negociação quando ocorrem condições de sobrecompra ou sobrevenda, permitindo a participação em pontos de reversão potenciais para melhorar o desempenho real.
Embora a estratégia tenha uma capacidade relativamente forte de rastreamento de tendências, nenhuma estratégia de indicador técnico pode evitar completamente perdas.
Quando os preços flutuam violentamente, os sinais comerciais gerados pelas médias móveis podem atrasar.
Os indicadores do RSI são propensos a divergências que podem causar um julgamento erróneo dos sinais de negociação.
Os parâmetros inadequados em função da operação a longo prazo poderiam conduzir a um excesso de negociação.
Para mitigar os riscos, parâmetros como a média móvel e o RSI podem ser ajustados e otimizados, os intervalos de stop-loss podem ser razoavelmente afrouxados, os tamanhos das posições podem ser controlados adequadamente.
A estratégia pode ser ainda melhorada, concentrando-se principalmente nos seguintes aspectos:
Adicionar médias móveis adaptativas para ajustar automaticamente os parâmetros com base na volatilidade do mercado para melhorar a flexibilidade.
Incorporar indicadores de volatilidade como as Bandas de Bollinger para lidar com oscilações violentas dos preços do mercado.
Aumentar os algoritmos de aprendizagem de máquina através de treinamento de IA para melhores combinações de parâmetros e regras de negociação para melhorar a automação.
Ampliar as amostras de ensaio através de carteiras de vários mercados para validar a eficácia entre os mercados.
Introduzir módulos de análise fundamental baseados em políticas macroeconómicas, grandes eventos, etc., para apoiar a tomada de decisões estratégicas.
A estratégia de avanço da força é uma estratégia prática baseada em média móvel. Ela julga as tendências através da penetração de preços de médias móveis rápidas e lentas e entra precisamente no mercado com a ajuda de indicadores RSI. Esta combinação utiliza plenamente os pontos fortes das médias móveis e indicadores de sobrecompra / sobrevenda. A estratégia é validada em vários mercados com retornos constantes e riscos controláveis. É uma estratégia de negociação quantitativa 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)