Z거리를 기반으로 한 VWAP 전략


생성 날짜: 2023-11-10 12:02:19 마지막으로 수정됨: 2023-11-10 12:02:19
복사: 0 클릭수: 806
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

Z거리를 기반으로 한 VWAP 전략

개요

이 전략은 LazyBear의 Z 거리 VWAP 지표를 기반으로 가격과 VWAP의 Z 거리를 계산하여 과매매를 판단하고, 입찰을 실시한다. 이 전략은 EMA 평균선과 Z 거리 회귀 0 축의 판단을 더하여 일부 잡음 신호를 필터링 할 수 있다.

전략 원칙

  1. VWAP 값을 계산합니다.
  2. 가격과 VWAP의 Z 거리
  3. 오버 바이 라인 (Over Buy Line) 을 설정합니다.
  4. 빠른 선이 느린 선보다 크면, Z 거리는 초과 선보다 낮으며, Z 거리는 0축을 통과할 때 더 많이 한다.
  5. Z가 오버 바이 라인을 넘어서면 평점
  6. Stop Loss 로직을 추가합니다.

핵심 함수:

  • calc_zvwap: 가격과 VWAP의 Z 거리 계산
  • VWAP 값: vwap (hlc3)
  • 패스트 라인:ema (close,fastEma)
  • 슬로우 라인: ema (close, slowEma)

우위 분석

  1. Z 거리를 사용하여 직관적으로 과매매를 판단합니다.
  2. EMA 필터링과 함께 가짜 뚫림을 방지합니다.
  3. 이 트렌드에서 이익을 얻을 수 있는 장점이 있습니다.
  4. 위험성을 통제할 수 있는 상쇄 논리

위험 분석

  1. 오버 바이 오버 세일 라인 위치, EMA 주기 등과 같은 변수 설정이 합리적인지 확인해야 합니다.
  2. Z 지표가 지연되어서 중요한 시가점을 놓칠 수 있습니다.
  3. “지상위험이 커질 수 있다”
  4. 정지 손해 위치는 합리적인 설정이 필요합니다.

해결책:

  1. 역측정으로 최적화 변수 설정
  2. 추가 지표 필터링 신호와 결합
  3. 합리적 조건의 설정
  4. 동적으로 정지 위치를 조정

최적화 방향

  1. EMA 주기 변수를 최적화
  2. 다양한 과매매 판단 기준을 테스트하는 방법
  3. 다른 지표들을 추가하여 신호 노이즈를 필터링합니다.
  4. 다른 손실방법을 테스트합니다.
  5. 입점, 부가, 그리고 중지 논리를 최적화

요약하다

이 전략은 Z 거리를 이용하여 가격과 VWAP의 관계를 결정하고, EMA 필터링 노이즈 신호와 결합하여 트렌드 기회를 잡는다. 전략은 상장 추적 트렌드를 허용하며, 동시에 손실 제어 위험을 설정한다. 매개 변수를 최적화하고 다른 지표를 추가하면 전략의 안정성을 높일 수 있다. 그러나 Z 거리의 지표가 뒤쳐진 문제가 있어 최적화 시 고려해야 한다.

전략 소스 코드
/*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