Stratégie de position de l' élan de NoroBands

Auteur:ChaoZhang est là., Date: 18 janvier 2024 à 10h48
Les étiquettes:

img

Résumé

Cette stratégie combine la théorie des bandes de Noro avec des techniques quantitatives pour former une stratégie de rupture d'élan.

La logique de la stratégie

  1. Calculer les bandes supérieures et inférieures en utilisant la plage moyenne vraie.
  2. Utilisez l'indicateur RSI pour déterminer les zones de surachat et de survente.
  3. La rupture des prix max et min montre la direction de l'élan des prix.
  4. Les barres de couleur indiquent les marchés haussiers ou baissiers. Le vert signifie marché haussier pour le long tandis que le rouge signifie marché baissier pour le court.
  5. Combiner la moyenne mobile pour identifier la divergence des signaux de négociation.

Les avantages

  1. La combinaison de plusieurs indicateurs améliore la précision.
  2. La combinaison de la théorie des bandes et des techniques quantitatives rend la stratégie plus efficace.
  3. Le mélange de l'écoulement de l'élan et de la moyenne de la reverssion élargit la marge de profit.
  4. Une grande extensibilité pour ajuster les paramètres en fonction des marchés.

Les risques

  1. Les paramètres doivent être constamment optimisés et testés.
  2. Ne répond pas à temps aux interrupteurs longs et courts, causant probablement des pertes.
  3. fréquence élevée des transactions, facilement affectée par les frais et les dérapages.
  4. Les paramètres doivent être ajustés en temps opportun pour s'adapter aux différents cycles.

Optimisation

  1. Validation à plusieurs délais pour trouver la meilleure combinaison de paramètres.
  2. Ajouter un stop loss pour réduire les pertes uniques.
  3. Une gestion plus large des positions pour améliorer l'efficacité des bénéfices.
  4. Combinez l'apprentissage en profondeur pour l'optimisation automatique des paramètres.

Résumé

Cette stratégie combine des indicateurs quantitatifs typiques pour réaliser un profit effectif grâce à des indicateurs de dynamique et de réversion moyenne. Elle utilise également la théorie de la plage moyenne vraie pour localiser des points d'entrée raisonnables. Un bon exemple de combinaison de théorie et de techniques. Avec l'optimisation des paramètres et l'amélioration du contrôle des risques, elle deviendra une stratégie quantitative efficace et stable.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.5", shorttitle = "NoroBands str 1.5", overlay=true)

//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, defval = true, title = "Use ColorBar")
usecb = input(true, defval = true, title = "Use CryptoBottom")
usersi = input(true, defval = true, title = "Use RSI")
usemm = input(true, defval = true, title = "Use min/max")
usepyr = input(true, defval = true, title = "Use pyramiding")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
needpy = input(false, defval = false, title = "Show Avg.price line")
src = close

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
lencb = abs(close - mac)
sma = sma(lencb, 100)
max = max(open, close)
min = min(open, close)

//PriceChannel
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
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
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")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

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

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) and (min < min[1] or usemm == false) and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) and (close > strategy.position_avg_price or usepyr == false or strategy.position_size >= 0) ? 1 : 0 
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 and usersi == true and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
//dn3 = fastrsi > 95 and usersi = true ? 1 : 0

//Avg Price
colpy = needpy == false ? na : black
plot(strategy.position_avg_price, color = colpy)

up4 = close < strategy.position_avg_price and usepyr == true and strategy.position_size >= 0 ? 1 : 0 
dn4 = close > strategy.position_avg_price and usepyr == true and strategy.position_size <= 0 ? 1 : 0 

//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 0)

longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true) or up4 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1 or dn4 == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Plus de