Estratégia de negociação quantitativa baseada na média móvel e no índice de força relativa


Data de criação: 2024-01-24 11:25:01 última modificação: 2024-01-24 11:25:01
cópia: 0 Cliques: 589
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa baseada na média móvel e no índice de força relativa

Visão geral

A estratégia de ruptura de campo de força é uma estratégia de negociação quantitativa baseada em médias móveis e índices relativamente fortes. A estratégia julga a direção da tendência do mercado detectando a ruptura de preços de médias móveis críticas, em combinação com o indicador RSI para determinar o momento de entrada.

Princípio da estratégia

A estratégia de ruptura de campo de força usa duas médias móveis, a primeira é a EMA de 10 períodos como uma média móvel rápida, e a segunda é a EMA de 200 períodos como uma 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.

A estratégia também combina o indicador RSI para determinar o momento específico de entrada. Se o preço estiver em uma tendência ascendente, um sinal de fechamento será emitido quando o RSI baixar abaixo da média móvel rápida (RSI menor que 5). Se o preço estiver em uma tendência descendente, um sinal de fechamento será emitido quando o RSI subir acima da média móvel rápida (RSI maior que 95)

O princípio de stop loss após o shorting é que, se o preço cair novamente ou quebrar a linha de 10 dias, o stop loss será eliminado.

Análise de vantagens estratégicas

A maior vantagem da estratégia é a sua capacidade de acompanhamento de tendências. A média móvel em si tem uma boa função de julgamento de tendências. A estratégia aproveita ao máximo a vantagem da linha média rápida e lenta, a linha rápida determina a direção da tendência de curto prazo, a linha lenta determina a direção da tendência de longo prazo.

A inclusão do indicador RSI também aumenta a vantagem da estratégia. A combinação de altos e baixos do RSI pode efetivamente emitir sinais de negociação quando ocorrem excessos de compra e venda, o que aumenta a eficácia real da estratégia.

Análise de Riscos

Apesar de ter uma forte capacidade de acompanhamento de tendências, nenhuma estratégia de indicadores técnicos pode evitar completamente perdas, e ainda existe um certo risco. Em particular, pode haver o seguinte risco:

  1. Os sinais de negociação gerados pelas médias móveis podem ser atrasados quando os preços flutuam fortemente.
  2. O indicador RSI é propenso a desvios, o que leva a erros de avaliação de sinais de negociação.
  3. Durante a operação prolongada, os parâmetros errados podem levar a excesso de negociação.

Para reduzir o risco, os parâmetros da média móvel podem ser ajustados, otimizando a combinação de parâmetros do RSI, permitindo uma distância adequada da linha de parada e um controle razoável do tamanho da posição. A combinação de parâmetros otimizada deve ser plenamente verificada na retomada.

Direção de otimização da estratégia

A estratégia ainda tem espaço para ser melhorada, e concentra-se principalmente nos seguintes aspectos:

  1. Aumentar a média móvel adaptável, ajustando automaticamente os parâmetros da média móvel de acordo com a volatilidade do mercado, tornando-a mais flexível.

  2. A inclusão de indicadores de volatilidade, como a faixa de Bryn, permite uma resposta eficaz a um ambiente de mercado em que os preços flutuam fortemente.

  3. Aumentar os algoritmos de aprendizagem de máquina para obter combinações de parâmetros e regras de negociação melhores através do treinamento de IA, tornando as estratégias mais inteligentes.

  4. Uma combinação de vários mercados, uma maior quantidade de amostras de teste e a eficácia de estratégias entre diferentes mercados.

  5. A introdução de módulos de análise fundamental, combinados com políticas macroeconômicas, eventos importantes e outros, para avaliar a evolução do mercado e fornecer base para decisões estratégicas.

Resumir

A estratégia de ruptura de campo de força é uma estratégia de média móvel muito prática. Ela usa o princípio de que o preço rompe a linha média rápida e lenta para determinar a tendência, enquanto o indicador RSI é auxiliado para entrar com precisão. Esta combinação aproveita ao máximo as vantagens da linha média e do indicador de supera compra e supera venda.

Código-fonte da estratégia
/*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)