변동성 대역 및 VWAP 다중 시간 프레임 주식 트렌드 거래 전략

저자:차오장, 날짜: 2024-01-17 16:34:23
태그:

img

이 전략은 가격의 ATR 변동성을 계산하고 다른 기간 VWAP를 결합하여 주식 트렌드 거래에 대한 긴 입시 및 출시 조건을 설정합니다.

전략 개요

이 전략은 주로 주식 상품의 트렌드 추적에 사용됩니다. ATR 변동성을 계산하고 다른 기간의 VWAP 가격을 결합하여 트렌드를 판단하고 추적하기 위해 구매 및 판매 조건을 설정합니다. 이 전략은 중장기 및 장기 트렌드를 포착하는 데 적합한 장기 및 단기간에 전환 할 수있는 충분한 유연성입니다.

전략 논리

이 전략은 ATR 지표를 사용하여 가격 변동성을 계산하고 가격이 변동성 채널을 통과하는지 여부에 따라 트렌드 방향을 판단합니다. 동시에 장기 및 단기 트렌드의 일관성을 결정하기 위해 다양한 주기의 VWAP 가격을 도입합니다. 구체적인 논리는 다음과 같습니다.

  1. 가격의 ATR 변동 채널을 계산합니다.
  2. 가격이 변동 채널을 통과하는 경우 판단
    1. 상부 레일을 깨는 것은 상승 추세를 나타냅니다.
    2. 하부 레일을 깨는 것은 하향 추세를 나타냅니다.
  3. 주간 및 일일 VWAP 가격을 도입
    1. 가격이 상위 변동성 레일을 뚫고 갈 때, 하루와 주간 VWAP가 가격보다 높으면 긴 신호가 생성됩니다.
    2. 가격이 낮은 변동성 철도를 뚫고 갈 때, 하루와 주간 VWAP가 가격 이하라면 짧은 신호가 생성됩니다.

위의 것은 전략의 핵심 논리입니다. ATR 변동성은 단기 트렌드를 판단하고 VWAP 가격은 장기 트렌드를 판단합니다. 둘은 트렌드의 일관성을 결정하고 따라서 거래 신호를 생성하기 위해 결합됩니다.

전략 의 장점

  • 트렌드를 판단하기 위해 ATR와 VWAP의 조합을 사용하여 더 신뢰할 수 있습니다.
  • 전략 감수성을 조정할 수 있는 ATR 기간 매개 변수
  • 장기 및 단기 트렌드 일관성을 결정하기 위해 다중 시간 프레임 VWAP를 도입
  • 긴 기간과 짧은 기간을 전환할 수 있는 유연성
  • 중·장기 주식 동향을 추적하기에 적합합니다.

위험 과 최적화

  • 전략에 따른 경향으로 통합 중에 더 많은 거래를 생성 할 수 있으며, 미끄러짐 위험을 초래합니다.
  • ATR 및 VWAP 매개 변수 설정은 전략 성능에 영향을 미치며 다른 제품들에 대한 신중한 테스트가 필요합니다.
  • 단일 거래 손실을 제어하기 위해 중지 손실을 추가하는 것을 고려하십시오.
  • MA 및 다른 지표와 결합하여 입시 신호를 필터링하고 불필요한 거래를 줄일 수 있습니다.

요약

이 전략은 ATR 변동성 및 VWAP의 이중 확인을 통해 주식 트렌드 추적을 실현합니다. 매개 변수를 조정하거나 다른 기술적 인 지표를 통합하여 최적화 할 수있는 충분한 공간이 있습니다. 전반적으로 전략 논리는 중장기 트렌드를 추적하는 데 명확하고 견고합니다.


/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © exlux99

//@version=4
strategy(title="VWAP MTF STOCK STRATEGY", overlay=true )

// high^2 / 2 - low^2 -2

h=pow(high,2) / 2
l=pow(low,2) / 2

o=pow(open,2) /2
c=pow(close,2) /2


x=(h+l+o+c) / 4
y= sqrt(x)

source = y
useTrueRange = false
length = input(27, minval=1)
mult = input(0, step=0.1)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

longOnly = true

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

srcX = input(ohlc4)
t = time("W")
start = na(t[1]) or t > t[1]

sumSrc = srcX * volume
sumVol = volume
sumSrc := start ? sumSrc : sumSrc + sumSrc[1]
sumVol := start ? sumVol : sumVol + sumVol[1]

vwapW= sumSrc / sumVol

 
//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
shortCondition = close < vwap and time_cond and (close < vwapW)
longCondition = close > vwap and time_cond and (close > vwapW)

 


if(longOnly and time_cond)
    if (crossLower and close < vwapW )
        strategy.close("long")
    if (crossUpper and close>vwapW)
        strategy.entry("long", strategy.long, stop=bprice)


더 많은