Stratégie de négociation combinée multi-indicateurs

Auteur:ChaoZhang est là., Date: 2023-10-26 15h22 et 28h
Les étiquettes:

img

Résumé

Cette stratégie combine les indicateurs CCI, ADX et AO pour générer des signaux de trading pour les positions longues et courtes.

La logique de la stratégie

  1. L'indice CCI indique un surachat supérieur à 100 et un survente inférieure à -100.

  2. ADX mesure la force de la tendance. DI+ montre la force de la tendance haussière, DI- montre la force de la tendance baissière. ADX est la force moyenne de la tendance. Cette stratégie est longue lorsque DI+ est inférieure à 25.

  3. L'AO est la SMA rapide moins la SMA lente. Une augmentation de l'AO représente un renforcement de l'élan haussier et une baisse de l'AO représente un renforcement de l'élan baissier. Cette stratégie est longue lorsque l'AO est inférieure à 0.

  4. Les règles de négociation sont les suivantes: passer à long lorsque le CCI est < 0 et le DI+ < 25 et l'AO < 0; fermer à long lorsque le DI+ est > 25.

  5. Calculer dynamiquement la taille des ordres sous forme de fonds propres divisés par le prix de clôture et arrondis à la baisse, afin d'ajuster les ordres au fur et à mesure que les fonds propres du compte évoluent.

  6. Utilisez strategy.entry pour les signaux longs et strategy.close pour les signaux de sortie.

Les avantages

  1. La CCI filtre le bruit provenant de différents marchés, réduisant ainsi les faux signaux.

  2. L'ADX détecte les tendances les plus fortes tôt.

  3. AO évite de négocier sur des marchés instables.

  4. Plusieurs indicateurs vérifient les signaux, augmentant la fiabilité.

  5. Le dimensionnement dynamique des positions gère efficacement les risques.

  6. Une logique simple et claire, facile à suivre.

Les risques

  1. CCI a du mal à identifier les plages vkosd.

  2. ADX a un retard dans la capture des virages de tendance.

  3. AO est aux prises avec une consolidation agitée.

  4. Un mauvais réglage des indicateurs conduit à un filtrage excessif et à des transactions manquées.

  5. Taille dynamique dépendante de la volatilité et des marchés.

  6. Le potentiel de grands prélèvements, nécessitant une gestion stricte des risques.

Améliorations

  1. Optimiser les paramètres de l'ICC pour les différents marchés.

  2. Optimiser les paramètres ADX pour détecter les changements de tendance.

  3. Ajuster les paramètres de l'AO pour les environnements de volatilité.

  4. Combinaisons d'essais pour trouver la pondération optimale des indicateurs.

  5. Ajoutez le stop loss pour le contrôle du retrait.

  6. Incorporer le volume pour éviter une fausse fuite.

  7. Personnaliser le dimensionnement de la position fixe par instrument.

Conclusion

Cette stratégie combine CCI, ADX et AO pour générer des signaux longs assez fiables. dimensionnement dynamique et gestion de la position de contrôle du risque. La logique est simple et claire pour les débutants à suivre. Mais il lutte dans les marchés variés, avec un potentiel d'optimisation significatif requis pour différents marchés. Des tests et des ajustements supplémentaires sont nécessaires pour la robustesse à travers les instruments et les environnements.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Strategy Niel", shorttitle="Strategy Niel", max_bars_back=2000, initial_capital=1000)

//Input variables
buywhenadxabove = input(25)
buywhendiplusbelow = input(10)
buywhenccibelow = input(0)
buywhenawesomeoscillatorbelow = input(0)
sellwhendiplusabove = input(25)

//CCI script
numberofbarsforcci = input(20)
CCI = cci(close,numberofbarsforcci)

//+DI and ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, 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)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

//plot(sig, color=red, title="ADX")
//plot(up, color=blue, title="+DI")
//plot(down, color=orange, title="-DI")


//Awesome Oscillator
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
xSMA1_hl2 = sma(hl2, nLengthFast)
xSMA2_hl2 = sma(hl2, nLengthSlow)
xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
cClr = xSMA1_SMA2 > xSMA1_SMA2[1] ? blue : red
//plot(xSMA1_SMA2, style=histogram, linewidth=1, color=cClr)

buy = sig > buywhenadxabove and up < buywhendiplusbelow  and CCI < buywhenccibelow and xSMA1_SMA2 < buywhenawesomeoscillatorbelow 

ordersize=floor(strategy.equity/close) // Floor returns largest integer, strategy.equity gives total equity remaining - allows to dynamically calculate the order size as the account equity increases or decreases.
strategy.entry("long",strategy.long,ordersize,when= buy) //strategy.entry let's you enter the market variables id ("long"), strategy.long (long position entry), size of the order and when the order should happen
bought = strategy.position_size[0] > strategy.position_size[1]
entry_price = valuewhen(bought, open, 0)
sell = up > sellwhendiplusabove 
strategy.close("long", when=sell ) //strategy.close let's you close your position with variables id ('long') and when this should happen




Plus de