
Chiến lược này thực hiện giao dịch theo dõi xu hướng của cổ phiếu bằng cách tính toán biến động ATR của giá, kết hợp giá trung bình VWAP trong các chu kỳ khác nhau, thiết lập điều kiện nhập và thoát vị trí dài.
Chiến lược này chủ yếu được áp dụng cho theo dõi xu hướng của các sản phẩm như cổ phiếu, thiết lập các điều kiện mua và bán bằng cách tính toán biến động ATR và kết hợp giá VWAP trong các chu kỳ khác nhau, để có thể phán đoán và theo dõi xu hướng. Chiến lược này linh hoạt hơn, có thể chuyển đổi giữa đường dài và đường ngắn, phù hợp để nắm bắt xu hướng đường dài trung bình.
Chiến lược sử dụng chỉ số ATR để tính toán biến động giá, và kết hợp với việc giá có phá vỡ kênh biến động để xác định hướng xu hướng hay không. Đồng thời giới thiệu giá VWAP trong các chu kỳ khác nhau để xác định sự nhất quán của xu hướng đường dài và đường ngắn.
Đây là logic cốt lõi của chiến lược. ATR phân tích xu hướng ngắn hạn, giá VWAP phân tích xu hướng dài hạn, kết hợp với sự nhất quán của xu hướng, tạo ra tín hiệu giao dịch.
Chiến lược này theo dõi xu hướng cổ phiếu thông qua tỷ lệ biến động ATR và VWAP, theo dõi xu hướng cổ phiếu. Có nhiều không gian tối ưu hóa chiến lược, có thể điều chỉnh tham số hoặc thêm tín hiệu tối ưu hóa các chỉ số kỹ thuật khác. Nhìn chung, logic chiến lược rõ ràng và dễ hiểu, hoạt động ổn định, phù hợp để theo dõi xu hướng đường dài.
/*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)