Stratégie de trading quantitative basée sur la moyenne mobile et l'indice de force relative


Date de création: 2024-01-24 11:25:01 Dernière modification: 2024-01-24 11:25:01
Copier: 0 Nombre de clics: 589
1
Suivre
1617
Abonnés

Stratégie de trading quantitative basée sur la moyenne mobile et l’indice de force relative

Aperçu

La stratégie de rupture de force est une stratégie de négociation quantitative basée sur des moyennes mobiles et des indices relativement faibles. La stratégie permet de juger de la direction de la tendance du marché en détectant la rupture des moyennes mobiles critiques, en combinaison avec l’indicateur RSI pour déterminer le moment d’entrée. L’idée centrale est d’émettre un signal de négociation lorsque le prix franchit la moyenne mobile, complété par le signal de survente de l’indicateur RSI.

Principe de stratégie

La stratégie de rupture de champ de force utilise deux moyennes mobiles, la première étant une EMA de 10 cycles comme moyenne mobile rapide, et la seconde une EMA de 200 cycles comme moyenne mobile lente. La ligne rapide représente la tendance actuelle des prix et la ligne lente représente la tendance à long terme.

La stratégie combine également le RSI pour déterminer le moment d’entrée spécifique. Si le prix est en hausse, un signal de fermeture est émis lorsque le RSI est en dessous de la moyenne mobile rapide (indicateur RSI inférieur à 5). Si le prix est en baisse, un signal de fermeture est émis lorsque le RSI est au-dessus de la moyenne mobile rapide (indicateur RSI supérieur à 95)

Le principe de stop loss est de s’arrêter si le cours revient à la baisse ou franchit la ligne des 10 jours.

Analyse des forces stratégiques

Le plus grand avantage de cette stratégie réside dans sa capacité à suivre les tendances. La moyenne mobile a elle-même de bonnes capacités de jugement de la tendance. La stratégie tire pleinement parti de l’avantage de la moyenne rapide et lente. La ligne rapide détermine la direction de la tendance à court terme et la ligne lente la direction de la tendance à long terme.

L’ajout de l’indicateur RSI augmente également l’avantage de la stratégie. La combinaison des hauts et des bas du RSI peut efficacement émettre un signal de transaction lors d’un surachat et d’une survente, ce qui permet d’entrer en jeu à un éventuel revers et d’améliorer l’efficacité de la stratégie.

Analyse des risques

Bien que cette stratégie ait une forte capacité de suivi de la tendance, aucune stratégie d’indicateur technique ne peut éviter complètement les pertes. Il existe toujours un certain risque.

  1. Les signaux de négociation générés par les moyennes mobiles peuvent être retardés lorsque les prix fluctuent fortement.
  2. L’indicateur RSI est sujet à des déviations, ce qui conduit à des erreurs de jugement des signaux de trading.
  3. Les paramètres inappropriés peuvent entraîner des transactions excessives pendant une longue période.

Afin de réduire le risque, il est possible d’ajuster les paramètres des moyennes mobiles, d’optimiser la combinaison de paramètres RSI, d’assouplir la distance de la ligne d’arrêt, de contrôler raisonnablement la taille de la position, etc. La combinaison de paramètres optimisée doit être suffisamment vérifiée lors de la rétroévaluation.

Orientation de l’optimisation de la stratégie

La stratégie a encore de la marge d’optimisation et se concentre principalement sur les aspects suivants:

  1. Ajout d’une moyenne mobile qui s’adapte et ajuste automatiquement les paramètres de la moyenne mobile en fonction des fluctuations du marché, ce qui la rend plus flexible.

  2. L’ajout d’indicateurs de volatilité, tels que les bandes de Brin, permet de faire face efficacement aux fortes fluctuations des prix sur le marché.

  3. L’ajout d’algorithmes d’apprentissage automatique pour obtenir des combinaisons de paramètres et des règles de négociation plus optimales grâce à l’entraînement de l’IA, rendant les stratégies plus intelligentes.

  4. La combinaison de plusieurs marchés, l’élargissement des échantillons testés et l’efficacité des stratégies de validation entre les différents marchés.

  5. L’introduction d’un module d’analyse fondamentale, combiné à des mesures macroéconomiques et à des événements majeurs, pour évaluer l’évolution du marché et servir de base à la prise de décisions stratégiques.

Résumer

La stratégie de rupture de champ de force est une stratégie de moyenne mobile très pratique. Elle utilise le principe de la rupture rapide et lente de la moyenne des prix pour juger de la tendance, tout en s’appuyant sur l’indicateur RSI pour une entrée précise. Cette combinaison tire pleinement parti des avantages de la ligne de parité et de l’indicateur de survente.

Code source de la stratégie
/*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)