Les ressources ont été chargées... Je charge...

Stratégie de négociation quantitative basée sur le franchissement de la moyenne du RSI

Auteur:ChaoZhang est là., Date: 2023-12-01 16h59: 26
Les étiquettes:

img

Résumé

Cette stratégie détermine les signaux d'achat et de vente basés sur le croisement entre l'indicateur RSI et sa moyenne mobile, appartenant à des stratégies de trading à court terme.

Principe de stratégie

  1. Calcul de l'indicateur RSI à 40 bar
  2. Calculer l'AM de l'indicateur RSI, avec une période de 10 barres
  3. Générer un signal d'achat lorsque le RSI est inférieur à son MA multiplié par un coefficient (intervalle de négociation en %)
  4. Générer un signal de vente lorsque le RSI est supérieur à son MA multiplié par un coefficient (1+plage de négociation%)
  5. La distance par défaut de l'intervalle de négociation est de 5, ce qui signifie 5% au-dessus ou au-dessous de MA pour déclencher les signaux
  6. Déterminer la sortie lorsque le RSI est supérieur à son MA et au niveau supérieur à 50

Analyse des avantages

Il s'agit d'une stratégie de réversion moyenne typique, utilisant les propriétés de surachat / survente de l'indicateur RSI pour déterminer les signaux de trading.

  1. Adoption de l'indicateur RSI pour juger de la structure du marché, qui est assez fiable
  2. Le filtre MA évite les transactions inutiles et améliore la stabilité
  3. Fréquence réglable des contrôles de plage de négociation
  4. Une logique simple et facile à comprendre

En résumé, il s'agit d'une stratégie de négociation à court terme simple et pratique.

Analyse des risques

Il y a quelques risques à noter:

  1. Possibilité de RSI donnant de faux signaux, besoin de regarder le modèle
  2. Une mauvaise définition de la fourchette de négociation peut entraîner un suréchange ou des opportunités manquées
  3. Fréquence de négociation élevée, nécessité de prendre en compte les coûts de transaction
  4. Se fondant uniquement sur un seul indicateur, sujette à des anomalies du marché

Ces risques peuvent être atténués en ajustant les paramètres, en ajoutant des filtres, etc.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Ajouter plus de filtres comme le volume pour assurer des signaux uniquement aux points de virage
  2. Ajouter un stop loss pour contrôler les pertes de transaction unique
  3. Optimiser la plage de négociation pour équilibrer la fréquence et le taux de profit
  4. Utiliser l'apprentissage automatique pour trouver des ensembles de paramètres optimaux
  5. Ajouter des modèles d'ensemble pour intégrer les résultats des sous-stratégies

Une augmentation significative des performances peut être obtenue par des combinaisons multi-indicateurs, une gestion des pertes d'arrêt, une optimisation des paramètres, etc.

Résumé

En résumé, il s'agit d'une stratégie de trading à court terme très typique et pratique. Elle capitalise sur les niveaux de surachat / survente du RSI pour déterminer les entrées et les sorties, avec un filtre MA supplémentaire. La logique est simple et claire, les paramètres flexibles, facile à mettre en œuvre.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)





Plus de