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