Stratégie de suivi du canal Momentum


Date de création: 2023-12-25 13:14:24 Dernière modification: 2023-12-25 13:14:24
Copier: 0 Nombre de clics: 729
1
Suivre
1621
Abonnés

Stratégie de suivi du canal Momentum

Aperçu

Cette stratégie est basée sur la dynamique des signaux de négociation de l’indicateur de la chaîne, qui génère des signaux d’achat et de vente en fonction de la montée et de la descente des prix de la chaîne de rupture. La stratégie ne fait que des transactions à plusieurs têtes, et si un signal de vente apparaît, la position est à plat à vide.

Principe de stratégie

Cette stratégie utilise les moyennes SMA et l’amplitude de fluctuation réelle de l’ATR pour construire un canal de dynamique. Les voies de dynamique supérieure et inférieure sont:

On a donc le facteur SMA + ATR. La piste inférieure = SMA - ATR * facteur

Un signal de vente est généré lorsque le prix est en hausse. Un signal de vente est généré lorsque le prix est en baisse.

Comme il n’y a que des lots, si un signal de vente apparaît, l’ordre d’ouverture précédent est annulé et la position est levée à l’état de position vide.

La logique de la stratégie est la suivante:

  1. Construction de canaux de mobilité avec SMA et ATR
  2. Lorsque le prix monte en flèche, définissez le prix d’ouverture et commandez plus
  3. Lorsque le prix est en baisse, les ordres supplémentaires précédents sont annulés et la position est libérée.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. La logique de la stratégie est simple, claire et facile à comprendre.
  2. L’indicateur du canal de la dynamique est intuitif et permet de juger avec précision les tendances du marché.
  3. Ne négociez qu’avec plusieurs opérateurs et évitez de suivre les risques de stop loss
  4. Conditions détaillées pour des entrées précises

Analyse des risques

Cette stratégie présente aussi des risques:

  1. Les marchés peuvent être en perte de vitesse en période de turbulences
  2. Il n’y a pas d’occasions d’utiliser des postes vacants.
  3. Il n’y a pas de mécanisme de sortie, il faut un point de sortie artificiel.

La réponse:

  1. Optimisation des paramètres de la voie pour réduire les signaux d’erreur
  2. Ajout d’un module de tête vide pour effectuer des transactions bidirectionnelles
  3. Ajout de mécanismes de sortie tels que l’arrêt mobile, le trailing stop

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Paramètres d’optimisation, d’ajustement du cycle du canal, de coefficient de fluctuation, etc.
  2. Ajout d’un module de tête vide pour générer des signaux de vente en fonction du prix
  3. Adhésion à un mécanisme d’arrêt des pertes, associé à un arrêt des pertes consécutives ATR
  4. Envisagez d’ajouter plus de conditions de filtrage pour éviter les faux signaux
  5. Tester l’efficacité de différents types de contrats

Résumer

Cette stratégie est basée sur des indicateurs de canaux dynamiques, capture les tendances du marché de manière simple et efficace. La logique de la stratégie est claire et compréhensible, génère des signaux de transaction par le biais d’une rupture de canal. Bien que le simple fait de faire plusieurs têtes et sans mécanisme de sortie soit insuffisant, il peut être amélioré par l’optimisation des paramètres, l’ajout d’un module de tête vide, l’ajout d’un stop-loss, etc.

Code source de la stratégie
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Keltner Channel Strategy", overlay=true)
source = close

useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

if (cancelBcond)
    strategy.cancel("KltChLE")

if (crossUpper)
    strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")

if (cancelScond)
    strategy.cancel("KltChSE")

if (crossLower)
    strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)