Cette stratégie utilise une combinaison de moyenne rapide et moyenne lente pour déterminer la direction de la tendance et pour effectuer des transactions de tendance afin de capturer les tendances de la moyenne et de la longue ligne. Faire plus lorsque la moyenne rapide traverse la moyenne lente sur la moyenne rapide et faire moins lorsque la moyenne rapide traverse la moyenne lente en dessous de la moyenne rapide est une stratégie de suivi de tendance typique.
La stratégie repose principalement sur la courbe de la courbe de la courbe de la courbe de la courbe. Plus précisément, la stratégie utilise une courbe rapide de 5 cycles et une courbe lente de 21 cycles.
Lorsque la courbe rapide traverse la courbe lente sur la ligne moyenne rapide, la stratégie est plus active lors de l’ouverture de la ligne K suivante. Lorsque la courbe rapide traverse la courbe moyenne lente en dessous de la courbe moyenne rapide, la stratégie est plus active lors de l’ouverture de la ligne K suivante.
En outre, la stratégie a également défini le paramètre de filtrage des fausses brèches par le paramètre de filtrage des fausses brèches par le paramètre par défaut de 2, c’est-à-dire que la ligne moyenne rapide nécessite 2 lignes K consécutives au-dessus de la ligne moyenne lente pour émettre des signaux multiples et pouvoir filtrer efficacement les fausses brèches.
Pour les crypto-monnaies, la stratégie a également ajouté une logique de jugement des extrêmes. Un signal de transaction n’est émis que lorsque la moyenne rapide et la moyenne lente sont simultanément dans la zone extrême.
La règle de sortie de stratégie est simple et directe: lorsque le prix atteint son point de rupture, la position est abandonnée.
Le risque peut être réduit par les moyens suivants:
Cette stratégie peut être optimisée dans les domaines suivants:
Il est possible de tester plus de combinaisons pour trouver des paramètres de ligne moyenne plus adaptés au marché actuel. Par exemple, ajuster la ligne rapide à 10 cycles et la ligne lente à 50 cycles.
Il est possible de tester d’autres indicateurs tels que MACD, KDJ, etc. et de définir des conditions plus strictes pour éviter les fausses percées.
Les entrées actuelles sont trop simples et dépendent de la moyenne, et peuvent être optimisées comme suit:
Il est possible de tester d’autres méthodes de stop-loss, par exemple en suivant le stop-loss du prix et en évitant que le stop-loss ne soit déclenché trop tôt.
Il est possible de réintégrer une position après qu’elle ait été perdue, ce qui réduit le risque de manquer une tendance en étant en dehors de la zone de négociation.
Cette stratégie est une stratégie de suivi de la tendance de base, l’idée centrale est simple et directe, elle utilise une direction de jugement de tendance à double équilibre et un arrêt mobile pour contrôler les risques. L’avantage est qu’elle est facile à comprendre et à mettre en œuvre, il est possible de suivre la tendance et de profiter, le risque peut également être contrôlé.
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", 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, %")
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?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close
//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
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[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
//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0
//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
if up1 or up2 or up3
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Long", "Long", stop = stoplong)
if dn1
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Short", "Short", stop = stopshort)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()