Stratégie de suivi de tendance à double moyenne mobile


Date de création: 2023-09-18 21:57:00 Dernière modification: 2023-09-18 21:57:00
Copier: 1 Nombre de clics: 418
1
Suivre
1214
Abonnés

Aperçu

La stratégie utilise une combinaison de moyennes mobiles rapides et moyennes mobiles lentes pour déterminer la direction de la tendance, et produit un signal de transaction lorsque la ligne rapide franchit la ligne lente, appartenant à un système de négociation à deux moyennes mobiles.

Le principe

La stratégie utilise des moyennes mobiles rapides de plus courte durée et des moyennes mobiles lentes de plus longue durée.

La MA lente est utilisée pour déterminer la direction de la tendance dominante. Lorsque le prix est au-dessus de la MA, il est jugé comme une tendance à la hausse; lorsque le prix est au-dessous de la MA, il est jugé comme une tendance à la baisse.

Dans une tendance à la hausse, si une MA rapide traverse une MA lente, cela génère un signal d’achat; dans une tendance à la baisse, si une MA rapide traverse une MA lente, cela génère un signal de vente.

Une fois le signal de transaction généré, il est possible de choisir de définir un stop loss pour continuer à suivre le stop loss.

Les avantages

  1. La combinaison de MA rapide et lente est efficace pour identifier les tendances.

  2. Les MA rapides peuvent générer des signaux de trading plus sensibles.

  3. Le MA est lent pour éliminer le bruit du marché et empêcher les faux-bénéfices.

  4. On peut choisir parmi plusieurs algorithmes MA, tels que EMA, DEMA, etc.

  5. Une stratégie de stop loss peut être activée pour suivre le stop loss.

Les risques et les solutions

  1. Il existe un problème de retard de MA, qui peut entraîner un retard de signal. Des paramètres plus sensibles peuvent être testés.

  2. Le point d’arrêt peut être trop proche et causer des dommages en cas de percée. Il faut laisser une marge de fluctuation appropriée.

  3. Il existe un risque de manipulation des prix sans tenir compte du volume de transactions.

  4. La probabilité d’un faux signal est basée uniquement sur l’indicateur. D’autres facteurs peuvent être ajoutés pour confirmer.

  5. Difficulté d’optimisation des paramètres. Vous pouvez utiliser l’optimisation progressive ou des algorithmes génétiques pour trouver les paramètres optimaux.

Optimiser les idées

  1. Tester différents paramètres de l’algorithme MA pour trouver le paramètre optimal.

  2. La recherche sur l’adaptation des moyennes mobiles pour améliorer la sensibilité

  3. Ajouter d’autres indicateurs ou facteurs pour optimiser le filtrage du signal.

  4. La mise en place d’un mécanisme d’arrêt dynamique des pertes rend la résilience des pertes plus flexible.

  5. Optimiser les stratégies de gestion de fonds, par exemple en ajustant les positions en fonction de la dynamique de l’ATR

Résumer

La stratégie utilise le double MA pour générer des signaux de transaction et peut être configurée pour limiter le risque de perte. Sa logique de négociation est simple et claire, mais il existe des problèmes tels que la difficulté de sélection des paramètres.

Code source de la stratégie
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.7", shorttitle = "Trend MAs str 1.7", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

fastsma = ema(src, fastlen)

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

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

//Trend
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
min = min(open, close)
max = max(open, close)
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

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

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

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

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