듀얼 기간 ATR 변동성 돌파 주식 추세 전략


생성 날짜: 2024-01-17 16:34:23 마지막으로 수정됨: 2024-01-17 16:34:23
복사: 1 클릭수: 728
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

듀얼 기간 ATR 변동성 돌파 주식 추세 전략

이 전략은 가격의 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 파라미터 설정은 전략 성능에 영향을 미치며, 다양한 품종에 대한 신중한 테스트가 필요합니다.
  • 단편적 손실을 통제하기 위한 손해제도 도입을 고려할 수 있다.
  • 평행선과 같은 지표가 결합되어 진입 신호를 필터링하여 불필요한 거래를 줄일 수 있습니다.

요약하다

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