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

Auteur:ChaoZhang est là., Date: 2023-12-25 11:40:36 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie s'appelle Quantitative Trading Strategy Based on RSI Indicator and Moving Average. Elle utilise l'indicateur RSI et les moyennes mobiles comme signaux de trading pour mettre en œuvre une stratégie de trading quantitative qui effectue des opérations d'inversion dans le contexte de la tendance.

Principe de stratégie

La stratégie utilise principalement l'indicateur RSI et les moyennes mobiles rapides / lentes pour déterminer les tendances des prix et le timing de l'inversion. Plus précisément, elle calcule d'abord la moyenne mobile rapide (SMA) et la moyenne mobile lente. Lorsque la SMA rapide traverse la SMA lente, un signal d'achat est généré.

Dans le même temps, cette stratégie calcule l'indicateur RSI pour déterminer si le prix est en état de surachat ou de survente. Avant d'ouvrir des positions, il jugera si l'indicateur RSI est normal. Si le RSI dépasse le seuil défini, il suspendra les positions d'ouverture et attendra que le RSI recule avant d'ouvrir des positions. Cela peut éviter d'établir des positions à un moment défavorable de surachat et de survente. D'autre part, après avoir pris des positions, si le RSI dépasse le seuil défini de prise de profit, il fermera des positions pour prendre des profits. Cela peut verrouiller les gains commerciaux.

En collaborant avec les moyennes mobiles, les positions peuvent être ouvertes lorsque des signaux d'inversion de prix se produisent. et en tirant profit lorsque suracheté ou survendu, une stratégie de trading quantitative qui effectue des opérations d'inversion pour les profits sous le fond de la tendance des prix peut être mise en œuvre.

Les avantages

La stratégie présente les avantages suivants:

  1. L'utilisation de la moyenne mobile croix d'or comme signal d'achat et croix de mort comme signal de vente peut capturer avec précision les opportunités d'inversion de tendance des prix.

  2. En jugeant les conditions de surachat et de survente à travers l'indicateur RSI, il peut efficacement éviter d'établir des positions lorsque les prix fluctuent excessivement à court terme, évitant ainsi des pertes flottantes inutiles.

  3. Les risques peuvent être bien contrôlés. Le RSI take profit peut maintenir les positions dans une fourchette de profit raisonnable et contrôler efficacement les risques de trading.

  4. Facile à optimiser les paramètres. Les périodes SMA, les paramètres RSI, etc. peuvent être ajustés de manière flexible pour s'adapter à différents environnements de marché.

  5. Efficacité élevée de l'utilisation du capital: des transactions fréquentes peuvent être effectuées pendant les phases de consolidation de la tendance et de choc, ce qui permet une utilisation efficace du capital.

Analyse des risques

La stratégie comporte également les risques suivants:

  1. Les moyennes mobiles utilisées comme indicateurs de jugement des tendances présentent certains délais, ce qui peut entraîner un mauvais moment d'ouverture des positions.

  2. Risque de négociation fréquent: sur les marchés oscillants, il peut entraîner des ouvertures et des fermetures de positions trop fréquentes.

  3. Le risque de réglage des paramètres. Les périodes SMA et les paramètres RSI nécessitent des tests et des ajustements répétés pour s'adapter aux marchés. Des réglages incorrects peuvent affecter les performances de la stratégie.

  4. Prendre le risque de profit: des réglages de prise de profit RSI inappropriés peuvent également entraîner une sortie prématurée des positions ou une hausse continue après la sortie de prise de profit.

Directions d'optimisation

Les directions d'optimisation sont les suivantes:

  1. Essayez d'utiliser le MACD, les bandes de Bollinger et d'autres indicateurs combinés avec le RSI pour rendre les signaux plus précis et fiables.

  2. Augmenter les algorithmes d'apprentissage automatique pour ajuster automatiquement les paramètres en fonction des données historiques, réduisant les risques de réglage des paramètres.

  3. Améliorer les mécanismes d'optimisation des stratégies de prise de profit afin de les rendre plus intelligentes et adaptables aux changements du marché.

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

  5. Combiner les données à haute fréquence et utiliser les données en temps réel au niveau des ticks pour les transactions à haute fréquence afin d'améliorer la fréquence de la stratégie.

Conclusion

En résumé, cette stratégie utilise les signaux de trading générés par l'indicateur RSI et les moyennes mobiles pour mettre en œuvre une stratégie quantitative qui effectue des opérations d'inversion pendant les tendances. Par rapport à l'utilisation de moyennes mobiles seules, en ajoutant des jugements d'indicateur RSI, cette stratégie peut efficacement prévenir les positions d'ouverture défavorables et contrôler les risques de trading grâce à la prise de profit RSI. Dans une certaine mesure, elle améliore la stabilité 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="背景")
    
    
    
    
    
    
    

Plus de