Stratégie quantitative à double indicateur

Auteur:ChaoZhang est là., Date: 21-12-2023 à 10h59
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux de trading en combinant l'indicateur 123 Reversal et l'indicateur RAVI. L'indicateur 123 Reversal appartient à la stratégie de type inversion, utilisant le mouvement des prix au cours des deux derniers jours pour déterminer les tendances futures des prix. L'indicateur RAVI détermine si le prix est entré dans la zone de surachat ou de survente.

La logique de la stratégie

123 Retour en arrière

Cet indicateur est basé sur la valeur K de l'indicateur stochastique. Plus précisément, il va long lorsque le prix de clôture aujourd'hui est inférieur aux deux jours précédents et que la ligne stochastique lente de 9 jours est inférieure à 50. Il va court lorsque le prix de clôture aujourd'hui est supérieur aux deux jours précédents et que la ligne stochastique rapide de 9 jours est supérieure à 50. Il entre donc sur la base de la confirmation des points de renversement.

Indicateur RAVI

Cet indicateur génère des signaux en calculant la différence entre les moyennes mobiles rapides et lentes. Plus précisément, la différence entre les moyennes mobiles de 7 jours et les moyennes mobiles de 65 jours.

Signaux stratégiques

Un signal est généré lorsque 123 Reversal et RAVI sont d'accord sur la direction. Le signal long est déclenché lorsque les deux indicateurs montrent 1 et le signal court est déclenché lorsque les deux montrent -1. Cette double confirmation évite les signaux erronés d'un seul indicateur.

Analyse des avantages

  • La combinaison de deux indicateurs améliore la précision du signal et évite les faux signaux
  • 123 Reversal utilise des données sur les prix et RAVI utilise des données sur les moyennes mobiles pour déterminer les tendances à partir de multiples perspectives
  • Les paramètres du RAVI sont réglables et peuvent être optimisés pour différents produits et environnements de marché
  • La combinaison d'inversion et de tendance permet de détecter à la fois les inversions et les tendances

Risques et optimisation

  • Une combinaison de deux indicateurs peut parfois conduire à des signaux contradictoires. Un paramètre d'écart de prix peut être introduit pour déclencher des signaux lorsque l'écart de prix entre les deux indicateurs est dans un seuil
  • 123 L'inversion est une stratégie à haute fréquence. Elle doit être combinée avec d'autres stratégies à basse fréquence pour réduire la fréquence des transactions.
  • L'indicateur RAVI est bon pour détecter les tendances à moyen et long terme.

Conclusion

La stratégie prend en compte à la fois les facteurs d'inversion et de tendance. La double confirmation aide à éviter les faux signaux. Les prochaines étapes pourraient être l'introduction d'algorithmes d'apprentissage automatique pour l'optimisation des paramètres adaptatifs. Ou combiner cette stratégie avec d'autres types de stratégie pour atteindre la diversification du portefeuille tout en maintenant les bénéfices et en réduisant les retraits maximaux.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 31/05/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The indicator represents the relative convergence/divergence of the moving 
// averages of the financial asset, increased a hundred times. It is based on 
// a different principle than the ADX. Chande suggests a 13-week SMA as the 
// basis for the indicator. It represents the quarterly (3 months = 65 working days) 
// sentiments of the market participants concerning prices. The short moving average 
// comprises 10% of the one and is rounded to seven.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


RAVI(LengthMAFast, LengthMASlow, TradeLine) =>
    pos = 0.0
    xMAF = sma(close, LengthMAFast)
    xMAS = sma(close, LengthMASlow)
    xRAVI = ((xMAF - xMAS) / xMAS) * 100
    pos:= iff(xRAVI > TradeLine, 1,
    	   iff(xRAVI < TradeLine, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Range Action Verification Index (RAVI)", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Range Action Verification Index (RAVI) ----")
LengthMAFast = input(title="Length MA Fast", defval=7)
LengthMASlow = input(title="Length MA Slow", defval=65)
TradeLine = input(0.14, step=0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posRAVI = RAVI(LengthMAFast, LengthMASlow, TradeLine)
pos = iff(posReversal123 == 1 and posRAVI == 1 , 1,
	   iff(posReversal123 == -1 and posRAVI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Plus de