Stratégie de trading quantitative basée sur l'indicateur RSI et la moyenne mobile


Date de création: 2023-12-25 11:40:36 Dernière modification: 2023-12-25 11:40:36
Copier: 0 Nombre de clics: 615
1
Suivre
1623
Abonnés

Stratégie de trading quantitative basée sur l’indicateur RSI et la moyenne mobile

Aperçu

Cette stratégie s’appelle la stratégie de trading quantitatif qui utilise l’indicateur RSI et la moyenne mobile comme signaux de négociation pour réaliser des opérations de retournement dans le contexte d’une tendance. Son idée centrale est d’ouvrir une position lorsque le cours d’une action émet des signaux de retournement et de faire un stop lors d’une survente.

Principe de stratégie

La stratégie utilise principalement l’indicateur RSI et les moyennes mobiles rapides pour juger de la tendance et du moment où les actions se retournent. Plus précisément, la stratégie calcule d’abord les moyennes mobiles rapides (SMA) et les moyennes mobiles lentes, générant un signal d’achat lorsque la moyenne mobile lente est traversée par la moyenne mobile rapide; et un signal de vente lorsque la moyenne mobile lente est traversée par la moyenne mobile rapide.

En même temps, cette stratégie calcule le RSI pour déterminer si le cours de l’action est en survente ou en survente. Avant d’ouvrir une position, il est nécessaire de déterminer si le RSI est normal. Si le RSI dépasse la valeur limite définie, il faut suspendre l’ouverture de la position et attendre que le RSI revienne.

La combinaison de l’indicateur RSI et des moyennes mobiles permet d’ouvrir des positions lorsque le cours de l’action génère un signal de revers; et d’effectuer des arrêts lors d’un surachat et d’une survente, pour réaliser une stratégie de trading quantitative qui permet de faire des opérations de revers rentables dans le contexte de la tendance des cours des actions.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. Il est possible d’ouvrir une position avec précision lorsque le cours de l’action est inversé. L’utilisation de la fourche d’or moyenne mobile comme signal d’achat et de la fourche morte comme signal de vente permet de saisir avec précision les occasions de reprise de la tendance des cours.

  2. Il permet d’éviter de prendre position à des moments défavorables. Le RSI permet de juger les situations de survente et de survente, ce qui permet de prévenir efficacement la création de positions en cas de fluctuation excessive du cours des actions à court terme et d’éviter des pertes irréversibles inutiles.

  3. Le stop RSI permet de maintenir une position dans une marge de profit raisonnable et de contrôler efficacement le risque de la transaction.

  4. Les paramètres peuvent être ajustés de manière flexible pour s’adapter à différentes conditions de marché.

  5. L’efficacité de l’utilisation des fonds est élevée. Il est possible de faire des transactions fréquentes pendant la phase de consolidation des tendances et de l’utilisation efficace des fonds.

Analyse des risques

Cette stratégie présente également les risques suivants:

  1. Risque d’erreur de suivi. Les moyennes mobiles sont un indicateur de tendance qui est en retard, ce qui peut entraîner une incohérence dans le moment d’ouverture de la position.

  2. Risque de transaction fréquente. Dans les conditions de choc, il peut être nécessaire de faire des opérations de placement trop fréquentes.

  3. Les paramètres du cycle SMA et du RSI doivent être testés et ajustés à plusieurs reprises pour s’adapter au marché. Des réglages inappropriés peuvent affecter la performance de la stratégie.

  4. Risque de stop. Un mauvais réglage du stop RSI peut également entraîner une position qui s’arrête prématurément ou qui continue à augmenter après le stop.

Direction d’optimisation

Les orientations de cette stratégie sont les suivantes:

  1. Essayez d’utiliser d’autres indicateurs tels que le MACD, la ligne de Brin et le RSI pour rendre le signal plus précis et plus fiable.

  2. L’ajout d’algorithmes d’apprentissage automatique permettant l’ajustement automatique des paramètres en fonction des données historiques réduit le risque de réglage des paramètres.

  3. L’ajout de mécanismes d’optimisation des stratégies de freinage pour rendre le freinage plus intelligent et adapté aux changements du marché.

  4. Optimiser les stratégies de gestion des positions et réduire les risques liés aux transactions individuelles en ajustant dynamiquement la taille des positions.

  5. Combiné avec des données à haute fréquence, les données en temps réel au niveau des ticks sont utilisées pour effectuer des transactions à haute fréquence, ce qui améliore la fréquence de la stratégie.

Résumer

Dans l’ensemble, cette stratégie utilise l’indicateur RSI et la moyenne mobile pour générer des signaux de négociation, ce qui permet une stratégie quantitative de calcul inverse pendant le fonctionnement de la tendance. Par rapport à l’utilisation de la moyenne mobile seule, l’ajout de la stratégie à l’indicateur RSI permet de prévenir efficacement l’ouverture d’une position à un moment défavorable et de contrôler le risque de négociation par le biais de l’arrêt RSI, ce qui améliore la stabilité de la stratégie.

Code source de la stratégie
/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//1. 做多
//    a. RSI在超买区间时不开单,直到RSI回落一点再开单
//    b. 已经有多仓,如果RSI超买,则平多获利,当RSI回落一点之后,再次开多,直到有交叉信号反转做空

//2. 做空
//    a. RSI在超卖区间时不开单,直到RSI回落一点之后再开多单
//    b. 已经有空仓,如果RSI超卖,则平空获利,当RSI回落一点之后,再开空单,直到有交叉信号反转做多

//@version=4
strategy("策略_RSI+移动揉搓线_", overlay=true)

// 输入
fastLength = input(11, minval=1)
slowLength = input(82,minval=1)
length = input(title="长度", type=input.integer, defval=14, minval=1, maxval=100)
hight_rsi = input(title="rsi超过上轨平多获利", type=input.integer, defval=80, minval=1, maxval=100)
low_rsi = input(title="rsi超过下轨平空获利", type=input.integer, defval=20, minval=1, maxval=100)

open_long_rsi_threshold = input(title="rsi低于该阈值时才开多", type=input.integer, defval=75, minval=1, maxval=100)
open_short_rsi_threshold = input(title="rsi高于该阈值时才开空仓", type=input.integer, defval=25, minval=1, maxval=100)

// 均线
sma_fast = sma(close, fastLength)
sma_slow = sma(close, slowLength)
// RSI
rsi = rsi(close, length)

//**********变量*start*******//
var long_f = false // 标记是否是均线交叉多头
var short_f = false // 标记是否是均线交叉空头
var long_open_pending = false // 标记开仓时rsi是否处于超买状态
var short_open_pending = false // 标记开仓时rsi是否处于超卖
var long_rsi_over_buy = false // 标记 多仓时 是否发生超买平多获利
var short_rsi_over_sell = false // 标记 空仓时 是否发生超卖平空获利

//**********逻辑*start*******//

// 买入
longCondition = crossover(sma_fast, sma_slow)
if (longCondition)
    short_rsi_over_sell := false // 清空该标记,防止再次开空仓
    long_f := true
	short_f := false
	if (rsi < hight_rsi)
	    // 并且没有超买
	    strategy.entry("多", long=strategy.long)
    if (rsi > hight_rsi)
        // 开仓时发生超买,等待rsi小于hight_rsi
	    long_open_pending := true

// 卖出
shortCondition = crossunder(sma_fast, sma_slow)
if (shortCondition)
    long_rsi_over_buy := false //清空该标记,防止再次开多仓
    long_f := false
    short_f := true
    if (rsi > low_rsi)
        strategy.entry("空", long=strategy.short)
	if (rsi < low_rsi)
	    // 开仓时发生超卖,等待rsi大于low_rsi
	    short_open_pending := true
	    

// 等待RSI合理,买入开仓
if (long_f and long_open_pending and strategy.position_size == 0 and rsi < open_long_rsi_threshold)
    strategy.entry("多", long=strategy.long)
	long_open_pending := false
// 等待RSI合理,卖出开仓
if (short_f and short_open_pending and strategy.position_size == 0 and rsi > open_short_rsi_threshold)
    strategy.entry("空", long=strategy.short)
	short_open_pending := false


	
//RSI止盈(RSI超买平多)
if (strategy.position_size > 0 and long_f and rsi > hight_rsi)
	strategy.close_all()
	long_rsi_over_buy := true
//RSI止盈(RSI超卖平空)
if (strategy.position_size < 0 and short_f and rsi < low_rsi)
	strategy.close_all()
	short_rsi_over_sell := true
	
	
//RSI止盈之后,再次开多
if (long_f and long_rsi_over_buy and strategy.position_size == 0 and rsi < hight_rsi)
    long_rsi_over_buy := false
    strategy.entry("多", long=strategy.long)
//RSI止盈之后,再次开空
if (short_f and short_rsi_over_sell and strategy.position_size == 0 and rsi > low_rsi)
    short_rsi_over_sell := false
    strategy.entry("空", long=strategy.short)


//**********绘图*start*******//

p1 = plot(sma_fast, linewidth=2, color=color.green)
p2 = plot(sma_slow, linewidth=2, color=color.red)
fill(p1, p2, color=color.green)
plot(cross(sma_fast, sma_slow) ? sma_fast : na, style = plot.style_circles, linewidth = 4)

// 绘制rsi线
//plot(rsi, color=color.green, editable=true, style=plot.style_circles, linewidth=2)

// 绘制上下轨
//high_ = hline(80, title="上轨")
//low_ = hline(20, title="下轨")
//fill(high_, low_, transp=80, editable=true, title="背景")