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