Stratégie de rupture cumulée de l'indice de résistance

Auteur:ChaoZhang est là., Date: 2023-10-27 à 11h20h50
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur RSI cumulatif pour identifier les tendances et prendre des décisions d'achat et de vente lorsque la valeur cumulée du RSI dépasse les seuils clés.

La logique de la stratégie

L'indicateur RSI cumulatif est l'accumulation des valeurs du RSI. En définissant le paramètre cumulé, les valeurs du RSI au cours des derniers jours cumulés sont additionnées pour dériver l'indicateur RSI cumulatif.

Lorsque l'indicateur RSI cumulatif franchit le niveau supérieur de la bande de Bollinger, une position longue est ouverte. Lorsque l'indicateur RSI cumulatif franchit le niveau inférieur de la bande de Bollinger, la position ouverte est fermée.

En outre, une option de filtre de tendance est ajoutée. Les transactions longues ne seront ouvertes que lorsque le prix est supérieur à la moyenne mobile de 100 jours, ce qui signifie qu'il est dans un canal de tendance haussière. Ce filtre évite les transactions erronées pendant les fluctuations du marché.

Les avantages

  • Filtrer efficacement le bruit et capturer les tendances à moyen et à long terme à l'aide de l'indice RSI cumulé
  • Évitez les transactions déraisonnables avec le filtre de tendance
  • Utiliser des niveaux de référence dynamiques au lieu de valeurs fixes pour la prise de décision
  • Paramètres hautement configurables pour les ajustements basés sur différents marchés
  • Résultats exceptionnels des tests antérieurs sur 10 ans, nettement supérieurs à ceux des achats et des détentions

Risques et améliorations

  • Les décisions basées uniquement sur un indicateur peuvent ajouter d'autres indicateurs ou filtres
  • Ratio de levier élevé fixe, pouvant être ajusté en fonction des recours
  • Seules les positions longues, peuvent regarder dans les opportunités de raccourcissement
  • Optimiser les combinaisons de paramètres qui varient considérablement selon les marchés
  • Enrichir les conditions de sortie avec stop loss, stop loss en mouvement, etc.
  • Considérez la combinaison avec d'autres stratégies pour des effets synergiques

Résumé

La stratégie de rupture du RSI cumulatif a un flux logique lisse et identifie avec précision les tendances à moyen et long terme en filtrant avec le RSI cumulatif et en ajoutant le jugement de tendance. Les résultats des tests de retour sont exceptionnels au cours de la dernière décennie. Il y a encore place à des améliorations dans des domaines tels que l'ajustement des paramètres, l'ajout d'indicateurs, l'enrichissement des conditions de sortie pour rendre la stratégie plus robuste.


/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 00:00:00
period: 1h
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/
// @version=5
// Author = TradeAutomation


strategy(title="Cumulative RSI Strategy", shorttitle="CRSI Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_contract, commission_value=.0035, slippage = 1, margin_long = 75, initial_capital = 25000, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Cumulative RSI Indicator Calculations //
rlen  = input.int(title="RSI Length", defval=3, minval=1)
cumlen = input(3, "RSI Cumulation Length")
rsi = ta.rsi(close, rlen)
cumRSI = math.sum(rsi, cumlen)
ob = (100*cumlen*input(94, "Oversold Level")*.01)
os = (100*cumlen*input(20, "Overbought Level")*.01)


// Operational Function //
TrendFilterInput = input(false, "Only Trade When Price is Above EMA?")
ema = ta.ema(close, input(100, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)


// Backtest Timeframe Inputs // 
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12)
startYear = input.int(title="Start Year", defval=2010, minval=1950, maxval=2100)
endDate = input.int(title="End Date", defval=1, minval=1, maxval=31)
endMonth = input.int(title="End Month", defval=1, minval=1, maxval=12)
endYear = input.int(title="End Year", defval=2099, minval=1950, maxval=2100)
InDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))


// Buy and Sell Functions //
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os) and TrendisLong, comment="Buy", alert_message="buy")
    strategy.close("Long", when = ta.crossover(cumRSI, ob) , comment="Sell", alert_message="Sell")
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os), comment="Buy", alert_message="buy")
    strategy.close("Long", when = ta.crossover(cumRSI, ob), comment="Sell", alert_message="sell")
if (not InDateRange)
    strategy.close_all()

Plus de