La stratégie de suivi de tendance à deux lignes est une stratégie qui utilise une combinaison de moyennes mobiles rapides et moyennes mobiles lentes pour juger de la tendance du marché et émettre un signal de transaction lors d’un revirement de direction. La stratégie combine à la fois l’indicateur de la ligne de parité et l’indicateur de la chaîne de prix pour identifier la tendance, ce qui permet de filtrer efficacement le bruit du marché et de juger de la direction de la tendance.
La stratégie de suivi de tendance à double équilibre utilise deux indicateurs de moyenne mobile: la moyenne mobile rapide (en 5 cycles) et la moyenne mobile lente (en 21 cycles). La moyenne rapide est utilisée pour générer un signal de transaction et la moyenne lente est utilisée pour déterminer la direction de la tendance du marché.
La stratégie utilise également deux canaux de prix, le premier avec un cycle de 21 canaux de prix et le second avec un cycle de 5 canaux de prix, correspondant au cycle de la moyenne.
Lors du jugement des signaux d’achat et de vente, la stratégie exige l’apparition de colonnes rouges successives (le nombre de colonnes que l’utilisateur peut régler) comme condition de filtrage supplémentaire. Cela évite l’émission de signaux erronés dans la zone de comptage.
Dans l’ensemble, la logique d’une stratégie de suivi de tendance en ligne à deux vitesses est la suivante:
Il permet de filtrer efficacement le bruit et de déterminer la direction des tendances à travers plusieurs niveaux de jugement de tendances.
Les avantages de la stratégie de suivi de tendance à deux lignes sont:
Dans l’ensemble, la stratégie a une bonne stabilité globale et un excellent rendement dans les marchés à forte tendance.
Les stratégies de suivi de tendance bi-linéaire présentent également des risques, principalement:
En conséquence, les risques stratégiques peuvent être atténués par:
Il y a encore de la place pour optimiser la stratégie de suivi de tendance en ligne à double équilibre, principalement dans les domaines suivants:
Ces orientations d’optimisation peuvent améliorer encore la stabilité, l’adaptabilité et l’intelligence des stratégies.
La stratégie de suivi de tendance à double équilibre est une stratégie de suivi de tendance plus robuste dans l’ensemble. Elle combine l’indicateur d’équilibre et le canal de prix pour déterminer la direction et l’intensité de la tendance et envoyer un signal de transaction à la même vitesse. Les conditions supplémentaires de filtrage de la colonne permettent également d’éviter davantage de signaux erronés.
/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", 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, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, 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?")
src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)
//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 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]
trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -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
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0
//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")
//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)