Stratégie de suivi de tendance des moyennes mobiles dynamiques

Auteur:ChaoZhang est là., Date: le 22 février 2024
Les étiquettes:

img

Résumé

Cette stratégie est conçue sur la base du principe du suivi des tendances des canaux dynamiques et des moyennes mobiles. Elle calcule le canal de prix dynamique, juge la direction de la tendance à travers les rails supérieurs et inférieurs du canal et génère des signaux de trading en combinant la moyenne mobile pour filtrer la volatilité des prix.

Principe

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

  1. Calculer le canal de prix dynamique. La ligne médiane du canal est calculée à partir du prix le plus élevé et du prix le plus bas. Le rail supérieur est la ligne moyenne + la volatilité des prix MA, et le rail inférieur est la ligne moyenne - la volatilité des prix MA.

  2. Lorsque le prix franchit le niveau supérieur, il est défini comme haussier.

  3. Filtrez le bruit. Utilisez la volatilité des prix MA d'une certaine période pour filtrer le bruit des fluctuations aléatoires des prix.

  4. Générer des signaux commerciaux. Lors de la hausse, un signal d'achat est généré lorsque le prix de clôture est inférieur au prix d'ouverture dans cette période. Lors de la baisse, un signal de vente est généré lorsque le prix de clôture est supérieur au prix d'ouverture.

Les avantages

Les avantages de cette stratégie sont les suivants:

  1. Le canal dynamique peut capturer la tendance des prix en temps réel.
  2. Le filtre MA peut réduire les faux signaux.
  3. La combinaison de la direction de la tendance et de la direction de l'entité de la ligne K pour générer des signaux de négociation évite d'être piégé.

Les risques

Les risques de cette stratégie sont les suivants:

  1. Une mauvaise sélection de Param peut entraîner un surajustement.
  2. Il est facile de générer de mauvais signaux lors d'une volatilité latérale.
  3. Il ne peut pas prédire des fluctuations extrêmes des prix.

Les solutions:

  1. Une sélection et des tests stricts.
  2. Ajoutez des conditions de filtrage pour identifier les côtés.
  3. Mettre en place un stop-loss/profit pour contrôler les risques.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Stabilité à l'essai des différents paramètres périodiques.
  2. Ajouter des indicateurs de VOLUME ou de volatilité pour juger de la dynamique.
  3. Combinez les bandes, les canaux, etc. pour déterminer l'entrée et la sortie.

Résumé

Cette stratégie intègre les idées de jugement dynamique des tendances des canaux et des MA, et fonctionne bien pour capturer les tendances à moyen et court terme.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.0", shorttitle = "NoroBands str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Color")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//up =  and trend == 1 ? 1 : 0
//dn =  and trend == -1 ? 1 : 0 

up = close < hd and trend == 1 and (close < open or color == false) ? 1 : 0
dn = close > ld and trend == -1 and (close > open or color == false) ? 1 : 0 

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Plus de