
La stratégie utilise deux indicateurs de la courbe moyenne pour identifier la direction de la tendance et les moments de baisse. La courbe moyenne lente (la ligne bleue) est utilisée pour déterminer la direction de la tendance globale, et la courbe moyenne rapide (la ligne rouge) est utilisée pour identifier les moments de baisse.
Calculer deux moyennes rapides. La moyenne lente a un cycle de 21 pour déterminer la tendance globale; la moyenne rapide a un cycle de 5 en combinaison avec le canal de prix pour trouver le moment de la transaction.
Calculer si le prix actuel a franchi le canal du prix du cycle précédent. Si le prix franchit le canal, nous considérons cela comme une opportunité de transaction.
Calculer la direction et le nombre de lignes K. Le nombre de lignes N peut être défini par le paramètre Bars.
Si le cours est conforme à la direction de la ligne moyenne lente, et que la ligne moyenne rapide ou le canal de prix émet un signal, et que la ligne K est également conforme, un signal de transaction est émis.
L’utilisation d’un système bi-linéaire permet de suivre efficacement la direction des tendances.
La combinaison des courbes rapides et des canaux de prix permet de détecter les points de rupture plus tôt et de saisir les opportunités de transaction.
Pour éviter d’être piégé par le marché inversé, il faut tenir compte de la direction et du nombre de lignes K.
Les paramètres de la moyenne peuvent être modifiés librement pour différentes variétés et périodes.
Les lignes bi-équivalentes sont sujettes à des signaux erronés lors de la traverse. Le jugement peut être facilité par l’indicateur de différence de prix ou l’indicateur ATR, afin d’éviter de négocier dans des conditions de choc.
Il est également possible d’utiliser un coupon dans des situations exceptionnelles. Un point de rupture approprié peut être défini pour réduire les pertes individuelles.
Nous allons continuer à optimiser les mécanismes et les paramètres pour rendre la stratégie plus stable.
L’ajout d’indicateurs auxiliaires, tels que l’ADX, le MACD, etc., permet d’éviter les erreurs de négociation lors de chocs.
Il est possible de calculer l’expectative de risque en fonction de l’ATR et de définir un ratio de stop-loss raisonnable.
Adaptabilité des paramètres d’optimisation. Les méthodes d’apprentissage automatique peuvent être utilisées pour permettre au système d’optimiser automatiquement les paramètres.
Les paramètres sont ajustés en fonction des caractéristiques de la variété. Par exemple, les crypto-monnaies sont adaptées à des périodes plus courtes.
Cette stratégie est parfaitement adaptée pour suivre les tendances globales. En même temps, elle offre des opportunités de rupture. En optimisant judicieusement, la stratégie peut fonctionner de manière stable dans un plus grand nombre de marchés. Nous continuerons à l’améliorer et nous nous efforcerons de la transformer en une stratégie de haute qualité et de qualité commerciale.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.9 Extreme", shorttitle = "Trend MAs str 1.9 extreme", 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?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
src = useohlc4 == true ? ohlc4 : 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
//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
up2 = high < center and high < center2 and bar == -1 ? 1 : 0
dn2 = low > center and low > center2 and bar == 1 ? 0 : 0
//Lines
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 or (up2 == 1 and needex == true)
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)