리소스 로딩... 로딩...

가격 채널 VWAP 거래 전략

저자:차오장, 날짜: 2024-02-19 14:25:18
태그:

img

전반적인 설명

이 전략은 Price Channel VWAP Trading Strategy라고 불린다. 이것은 가격 채널에 기반한 VWAP 거래를 구현하는 전략이다. 이 전략의 주요 아이디어는: 가격 채널 내에서, VWAP 지표의 이동 평균 라인과 상부 및 하부 오프셋 채널 라인을 사용하여 구매 및 판매 포인트 판단을 한다. 채널 라인이 깨지면 전체 자산의 고정 비율에 따라 포지션을 열고, 가격이 VWAP 이동 평균 라인에 회귀할 때 포지션을 닫는다.

전략 원칙

이 전략은 현재 평균 거래 가격을 VWAP 지표를 통해 계산합니다. VWAP는 평균 가격을 나타내고 거래량에 대한 매출의 비율입니다. VWAP 지표는 현재 가격과 역사적 평균 거래 가격 사이의 오차 정도를 반영합니다.

이 전략은 VWAP 지표의 이동 평균선과 그 오프셋 채널 라인을 사용한다. 오프셋 채널 라인의 비율은 매개 변수 longlevel1shortlevel1을 통해 설정된다. 가격이 상부 오프셋 채널 라인을 통과할 때, 매개 변수 lotsizelong에 의해 설정된 포지션의 비율에 따라 긴 포지션을 열고; 가격이 하부 오프셋 채널 라인을 통과할 때, 매개 변수 lotsizeshort에 의해 설정된 포지션의 비율에 따라 짧은 포지션을 열고. 포지션을 열고 나면, 가격이 VWAP 이동 평균선 주위를 회귀할 때 포지션을 닫는 것을 선택한다.

이 전략의 매개 변수 설정은 채널 거래의 아이디어를 완전히 반영합니다. 사용자는 자신의 선호도에 따라 전체 자산의 비율로 채널 너비와 포지션 크기를 조정하여 다양한 수준의 거래 빈도를 실현 할 수 있습니다.

이점 분석

이 거래 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 가치 중점을 결정하기 위해 VWAP 지표를 사용하면 주요 시장 방향을 파악 할 수 있습니다.
  2. 채널 범위 내에서의 거래는 더 명확한 작동을 위해 소음 간섭을 피합니다.
  3. 다양한 레벨의 채널을 결합하고, 대량으로 배포하면 위험을 줄입니다.
  4. 급격한 회전으로 인한 손실을 피하기 위해 회귀로 적시에 수익을 취합니다.

VWAP 지표는 평균 가격 수준을 잘 반영할 수 있기 때문에 채널 라인에 기반한 거래는 가치 중간 지점을 효과적으로 차단하고 단기 변동에 의해 편향되는 것을 피할 수 있습니다. 동시에 다른 매개 변수와 배치로 포지션을 구축하는 채널을 결합하면 위험을 효과적으로 제어하고 강제 청산으로 이어지는 일방적 위험 농도를 예방할 수 있습니다. 마지막으로, VWAP 이동 평균 라인의 회귀 근처 포지션을 적시에 수익으로 폐쇄함으로써 가격 반전으로 인한 손실을 줄일 수 있습니다.

위험 분석

이 전략은 또한 몇 가지 위험을 가지고 있습니다.

  1. VWAP 지표는 높은 주파수 거래에 민감하지 않으며 극심한 가격 오차를 반영할 수 없습니다.
  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")

더 많은