이것은 라지베어
이 전략의 핵심 지표는 LazyBear
특히, 전략은 먼저 가격의 2개의 표준편차의 너비로 21주기 볼링거 밴드를 계산한다. 동시에, 가격 진폭의 1.5배의 너비로 20주기 켈트너 채널을 계산한다. 볼링거 밴드가 켈트너 채널에 의해 압축될 때, 압축 신호가 유발된다. 또한, 전략은 또한 일정 기간 동안 자신의 가격 채널의 중간 지점과 비교하여 가격의 추진력을 계산한다. 압축이 발생하면, 추진력 지표의 방향성과 결합하여 구매 또는 판매 여부를 결정한다.
출구에 있어서, 모멘텀 지표의 색이 회색으로 변하면 압축 상태가 끝났고 트렌드가 역전될 수 있음을 나타냅니다.
이러한 지표들 사이의 전반적인 관계를 판단함으로써 거래 결정의 정확성을 향상시키고 잘못된 거래의 확률을 줄일 수 있습니다.
추진력 압축 전략은 시장이 폭발할 가능성이있는 핵심 지점을 포착 할 수 있습니다. 이러한 지점은 종종 시장이 중요한 방향 판단을 할 수있는 전환 지점입니다. 올바르게 판단되면 후속 시장 움직임은 상대적으로 길어질 수 있으므로 전략의 잠재적 인 이익 공간이 크습니다.
무작위 브레이크아웃 거래와 비교하면 이 전략에 의해 선택된 엔트리 포인트는 볼링거 밴드와 켈트너 채널 사이의 압축 지점입니다. 통합 지표 판단을 통해 거래 성공률은 매우 높습니다.
볼링거 밴드 및 켈트너 채널의 사이클 매개 변수 및 대역폭 매개 변수는 거래 결과에 큰 영향을 미칩니다. 매개 변수가 적절히 설정되지 않으면 잘못된 판단이 발생할 수 있습니다. 이것은 많은 백테스팅을 통해 최적 매개 변수를 찾는 것을 필요로합니다.
이 전략에 의해 선택된 지점을 깨고 손실을 초래한 후 가격이 다시 올라갈 위험이 항상 있습니다. 손실을 통제하기 위해 엄격히 중단해야합니다.
압축 상태가 끝나면, 이 전략은 모든 포지션을 닫을 것입니다. 그러나 때로는 가격 추세가 계속될 수 있으며, 이는 조기 출출의 위험을 초래합니다. 출구 논리는 최적화되어야합니다.
더 많은 백테스팅 데이터 테스트를 통해 전략 성능을 향상시키기 위해 더 나은 사이클 및 대역폭 매개 변수 설정을 찾을 수 있습니다.
가격 변동에 따라 손실을 빠르게 줄이기 위해 이동 또는 변동 중지 설정.
전략이 포지션을 종료할 때, 트렌드가 계속되면 시장에 다시 진입할 수 있는 특정 재진입 조건이 설정될 수 있습니다.
다른 변동성 지표, 부피 지표 등과 같은 다양한 유형의 더 많은 지표를 통합하여 결정의 정확성을 향상시키기 위해 지표 통합의 복합 전략을 수립하려고 노력하십시오.
이 전략은 볼링거 밴드, 켈트너 채널 및 모멘텀 지표를 통합합니다. 이 지표들 사이의 관계를 판단함으로써 높은 성공률의 브레이크아웃 포인트에 진입합니다. 전략 성능을 더욱 향상시키기 위해 매개 변수 최적화, 스톱 로스 전략, 재 진입 조건 및 복합 지표 통합과 같은 많은 측면에서의 최적화 공간이 있습니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //All credits to LazyBear. All I did was turn it into a strategy! strategy(title = "SQZMOM STRAT", overlay=false) // --- GENERAL INPUTS --- FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2020, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 9999, title = "To Year", minval = 2017) FromDay = 1 ToDay = 1 start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision) trade_leverage = input(1, title = "Trade - Leverage", step = 0.25) trade_risk = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100) tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"]) // --- SQZMOM CODE length = input(21, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool) // 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 = color.gray if (val > 0 and val > nz(val[1])) bcolor := color.green if (val < 0 and val < nz(val[1])) bcolor := color.red scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray plot(val, color=bcolor, style=plot.style_histogram, linewidth=4) plot(0, color=scolor, style=plot.style_cross, linewidth=2) // --- VWMA CODE --- useVWMA = input(false, title = "Use VWMA to selectively long/short?", type = input.bool) lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1) useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?") nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA) medianSrc=close calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares) m=calc_evwma(medianSrc, lengthVWMA, nbfs) // ---STRATEGY--- if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false)) longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (longCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("LONG", strategy.long, qty = contracts, when = window()) if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false)) shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (shortCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("SHORT", strategy.short, qty = contracts, when = window()) if (bcolor == color.gray) strategy.close("LONG") strategy.close("SHORT")