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.
Les principaux principes de cette stratégie sont les suivants:
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.
Lorsque le prix franchit le niveau supérieur, il est défini comme haussier.
Filtrez le bruit. Utilisez la volatilité des prix MA d'une certaine période pour filtrer le bruit des fluctuations aléatoires des prix.
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 de cette stratégie sont les suivants:
Les risques de cette stratégie sont les suivants:
Les solutions:
La stratégie peut être optimisée dans les aspects suivants:
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)