이 전략은
이 전략은 현재 평균 거래 가격을 VWAP 지표를 통해 계산합니다. VWAP는 평균 가격을 나타내고 거래량에 대한 매출의 비율입니다. VWAP 지표는 현재 가격과 역사적 평균 거래 가격 사이의 오차 정도를 반영합니다.
이 전략은 VWAP 지표의 이동 평균선과 그 오프셋 채널 라인을 사용한다. 오프셋 채널 라인의 비율은 매개 변수
이 전략의 매개 변수 설정은 채널 거래의 아이디어를 완전히 반영합니다. 사용자는 자신의 선호도에 따라 전체 자산의 비율로 채널 너비와 포지션 크기를 조정하여 다양한 수준의 거래 빈도를 실현 할 수 있습니다.
이 거래 전략은 다음과 같은 장점을 가지고 있습니다.
VWAP 지표는 평균 가격 수준을 잘 반영할 수 있기 때문에 채널 라인에 기반한 거래는 가치 중간 지점을 효과적으로 차단하고 단기 변동에 의해 편향되는 것을 피할 수 있습니다. 동시에 다른 매개 변수와 배치로 포지션을 구축하는 채널을 결합하면 위험을 효과적으로 제어하고 강제 청산으로 이어지는 일방적 위험 농도를 예방할 수 있습니다. 마지막으로, VWAP 이동 평균 라인의 회귀 근처 포지션을 적시에 수익으로 폐쇄함으로써 가격 반전으로 인한 손실을 줄일 수 있습니다.
이 전략은 또한 몇 가지 위험을 가지고 있습니다.
VWAP 지표는 높은 주파수 거래 변동성에 민감하지 않습니다. 극심한 가격 격차 또는 단기적 변동의 경우, 여전히 불필요한 거래 신호 및 손실을 유발합니다. 또한, 채널 매개 변수가 너무 느슨하게 설정되면, 유효하지 않은 가격 침투 신호를 쉽게 형성 할 수 있습니다. 마지막으로, 회귀 운영에서 닫히는 포지션 범위가 너무 넓게 설정되면, 이윤 취득을위한 최적의 타이밍을 놓칠 수 있으며 함락 손실을 유발할 수 있습니다.
대책은 파라미터 설정을 합리적으로 평가하고 채널 파라미터를 적절히 조정하는 것, 다른 지표를 결합하여 가격 이상성을 판단하고 신호를 맹목적으로 피하는 것, 마지막으로 다른 레벨과 회귀 범위의 채널의 파라미터 최적화를 평가하여 더 나은 수익 효과를 달성하는 것입니다.
이 전략은 다음과 같은 방향으로 최적화 될 수 있습니다.
더 많은 수준의 채널 라인을 추가하고 매개 변수를 결합하여 최적화를 통해 더 안정적인 거래 효과를 달성 할 수 있습니다. 또한 거래 손실을 유발하는 유효하지 않은 가격 격차를 피하기 위해 거래량 판단 규칙을 추가 할 수 있습니다. 마지막으로 스톱 로스 규칙을 설정하여 포지션 손실이 특정 퍼센트에 도달하면 출구 포지션에 스톱 로스를 설정하여 위험을 효과적으로 제어 할 수 있습니다.
이 전략은 비교적 안정적인 거래 전략을 달성하기 위해 VWAP 지표와 가격 채널을 결합합니다. 전략 매개 변수 설정은 사용자가 자신의 취향에 따라 조정할 수 있도록 유연합니다. 이 전략은 가치 중간 지점의 방향을 효과적으로 결정할 수 있습니다. 매개 변수 조합과 배치 포지션 구축을 통해 안정적인 수익성을 달성 할 수 있습니다. 전략에 개선할 여지가 있지만 전반적으로 실용성이 높은 양적 거래 전략입니다.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %") lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %") short1 = input(true, title = "short 1") long1 = input(true, title = "long 1") shortlevel1 = input(1.0, title = "Short line 1") longlevel1 = input(-1.0, title = "Long line 1") needoffset = input(true, title = "Offset") 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") //Variables size = strategy.position_size mult = 1 / syminfo.mintick truetime = true //VWAP ma = vwap(hlc3) //Levels longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close //Lines colorlong1 = long1 ? color.lime : na colorshort1 = short1 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1") plot(ma, offset = offset, color = color.blue, title = "MA line") plot(longline1, offset = offset, color = colorlong1, title = "Long line 1") //Trading lotlong = 0.0 lotshort = 0.0 lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1] lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1] if ma > 0 if lotlong > 0 lotslong = 0.0 lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime)) if lotshort > 0 lotsshort = 0.0 lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0 strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime)) if strategy.position_size > 0 strategy.exit("TPL", "L1", limit = ma) if strategy.position_size < 0 strategy.exit("TPS", "S1", limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("L1") strategy.cancel("S1") strategy.cancel("TPL") strategy.cancel("TPS")