이 전략은 라지 베어 (LazyBear) 의 VWAP 지표로부터의 Z 거리 (Z-distance from VWAP indicator) 를 기반으로 합니다. 이 전략은 가격과 VWAP 사이의 Z 거리를 사용하여 과잉 구매 및 과잉 판매 조건을 결정하고, 입점 및 출구를 결정합니다. 이 전략은 약간의 소음을 필터링하기 위해 EMA 라인과 Z 거리를 넘어서 0 레벨을 통합합니다.
주요 기능:
해결책:
이 전략은 가격-VWAP 관계를 결정하기 위해 Z 거리 (Z-distance) 를 사용하며 트렌드 기회를 포착하는 것을 목표로 EMA를 신호 필터에 추가합니다. 트렌드를 따르기 위해 피라미딩을 허용하고 위험을 제어하기 위해 스톱 로스를 가지고 있습니다. 최적화 및 다른 지표를 추가하면 견고성을 향상시킬 수 있습니다. 그러나 최적화 과정에서 Z 거리 (Z-distance) 의 뒤떨어진 문제가 고려되어야합니다. 전반적으로 이것은 간단하고 명확한 논리로 트렌드를 따르는 전략입니다. 완전히 최적화되면 트렌드를 거래하는 효율적인 도구가 될 수 있습니다.
/*backtest start: 2022-11-03 00:00:00 end: 2023-11-09 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mohanee //@version=4 //This is based on Z distance from VWAP by Lazybear strategy(title="ZVWAP[LB] strategy", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD) length=input(13,"length") calc_zvwap(pds, source1) => mean = sum(volume*source1,pds)/sum(volume,pds) vwapsd = sqrt(sma(pow(source1-mean, 2), pds) ) (close-mean)/vwapsd upperTop=2.5 //input(2.5) upperBottom=2.0 //input(2.0) lowerTop=-0.5 //input(-0.5) lowerBottom=-2.0 //input(-2.0) buyLine=input(-0.5, title="OverSold Line",minval=-2, maxval=3) sellLine=input(2.0, title="OverBought Line",minval=-2, maxval=3) fastEma=input(13, title="Fast EMA",minval=1, maxval=50) slowEma=input(55, title="Slow EMA",minval=10, maxval=200) stopLoss =input(5, title="Stop Loss",minval=1) hline(0, title="Middle Line", linestyle=hline.style_dotted, color=color.green) ul1=plot(upperTop, "OB High") ul2=plot(upperBottom, "OB Low") fill(ul1,ul2, color=color.red) ll1=plot(lowerTop, "OS High") ll2=plot(lowerBottom, "OS Low") fill(ll1,ll2, color=color.green) zvwapVal=calc_zvwap(length,close) plot(zvwapVal,title="ZVWAP",color=color.purple, linewidth=2) longEmaVal=ema(close,slowEma) shortEmaVal=ema(close,fastEma) vwapVal=vwap(hlc3) zvwapDipped=false for i = 1 to 10 zvwapDipped := zvwapDipped or zvwapVal[i]<=buyLine longCondition= shortEmaVal > longEmaVal and zvwapDipped and crossover(zvwapVal,0) barcolor(longCondition ? color.yellow: na) strategy.entry(id="ZVWAPLE", long=true, when= longCondition and strategy.position_size<1) //Add strategy.entry(id="ZVWAPLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(zvwapVal,0)) //calculate stop Loss stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01) strategy.close(id="ZVWAPLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss strategy.close(id="ZVWAPLE",comment="TPExitAll", qty=strategy.position_size , when= crossunder(zvwapVal,sellLine)) //close all zvwapVal>sellLine