
Chiến lược này dựa trên VWAP và EMA làm chỉ số để xác định hướng của xu hướng, VWAP đại diện cho giá điển hình và EMA200 đại diện cho xu hướng đường dài trung bình. Làm nhiều khi giá cao hơn VWAP và EMA200 và làm giảm khi giá thấp hơn VWAP và EMA200, thuộc chiến lược theo xu hướng điển hình.
Lý luận cốt lõi của chiến lược là sử dụng VWAP và EMA để xác định xu hướng giá.
Do đó, chiến lược này đầu tiên đánh giá xem giá có cao hơn cả VWAP và EMA200 không, và nếu có, hãy làm nhiều hơn; Nếu giá đồng thời thấp hơn cả VWAP và EMA200, hãy làm trống. Như bạn có thể thấy, chiến lược này chủ yếu dựa vào quyết định mua và bán của VWAP và EMA.
Ngoài ra, chiến lược cũng đặt điểm dừng lỗ. Cài đặt dừng là 3.5% giá nhập sau khi thực hiện quá nhiều, dừng là 1.4%; Cài đặt dừng là 2.5% giá nhập sau khi mở rộng, dừng là 0.9%. Điều này có thể tránh thiệt hại quá lớn.
Lợi thế lớn nhất của chiến lược này là sử dụng VWAP và EMA để đánh giá xu hướng rất đáng tin cậy.
Do đó, kết hợp sử dụng VWAP và EMA để đánh giá xu hướng có độ tin cậy rất cao. Khi cả hai đánh giá xu hướng phù hợp, tỷ lệ thành công của hoạt động rất cao.
Ngoài ra, thiết lập điểm dừng lỗ ngăn chặn có thể giúp tránh tổn thất đơn lẻ quá lớn.
Rủi ro chính của chiến lược này là VWAP và EMA có thể phát ra tín hiệu sai.
Ngoài ra, các thiết lập dừng lỗ có thể không phù hợp và rủi ro thua lỗ đơn lẻ quá lớn vẫn còn tồn tại.
Để giải quyết các vấn đề trên, chúng ta có thể tối ưu hóa các thiết lập tham số của VWAP và EMA để chúng có thể phân biệt rõ hơn sự khởi đầu của một xu hướng mới. Ngoài ra, chúng ta có thể thiết lập các điểm dừng thích ứng để cho điểm dừng điều chỉnh theo biến động giá.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Chiến lược này nói chung là một chiến lược theo dõi xu hướng rất đáng tin cậy. Nó sử dụng VWAP và EMA để xác định hướng xu hướng, ý tưởng rõ ràng và đơn giản, khi cả hai phát ra tín hiệu đồng nhất, xác suất thành công của việc tham gia rất cao. Bằng cách thiết lập dừng chân hợp lý, rủi ro có thể được kiểm soát.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//26m Binance BTCUSDTPERP
//@version=4
strategy("VWAP Trend Follower", initial_capital=100, overlay=true, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 90, currency = currency.USD )
/// INITIALISE STRATEGY ///
price=close[1]
vprice=vwap(price)
trend=ema(price, 200)
/// RISK MANAGEMENT ///
long_tp_inp = input(3.5, title='Long Take Profit %',step=0.1)/100
long_sl_inp = input(1.4, title='Long Stop Loss %',step=0.1)/100
short_tp_inp = input(2.5, title='Short Take Profit %',step=0.1)/100
short_sl_inp = input(0.9, title='Short Stop Loss %',step=0.1)/100
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)
short_take_level = strategy.position_avg_price * (1 - short_tp_inp)
short_stop_level = strategy.position_avg_price * (1 + short_sl_inp)
//long_trailing = input(5, title='Trailing Stop Long',step=0.1) / 100
//short_trailing = input(5, title='Trailing Stop short',step=0.1) / 100
/// STRATEGY CONDITIONS ///
aLong= price > trend and price > vprice
entry_long = aLong and aLong[2] and aLong[1]
aShort= price < trend and price < vprice
entry_short = aShort and aShort[2] and aShort[1]
//exit_long =
//exit_short =
//entry_price_long=valuewhen(entry_long,close,0)
//entry_price_short=valuewhen(entry_short,close,0)
/// PLOTTING ///
plot(vprice, color=#5875E1, linewidth=2)
plot(trend, color=#D965E1, linewidth=1)
plotshape(series=aLong, color=#71E181,style=shape.labelup)
plotshape(series=aShort, color=#E18BA5,style=shape.labeldown)
//plot(long_take_level, color=#00E676, linewidth=2)
//plot(long_stop_level, color=#FF5252, linewidth=1)
//plot(short_take_level, color=#4CAF50, linewidth=2)
//plot(short_stop_level, color=#FF5252, linewidth=1)
/// PERIOD ///
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true
//// STRATEGY EXECUTION ////
if testPeriod()
if strategy.position_size == 0 or strategy.position_size > 0
strategy.entry(id="Long", long=true, when=entry_long, comment="Long")
strategy.exit("Take Profit/ Stop Loss","Long", limit=long_take_level, stop=long_stop_level,comment="Exit Long")//,trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
// strategy.close(id="Long", when=exit_long, comment = "Exit Long")
if strategy.position_size == 0 or strategy.position_size < 0
strategy.entry(id="Short", long=false, when=entry_short, comment = "Short")
strategy.exit("Take Profit/ Stop Loss","Short", limit=short_take_level , stop=short_stop_level,comment = "Exit Short")//, trail_points=entry_price_short * short_trailing / syminfo.mintick, trail_offset=entry_price_short * short_trailing / syminfo.mintick)
// strategy.close(id="Short", when=exit_short, comment = "Exit Short")