ZVWAP 전략 VWAP로부터의 Z 거리

저자:차오장, 날짜: 2023-11-10 12:02:19
태그:

img

전반적인 설명

이 전략은 라지 베어 (LazyBear) 의 VWAP 지표로부터의 Z 거리 (Z-distance from VWAP indicator) 를 기반으로 합니다. 이 전략은 가격과 VWAP 사이의 Z 거리를 사용하여 과잉 구매 및 과잉 판매 조건을 결정하고, 입점 및 출구를 결정합니다. 이 전략은 약간의 소음을 필터링하기 위해 EMA 라인과 Z 거리를 넘어서 0 레벨을 통합합니다.

전략 논리

  1. VWAP 값 계산
  2. 가격과 VWAP 사이의 Z 거리를 계산합니다.
  3. 과잉 매수 라인 (2.5) 및 과잉 판매 라인 (-0.5)
  4. 빠른 EMA > 느린 EMA, Z-distance < 과잉 판매 라인 및 Z-distance가 0을 넘을 때 긴 경로로 이동합니다.
  5. Z-distance > overbought 라인에서 포지션을 닫습니다.
  6. 스톱 로스 로직을 포함

주요 기능:

  • calc_zvwap: 가격과 VWAP 사이의 Z 거리를 계산합니다.
  • VWAP 값: vwap ((hlc3)
  • 빠른 EMA: ema (접근, 빠른 EMA)
  • 느린 EMA: EMA (접근, 느린 EMA)

이점 분석

  1. Z-distance는 직관적으로 과반 구매/ 과반 판매 수준을 보여줍니다.
  2. EMA는 가짜 유출을 필터링합니다.
  3. 피라미딩을 통해 트렌드를 활용할 수 있습니다.
  4. 리스크를 제어하기 위해 스톱 로스 로직을 가지고 있습니다.

위험 분석

  1. 라인, EMA 기간과 같은 매개 변수를 제대로 설정해야 합니다
  2. Z 거리 지표 지연, 주요 전환점을 놓칠 수 있습니다.
  3. 피라미드 투자는 추세가 뒤집어지면 손실을 증가시킬 수 있습니다.
  4. 스톱 로스는 합리적으로 설정해야 합니다.

해결책:

  1. 백테스팅을 통해 매개 변수를 최적화
  2. 필터 신호에 다른 표시기를 추가합니다.
  3. 피라미드 건설을 위한 적절한 조건을 설정
  4. 동적 스톱 손실을 사용

최적화 방향

  1. EMA 기간 최적화
  2. 다른 과잉 구매/ 과잉 판매 기준을 테스트
  3. 소음 필터에 다른 표시기를 추가
  4. 다른 스톱 로스 기술을 테스트합니다
  5. 진입, 피라미드 및 중지 손실 논리를 최적화

요약

이 전략은 가격-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

더 많은