Stratégie quantitative de la triade inverse

Auteur:ChaoZhang est là., Date: 2023-12-01 14:14:46 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie quantitative de la triade inverse combine la stratégie de renversement 123 et l'oscillateur d'accélérateur pour juger des renversements de tendance et générer des signaux de trading plus précis.

La logique de la stratégie

Cette stratégie se compose de deux codes logiques indépendants.

La première partie est la stratégie de renversement 123. Son principe pour juger les signaux de renversement est le suivant: un signal d'achat est généré lorsque le prix de clôture est inférieur à la clôture précédente pendant deux jours consécutifs et que la ligne K du STOCH de 9 jours est inférieure à la ligne D; un signal de vente est généré lorsque le prix de clôture est supérieur à la clôture précédente pendant deux jours consécutifs et que la ligne K du STOCH de 9 jours est supérieure à la ligne D.

La deuxième partie est l'indicateur d'oscillateur d'accélérateur. Cet indicateur reflète la vitesse de changement de l'oscillateur Awesome en calculant la différence entre l'oscillateur Awesome et sa moyenne mobile à 5 périodes, ce qui peut aider à identifier les points d'inversion de tendance plus tôt que l'oscillateur Awesome.

Enfin, cette stratégie combine les signaux des deux indicateurs: lorsque les signaux des deux indicateurs sont dans la même direction (les deux longs ou les deux courts), le signal de direction correspondant est produit; lorsque les signaux des deux indicateurs sont incohérents, un signal zéro est produit.

Analyse des avantages

Cette stratégie combine des jugements de double indicateur pour filtrer certains faux signaux, ce qui rend les signaux plus précis et fiables.

Analyse des risques

Le plus grand risque de cette stratégie est que le prix s'est déjà inversé de manière significative avant que les indicateurs ne génèrent des signaux, ce qui entraîne le manque du meilleur point d'entrée.

Pour faire face au risque de point d'entrée, plus d'indicateurs d'inversion peuvent être combinés pour assurer la fiabilité du signal; pour le problème d'optimisation des paramètres, un mécanisme d'ajustement dynamique peut être établi pour assurer la rationalité des paramètres.

Directions d'optimisation

Les aspects suivants de cette stratégie peuvent être optimisés:

  1. Ajouter des conditions de filtrage pour éviter de générer des signaux erronés pendant les stades de forte volatilité

  2. Combiner plus d'indicateurs de renversement pour former un mécanisme de validation multiple

  3. Mettre en place un mécanisme d'auto-adaptation des paramètres pour ajuster dynamiquement les paramètres des indicateurs

  4. Optimiser les stratégies de stop-loss pour contrôler le stop-loss unique

Conclusion

La stratégie quantitative de la triade inverse améliore la précision du signal grâce à la double vérification, ce qui est utile pour saisir les principaux points d'inversion du marché. Dans le même temps, l'attention doit également être accordée à la prévention des risques tels que le retard des indicateurs et l'échec des paramètres. Une vérification et une optimisation continues de la stratégie sont nécessaires pour l'adapter à l'environnement en constante évolution du marché.


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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 25/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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.
//
// Secon strategy
// The Accelerator Oscillator has been developed by Bill Williams 
// as the development of the Awesome Oscillator. It represents the 
// difference between the Awesome Oscillator and the 5-period moving 
// average, and as such it shows the speed of change of the Awesome 
// Oscillator, which can be useful to find trend reversals before the 
// Awesome Oscillator does.
//
// 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

AcceleratorOscillator(nLengthSlow, nLengthFast) =>
    xSMA1_hl2 = sma(hl2, nLengthFast)
    xSMA2_hl2 = sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    cClr = nRes > nRes[1] ? blue : red
    pos = 0.0
    pos := iff(nRes > 0, 1,
             iff(nRes < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Accelerator Oscillator (AC)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posAcceleratorOscillator = AcceleratorOscillator(nLengthSlow, nLengthFast)
pos = iff(posReversal123 == 1 and posAcceleratorOscillator == 1 , 1,
	   iff(posReversal123 == -1 and posAcceleratorOscillator == -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 ? red: possig == 1 ? green : blue ) 

Plus de