이 전략은 세 가지 다른 기술적 지표를 결합하고 두 개의 이동 평균 시스템을 사용하여 비교적 안정적이고 효과적인 단기 거래 전략을 구축하기 위해 촛불의 색상과 신체에 기반한 추가 필터를 사용하여 거래 신호를 생성합니다.
이 전략은 시장에서 압축 및 확장 단계를 식별하기 위해 볼링거 밴드 및 KC 채널을 조합하여 사용합니다. 구체적으로 볼링거 밴드가 KC 채널 내에있을 때 압축으로 간주됩니다. 볼링거 밴드가 KC 채널을 뚫을 때 확장으로 간주됩니다. 압축은 격화된 변동성과 가능한 트렌드 역전을 나타냅니다. 그리고 선형 회귀는 이 시점에서 주요 거래 신호 지표로 사용됩니다.
선형 회귀 히스토그램이 양수 (상승 추세를 나타내는) 이고 바가 빨간 촛불 (폐소 하위를 나타내는) 이고 동시에 촛불 몸집이 지난 30개의 촛불의 평균 몸집의 1/3보다 크다면, 그러한 조합 신호는 길게 간다. 반대로 선형 회귀 히스토그램이 음수라면, 바는 녹색 촛불이고, 몸집도 크면 짧게 간다.
전략은 또한 시장 단계를 판단하는 데 도움이되는 압축 및 확장 배경의 시각화를 제공합니다.
위험은 지표 매개 변수를 조정하고 필터링 기준을 최적화함으로써 줄일 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
이 전략은 여러 지표를 결합하고 압축 기회를 식별하면서 비교적 견고한 효율적인 단기 전략을 형성하기 위해 필터링 조건을 증가시킵니다. 매개 변수 및 필터링 조건 최적화를 통해 더 나은 결과를 얻을 수 있습니다. 또한 전략 프레임워크는 다양한 품종에서 사용하기 위해 유연하고 쉽게 조정되며 추가 테스트 및 최적화를 가치가 있습니다.
/*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)