Estratégia de Força

Autora:ChaoZhang, Data: 2024-01-24 11:25:01
Tags:

img

Resumo

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.

Estratégia lógica

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.

Análise das vantagens

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.

Análise de riscos

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.

  1. Quando os preços flutuam violentamente, os sinais comerciais gerados pelas médias móveis podem atrasar.

  2. Os indicadores do RSI são propensos a divergências que podem causar um julgamento erróneo dos sinais de negociação.

  3. 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.

Orientações de otimização

A estratégia pode ser ainda melhorada, concentrando-se principalmente nos seguintes aspectos:

  1. Adicionar médias móveis adaptativas para ajustar automaticamente os parâmetros com base na volatilidade do mercado para melhorar a flexibilidade.

  2. Incorporar indicadores de volatilidade como as Bandas de Bollinger para lidar com oscilações violentas dos preços do mercado.

  3. 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.

  4. Ampliar as amostras de ensaio através de carteiras de vários mercados para validar a eficácia entre os mercados.

  5. 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.

Resumo

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)


Mais.