Une tendance intraday suivant une stratégie quantitative basée sur le filtrage des conditions multi-indicateurs

Auteur:ChaoZhang est là., Date: 15 décembre 2023
Les étiquettes:

img

Résumé

Cette stratégie combine le PSAR pour juger des tendances des prix, l'ADX pour juger de la force de la tendance, le RSI pour localiser les zones de surachat et de survente et le CMF pour juger des flux de fonds pour construire une stratégie de négociation quantitative suivant la tendance intradienne à travers les cycles. Il peut rapidement localiser de nouvelles directions de tendance lorsque les prix sortent de la consolidation et forment de nouvelles tendances, et continue à suivre les tendances par la suite. Tout en s'assurant que les principaux gains de tendance sont capturés, des conditions de filtrage sont également définies pendant le processus pour réduire les risques de détention.

Principaux

Les principales règles d'évaluation de cette stratégie sont les suivantes:

  1. Utilisez l'indicateur PSAR pour juger si les prix sont en tendance haussière.

  2. Exiger que le RSI soit supérieur au point médian de 50 pour filtrer les fausses ruptures survenant dans les zones de survente.

  3. Exiger que l'ADX soit au-dessus de sa ligne EMA, ce qui indique un signal durable dans l'analyse des tendances.

  4. Exiger que la CMF soit supérieure à 0, en jugeant de l'augmentation des fonds entrant.

Les signaux d'achat sont générés lorsque les quatre conditions ci-dessus sont remplies. Les conditions de vente se produisent lorsque le PSAR dépasse les prix, que le RSI tombe en dessous de 50, que l'ADX tombe en dessous de son EMA et que le CMF devient inférieur à 0.

Cette stratégie prend en considération la direction de la tendance des prix, la force de la tendance, l'état de surachat/survente et les flux de fonds lors de l'établissement des règles de négociation.

Les avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. La combinaison de plusieurs indicateurs dans l'établissement de règles de négociation peut prévenir efficacement les fausses ruptures et assurer la qualité du signal.

  2. La localisation et le suivi rapides des tendances émergentes permettent d'obtenir la plupart des profits de la tendance.

  3. La mise en place de conditions de filtrage des procédés permet de contrôler efficacement les risques et d'assurer l'efficacité du suivi.

  4. En tenant compte de la force de la tendance, il est possible d'éviter les embouteillages de la fourchette de négociation.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. L'accumulation d'une seule stratégie comporte des risques de portefeuille, ce qui nécessite une dimensionnement appropriée des positions.

  2. Surveillez attentivement les changements d'état de filtrage pendant le suivi afin d'éviter les pertes lors de l'annulation.

  3. Cette stratégie à moyen et à long terme peut être perturbée à court terme par des fluctuations et comporte des risques de stop loss.

Les mesures de gestion des risques correspondantes comprennent: l'optimisation des règles de dimensionnement des positions, la définition de lignes d'alerte au risque et l'élargissement des distances d'arrêt, etc.

Directions d'optimisation

Les espaces d'optimisation comprennent:

  1. Optimisation des paramètres par apprentissage automatique en fonction des paramètres subjectifs actuels.

  2. Ajouter un module de dimensionnement des positions qui dimensionne dynamiquement en fonction des risques.

  3. Améliorer les mécanismes d'arrêt, par exemple les arrêts de retard, les arrêts de temps ou les arrêts de rupture.

Conclusion

Cette stratégie combinant des indicateurs s'est avérée efficace pour localiser et suivre rapidement les tendances naissantes, en validant le trading quantitatif basé sur de multiples dimensions comme les tendances et les fonds.


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

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)

Plus de