Xu hướng VWAP theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-02-29 15:26:56
Tags:

img

Tổng quan

Chiến lược này sử dụng VWAP và EMA làm chỉ số để xác định hướng xu hướng. Nó đi dài khi giá trên cả VWAP và EMA200, và đi ngắn khi giá dưới cả VWAP và EMA200.

Chiến lược logic

Logic cốt lõi của chiến lược nằm ở việc sử dụng VWAP và EMA để đánh giá xu hướng giá.

  • VWAP đại diện cho giá điển hình và phản ánh chi phí trung bình của những người tham gia thị trường. Khi giá trên VWAP, điều đó có nghĩa là sức mua tăng và nên đi dài. Khi giá dưới VWAP, điều đó có nghĩa là sức bán tăng và nên đi ngắn.

  • EMA200 đại diện cho xu hướng trung hạn dài hạn của giá. Khi giá trên EMA200, điều đó có nghĩa là triển vọng trung hạn dài hạn tăng và nên đi dài. Khi giá dưới EMA200, điều đó có nghĩa là triển vọng trung hạn dài hạn giảm và nên đi ngắn.

Do đó, chiến lược này đầu tiên đánh giá nếu giá trên cả VWAP và EMA200, nếu có thì mua dài; nếu giá dưới cả VWAP và EMA200, sau đó mua ngắn.

Ngoài ra, chiến lược cũng thiết lập điểm lấy lợi nhuận và dừng lỗ. Sau khi mua dài, TP được thiết lập thành 3,5% giá nhập và SL được thiết lập thành 1,4% giá nhập. Sau khi mua ngắn, TP là 2,5% giá nhập và SL là 0,9% giá nhập. Điều này tránh mất rất nhiều.

Ưu điểm

Ưu điểm lớn nhất của chiến lược này là sử dụng VWAP và EMA để xác định xu hướng rất đáng tin cậy.

  • VWAP có thể phản ánh chính xác chi phí trung bình của những người tham gia thị trường, nó là một chỉ số rất tốt để đánh giá xu hướng.
  • EMA200 có thể phản ánh rõ xu hướng trung dài hạn và xác định hướng của các xu hướng chính rất chính xác.

Do đó, kết hợp VWAP và EMA để đánh giá xu hướng là rất đáng tin cậy.

Ngoài ra, việc thiết lập TP/SL tránh mất mát quá mức cho mỗi giao dịch.

Rủi ro

Nguy cơ chính của chiến lược này là VWAP và EMA có thể đưa ra các tín hiệu sai.

  • Khi có biến động thị trường mạnh mẽ, giá có thể lệch khỏi VWAP trong ngắn hạn và cung cấp tín hiệu sai.
  • Khi một xu hướng mới chỉ bắt đầu, EMA có thể chậm lại sự thay đổi giá và gây ra mất thời gian vào tốt nhất.

Ngoài ra, việc thiết lập TP/SL không đúng vẫn gây ra nguy cơ mất mát quá mức cho mỗi giao dịch.

Để giải quyết các vấn đề trên, chúng ta có thể tối ưu hóa các thông số của VWAP và EMA để làm cho chúng tốt hơn trong việc phát hiện sự khởi đầu của xu hướng mới.

Tăng cường

Các khía cạnh chính để tăng cường chiến lược này:

  • Tối ưu hóa các thông số VWAP để tìm các cài đặt ổn định hơn trong việc xác định xu hướng.
  • Tối ưu hóa thời gian EMA để tìm các thiết lập chính xác hơn trong việc đánh giá xu hướng.
  • Thêm các chỉ số xu hướng khác như Bollinger Bands, KDJ vv để kết hợp với VWAP và EMA, để cải thiện độ chính xác.
  • Đặt thích nghi lấy lợi nhuận và dừng lỗ dựa trên một số quy tắc để điều chỉnh chúng một cách năng động theo biến động giá.
  • Bao gồm việc phân loại vị trí dựa trên việc rút vốn, lỗ liên tiếp v.v. để kiểm soát rủi ro tổng thể.

Kết luận

Kết luận, đây là một chiến lược theo xu hướng rất đáng tin cậy. Nó sử dụng logic đơn giản của VWAP và EMA để xác định hướng xu hướng. Khi cả hai chỉ số cung cấp các tín hiệu nhất quán, tỷ lệ thành công rất cao. Bằng cách đặt TP / SL thích hợp, rủi ro có thể được kiểm soát. Vẫn còn nhiều cách (tối ưu hóa tham số, thêm chỉ số, TP / SL thích nghi, kích thước vị trí vv) để cải thiện thêm chiến lược này và làm cho hiệu suất của nó thậm chí còn tốt hơn.


/*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")

Thêm nữa