Chiến lược này sử dụng VWAP (Volume Weighted Average Price) từ khung thời gian hàng ngày như một tín hiệu để vào và ra khỏi giao dịch. Khi giá đóng vượt trên VWAP, nó kích hoạt một bước vào dài với mức dừng lỗ được đặt ở mức thấp nhất của nến trước đó nếu nó nằm dưới VWAP, và giá mục tiêu được đặt 3 điểm trên giá nhập. Ngược lại, khi giá đóng vượt dưới VWAP, nó kích hoạt một bước vào ngắn với mức dừng lỗ được đặt ở mức cao nhất của nến trước đó nếu nó nằm trên VWAP, và giá mục tiêu được đặt 3 điểm dưới giá nhập. Chiến lược này không bao gồm điều kiện thoát, vì vậy các giao dịch vẫn mở cho đến khi tín hiệu đối lập xảy ra.
Bằng cách sử dụng dữ liệu VWAP xuyên khung thời gian để xác định xu hướng và tận dụng các lỗ dừng động và lợi nhuận lấy điểm cố định, chiến lược có thể nắm bắt hiệu quả thị trường xu hướng, kiểm soát rủi ro rút tiền và khóa lợi nhuận kịp thời.
Chiến lược này sử dụng dữ liệu VWAP xuyên khung thời gian để xác định xu hướng và kích hoạt tín hiệu trong khi sử dụng các lỗ dừng động và lấy lợi nhuận tại điểm cố định để kiểm soát rủi ro và khóa lợi nhuận. Đây là một chiến lược giao dịch định lượng đơn giản và hiệu quả. Thông qua tối ưu hóa lọc xu hướng, lấy lợi nhuận động, kích thước vị trí và lựa chọn phiên giao dịch, tính mạnh mẽ và tiềm năng lợi nhuận của chiến lược có thể được nâng cao hơn nữa. Tuy nhiên, khi áp dụng chiến lược trong thực tế, nên chú ý đến đặc điểm thị trường, chi phí giao dịch và tối ưu hóa tham số để đạt được chiến lược hiệu suất tốt hơn.
/*backtest start: 2024-03-06 00:00:00 end: 2024-03-07 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=1000, default_qty_value=100, default_qty_type=strategy.percent_of_equity) // fastEMA = ta.ema(close, 24) // slowEMA = ta.ema(close, 200) // Higher Time Frame float sl = na float tgt = na posSize = 1 vwap_1d = request.security(syminfo.tickerid, "1D", ta.vwap(close)) // plot(vwap_1d) // To avoid differences on historical and realtime bars, you can use this technique, which only returns a value from the higher timeframe on the bar after it completes: // indexHighTF = barstate.isrealtime ? 1 : 0 // indexCurrTF = barstate.isrealtime ? 0 : 1 // nonRepaintingVWAP = request.security(syminfo.tickerid, "1D", close[indexHighTF])[indexCurrTF] // plot(nonRepaintingVWAP, "Non-repainting VWAP") enterLong = ta.crossover(close, vwap_1d) exitLong = ta.crossunder(close, vwap_1d) enterShort = ta.crossunder(close, vwap_1d) exitShort = ta.crossover(close, vwap_1d) if enterLong sl := low[1]>vwap_1d ?low[1]:vwap_1d tgt:=close+3 strategy.entry("EL", strategy.long, qty=posSize) strategy.exit('exitEL', 'EL', stop=sl, limit=tgt) if enterShort sl := high[1]<vwap_1d ?high[1]:vwap_1d tgt := close-3 strategy.entry("ES", strategy.short, qty=posSize) strategy.exit('exitES', 'ES', stop=sl, limit=tgt) // if exitLong // strategy.close("EL") // if exitShort // strategy.close("ES") // goLongCondition1 = ta.crossover(close, vwap_1d) // timePeriod = time >= timestamp(syminfo.timezone, 2021, 01, 01, 0, 0) // notInTrade = strategy.position_size <= 0 // if goLongCondition1 and timePeriod and notInTrade // stopLoss = low[1] // takeProfit = close+3 // strategy.entry('long', strategy.long) // strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit) plot(close, color=color.new(#00c510, 0)) plot(vwap_1d, color=color.new(#f05619, 0)) plot(sl, color=color.new(#fbff00, 0)) plot(tgt, color=color.new(#00e1ff, 0))