가격 채널 기반 VWAP 거래 전략


생성 날짜: 2024-02-19 14:25:18 마지막으로 수정됨: 2024-02-19 14:25:18
복사: 0 클릭수: 782
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

가격 채널 기반 VWAP 거래 전략

개요

이 전략의 이름은 Price Channel VWAP Trading Strategy, 그것은 가격 통로를 기반으로 VWAP 거래를 실현하는 전략이다. 이 전략의 주요 아이디어는 다음과 같습니다: 가격 통로 내에서 VWAP 지표의 평균선과 그 상하의 편향 통로선을 사용하여 매도점을 판단하고, 통로선을 돌파할 때 고정 위치의 총 자산 비율에 따라 포지션을 열고, VWAP 평균선으로 돌아가는 경우 입점을 평한다.

전략 원칙

이 전략은 VWAP 지수를 사용하여 현재 가격의 평균 거래 가격을 계산한다. VWAP는 거래 금액과 거래 금액의 비율로 가격을 나타내는 평균 가격을 나타냅니다. VWAP 지수는 현재 가격과 역사적 거래 평균 가격의 편차를 반영한다.

전략은 VWAP 지표의 평균선과 그 오차 통로선을 사용한다. 오차 통로선의 비율은 변수longlevel1과shortlevel1을 통해 설정한다. 가격이 오차 통로선을 돌파할 때, 변수lotsizelong의 위치 퍼센트에 따라 더 많은 상자를 열고, 가격이 오차 통로선을 돌파할 때, 변수lotsizeshort의 위치 퍼센트에 따라 빈 상자를 열고. 포지션을 열고, 가격이 VWAP 선의 평균 근처로 돌아갈 때, 평평한 포지션을 선택한다.

이 전략의 매개 변수 설정은 채널 거래의 사고를 충분히 반영한다. 사용자는 자신의 선호에 따라 채널 너비와 포지션 비율 크기를 조정할 수 있으며, 이로 인해 거래 빈도가 달라진다.

우위 분석

이 거래 전략에는 다음과 같은 장점이 있습니다.

  1. VWAP 지표는 가치 중심지를 판단하여 시장의 주요 방향을 파악할 수 있습니다.
  2. 통로 내에서 거래, 노이즈 방해를 방지하고 작업을 더 명확하게
  3. 다양한 계층의 통로 포트폴리오 운영, 단계적으로 배치하여 위험을 줄입니다.
  4. 회귀작업의 제시간 정지, 급격한 회귀로 인한 손실을 방지

VWAP 지표가 가격의 평균 수준을 잘 반영할 수 있기 때문에, 통로 라인을 기반으로 거래하면, 가치의 중심을 효과적으로 잠금할 수 있으며, 단기 변동의 편향을 피할 수 있다. 동시에, 다른 파라미터 채널을 사용하여 조합을 하고, 수량으로 창고를 구축하여, 위험을 효과적으로 제어할 수 있으며, 일방적인 위험이 포지션을 집중적으로 터뜨리는 것을 방지한다. 마지막으로, VWAP 평평선 근처의 평소 위치로 적시에 정지하여 돌아가는 것은 가격 역전으로 인한 손실을 줄일 수 있다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. VWAP 지표는 HFT 거래에 민감하지 않으며, 극한 가격의 이상성을 반영하지 않습니다.
  2. 채널 너비 파라미터를 잘못 설정하면 너무 급진적인 거래가 발생할 수 있습니다.
  3. 회귀 작업 평점 범위 너무 넓으면 감금 손실을 초래할 수 있습니다.

VWAP 지표는 높은 주파수 거래 변동에 민감하지 않으며, 가격 극단적 인 폭등 또는 단기적 인 비정상적인 경우에도 불필요한 거래 신호 및 손실을 유발할 수 있습니다. 또한, 통로 매개 변수가 너무 느슨하게 설정되면 가격 침투 무효 신호가 형성 될 수 있습니다. 마지막으로, 회귀 작업의 평평한 범위 포지션은 너무 넓게 설정되면 최적의 정지 시기를 놓치고 손실을 감싸게 할 수 있습니다.

대책은 합리적인 평가 파라미터 설정, 적절하게 조정 통로 파라미터; 동시에 다른 지표와 결합하여 가격 비정상을 판단, 맹목적 추적을 피; 마지막으로 다양한 수준의 통로 및 회귀 범위에 대한 파라미터 최적화를 평가하여 더 나은 차단 효과를 달성한다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 채널의 계층을 늘리고, 변수 모음 최적화
  2. 거래량 지표와 함께 돌파구의 유효성을 판단하는 방법
  3. 손실을 막는 전략을 추가하고, 회수 비율을 설정합니다.

더 많은 계층의 통로 라인을 추가할 수 있으며, 조합 파라미터를 최적화하여 보다 안정적인 거래 효과를 달성할 수 있다. 또한, 거래량 판단 규칙을 추가할 수 있으며, 유효하지 않은 가격 폭파로 거래 손실을 방지할 수 있다. 마지막으로, 또한, 스톱 손실 규칙을 설정할 수 있으며, 지분 손실이 일정 비율에 도달했을 때 손실 현장에서 벗어나서 위험을 효과적으로 제어할 수 있다.

요약하다

이 전략은 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")