
La stratégie combine trois indicateurs techniques différents, génère des signaux de transaction avec un système bi-homogène et utilise la couleur et l’entité des lignes K comme conditions de filtrage supplémentaires, afin de construire une stratégie de négociation en ligne courte relativement stable et efficace.
L’ensemble de la stratégie utilise la combinaison des bandes de Boolean et des canaux KC pour identifier les phases de compression et d’expansion du marché. Plus précisément, les bandes de Boolean sont considérées comme étant de compression lorsqu’elles sont dans le canal KC, et comme étant d’expansion lorsque les bandes de Boolean traversent le canal KC. La compression représente la possibilité d’une intensification de la volatilité et d’un renversement de tendance, utilisant la régression linéaire comme principal indicateur de signal de négociation.
Si l’histogramme de régression linéaire est positif (indiquant une tendance à la hausse) et que la barre est la ligne K rouge (indiquant une tendance à la baisse), et que l’entité de la ligne K est supérieure à 1⁄3 de la moyenne des entités des 30 dernières lignes de K, ce signal combiné est plus grand; inversement, si l’histogramme de régression linéaire est négatif, la barre est la ligne K verte et l’entité est plus grande, elle est vide.
La stratégie fournit un contexte visuel de la compression et de l’expansion pour aider à juger des phases du marché.
Il est possible de réduire le risque en ajustant les paramètres de l’indicateur et en optimisant les conditions de filtrage.
Cette stratégie peut être optimisée dans les domaines suivants:
Cette stratégie regroupe plusieurs indicateurs, augmente les conditions de filtrage tout en identifiant les opportunités de compression, formant une stratégie de ligne courte plus robuste et plus efficace. De meilleurs résultats peuvent être obtenus en optimisant les paramètres et les conditions de filtrage.
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2017
//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
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")
// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = (sqzOn == false) and (sqzOff == false)
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray
trend = val > 0 ? 1 : val < 0 ? -1 : 0
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)
if up
strategy.entry("Long", strategy.long)
if dn
strategy.entry("Short", strategy.short)