Backtesting et optimisation des stratégies RSI


Date de création: 2023-11-10 11:59:40 Dernière modification: 2023-11-10 11:59:40
Copier: 1 Nombre de clics: 858
1
Suivre
1617
Abonnés

Backtesting et optimisation des stratégies RSI

Aperçu

Cette stratégie est basée sur l’indicateur de force relative (RSI) pour juger de la survente et de la survente. Elle vise à établir une position inversée lorsque le RSI atteint la zone de survente et de survente. La stratégie est simple et efficace.

Principe de stratégie

La stratégie utilise uniquement l’indicateur RSI comme signal de prise de position. Faire plus lorsque le RSI est en dessous du bas fixé (défaut 20) et faire moins lorsque le RSI est au-dessus du haut fixé (défaut 80).

La logique centrale de la stratégie est la suivante:

  1. L’indicateur RSI est utilisé pour juger de l’excédent d’achat et de la survente
  2. RSI, 20 heures de plus
  3. Le RSI est à 80 et vide.
  4. 100 dollars pour chaque mise.
  5. Plafonnement après arrêt ou arrêt de perte
  6. Si la perte est sur la ligne K suivante, la suspension de 24 lignes K ne se négocie pas

On peut voir que la stratégie est très simple, mécanique, et qu’il n’y a pratiquement pas de place pour l’optimisation des paramètres. Elle utilise purement les caractéristiques mathématiques de l’indicateur RSI pour obtenir des bénéfices inverses en construisant des positions inverses dans les zones de survente et de survente.

Analyse des avantages

Le plus grand avantage de cette stratégie est sa simplicité et son efficacité.

  1. L’utilisation d’un seul indicateur RSI ne nécessite pas une analyse technique complexe.
  2. Le système de négociation est entièrement automatisé, il n’est pas influencé par les émotions.
  3. Il n’est pas nécessaire de prédire le mouvement du marché pour tirer profit des caractéristiques mathématiques de la déviation à court terme du marché.
  4. Les normes de gestion des fonds et le contrôle des risques du mécanisme de stop-loss.

En outre, la stratégie a un ratio de stop-loss pour bloquer les bénéfices et contrôler les risques, ainsi qu’un mécanisme de suspension des transactions pour réduire la fréquence des transactions. Cela permet à la stratégie d’obtenir des bénéfices stables avec un risque minimal.

Analyse des risques

Les principaux risques liés à cette stratégie sont:

  1. Il est impossible de tirer profit d’une tendance. Lorsque la tendance est très forte, le RSI peut être surchargé ou survendu pendant une longue période, avec peu de chances de revenir en arrière, et la stratégie sera difficile à tirer profit.

  2. Un arrêt de perte trop élevé peut entraîner une expansion des pertes. Actuellement, le stop loss est de 3%, mais il peut être nécessaire de l’ajuster à 1 à 2%.

  3. La fréquence des transactions est trop élevée pour continuer à créer des positions après avoir obtenu des bénéfices. La fréquence d’ouverture des positions doit être contrôlée de manière appropriée.

  4. La fixation d’un capital fixe de 100 dollars pour chaque dépôt peut être un risque de concentration excessive qui doit être optimisé en pourcentage de capital.

Direction d’optimisation

Selon l’analyse ci-dessus, la stratégie peut être optimisée dans les domaines suivants:

  1. Augmenter les indicateurs de jugement de tendance, tels que la MA, et suspendre la négociation lorsque la tendance est incertaine.

  2. Optimiser le ratio de stop-loss, ce qui rend l’ajustement de stop-loss plus raisonnable à 1 à 2%, et le stop-loss peut être configuré comme un stop-loss flottant.

  3. Augmentation de la limite de fréquence d’ouverture des positions, par exemple, une ou deux ouvertures d’une position sont autorisées dans un certain temps.

  4. Modifiez 100 $ de fonds fixes en pourcentage de fonds, par exemple 1%.

  5. Optimisation de la combinaison de paramètres tels que le cycle RSI, les zones de survente et de survente.

  6. Augmentation du contrôle des positions, sans augmentation de capital de transaction lors de l’augmentation du capital initial.

L’optimisation des points ci-dessus peut réduire efficacement les risques de transaction et améliorer la stabilité et la fiabilité de la stratégie.

Résumer

Cette stratégie est généralement très simple et directe, grâce à l’indicateur RSI pour juger les sur-achats et les sur-vente pour obtenir des bénéfices à court terme. L’avantage est simple et efficace, sans prévision, la logique de négociation est claire, facile à repérer et à vérifier.

Code source de la stratégie
/*backtest
start: 2023-11-02 00:00:00
end: 2023-11-09 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash)
open_pos = input.int(50000, title = "每次开单资金(usdt)")
rsi_period = input.int(14, title = "rsi周期")
rsi_line      = input.float(20.0,      title='RSI触发线',      step=0.05)
stop_rsi_top_line = input.float(70, title = "顶部rsi止损线")
stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线")
stop_loss_perc = input.float(0.03, title = "止损线")
stop_profit = input.float(0.01, title = "止盈")
loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易")


rsiParam = ta.rsi(close, rsi_period)

var int failedTimes = 0
var bool stopTrade = false

// plot(rsiParam)

if stopTrade
    failedTimes += 1
    if failedTimes == loss_stop_trade_k
        failedTimes := 0
        stopTrade := false



// 获取当前持仓方向
checkCurrentPosition() =>
    strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0

curPosition = checkCurrentPosition()

// 当前持仓成本价
position_avg_price = strategy.position_avg_price


// 当前持单, 触达反向的rsi线,清仓
if curPosition > 0 and rsiParam >= stop_rsi_top_line
    strategy.close_all(comment = "closebuy")

if curPosition < 0 and rsiParam <= stop_rsi_bottom_line
    strategy.close_all(comment = "closesell")


// 止盈止损清仓
if curPosition > 0
    // if (position_avg_price - close) / close >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closebuy")
    //     stopTrade := true
    if (close - position_avg_price) / position_avg_price >= stop_profit
        // 止盈
        strategy.close_all(comment = "closebuy")



if curPosition < 0
    // if (close - position_avg_price) / position_avg_price >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closesell")
    //     stopTrade := true

    if (position_avg_price - close) / close >= stop_profit
        // 止盈
        strategy.close_all(comment = "closesell")


a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0
    stopTrade := true

var float openPrice = 0.0



if rsiParam <= rsi_line and stopTrade == false
	strategy.entry("long", strategy.long, open_pos / close, comment = "long")
    if curPosition == 0
        openPrice := close
    strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy")

if rsiParam >= 100 - rsi_line and stopTrade == false
    strategy.entry("short", strategy.short, open_pos / close, comment = "short")
    if curPosition == 0
        openPrice := close
    strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell")




plot(failedTimes)