Cette stratégie est basée sur l'indicateur RSI (Relative Strength Index) pour déterminer les conditions de surachat et de survente. Elle prend des positions contre tendance lorsque le RSI atteint des niveaux de surachat ou de survente pour acheter bas et vendre haut.
La stratégie utilise l'indicateur RSI uniquement comme signal d'entrée. Elle est longue lorsque le RSI dépasse le point bas (défaut 20), et court lorsque le RSI dépasse le point élevé (défaut 80). Elle négocie un montant fixe à chaque fois (défaut 100) et vise un profit de 1% indépendamment des conditions du marché. Si la perte atteint 3%, elle s'arrête.
La logique de base est la suivante:
Comme nous pouvons le voir, la stratégie est très simple et mécanique. Il n'y a pratiquement pas d'espace pour l'optimisation des paramètres. Elle exploite purement les propriétés mathématiques du RSI pour prendre des positions contre tendance autour des régions surachetées / survendues.
Le plus grand avantage de cette stratégie est la simplicité et l'efficacité.
Il implémente également des ratios stop loss/take profit pour verrouiller les profits et contrôler les risques, ainsi que la suspension des transactions pour réduire la fréquence.
Les principaux risques de cette stratégie proviennent de:
Incapacité à tirer profit d'une forte tendance du marché. L'indice RSI peut rester dans la zone de surachat/survente pendant une longue période lorsque la tendance persiste.
Le taux de stop loss actuel de 3% peut devoir être réduit à 1-2%.
Une fréquence de trading élevée peut entraîner une sur-trading après des gains.
La concentration des risques à 100 $ devrait être optimisée en pourcentage du capital.
Sur la base de l'analyse, la stratégie peut être améliorée de la manière suivante:
Ajoutez un filtre de tendance comme MA pour mettre en pause les transactions lorsque la tendance est incertaine.
Optimiser les ratios stop loss/take profit, réduire le stop loss à 1 à 2% et utiliser le take profit dynamique.
Limiter la fréquence des transactions, par exemple au maximum 2 transactions par période.
Taille des transactions basée sur le pourcentage du capital au lieu de 100 $ fixes.
Optimiser les paramètres de l'indice de résistance comme la période, les niveaux de surachat/vente.
Ajouter le dimensionnement des positions pour ne pas augmenter la taille lorsque le capital augmente.
Ces optimisations permettent de réduire les risques et d'améliorer considérablement la stabilité.
En résumé, il s'agit d'une stratégie simple et directe utilisant le RSI pour négocier des conditions de surachat / survente pour une réversion moyenne à court terme. Les avantages sont la simplicité, l'efficacité, aucune prédiction nécessaire, une logique claire, facile à tester. Les inconvénients sont l'incapacité de tirer profit de tendances fortes et de pertes potentielles.
/*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)