VWMA và ATR Xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-07 16:39:47
Tags:

img

Tổng quan

Chiến lược này sử dụng VWMA để xác định hướng xu hướng và thiết lập dừng lỗ với ATR để theo xu hướng.

Chiến lược logic

  1. Sử dụng VWMA để xác định hướng xu hướng. Đi dài khi giá trên VWMA, đi ngắn khi giá dưới VWMA.

  2. Thêm bộ lọc dao động RSI để tránh tín hiệu đột phá sai. Chỉ lấy tín hiệu dài khi RSI trên 30.

  3. Sử dụng ATR để tính toán đường dừng lỗ. Chiều dài ATR được đặt bằng VWMA, nhân là 3.5.

  4. Các ATR nhân điều khiển sự chặt chẽ của các đường dừng lỗ. nhân lớn hơn có nghĩa là cập nhật ít thường xuyên hơn, mà là tốt hơn để theo dõi xu hướng.

  5. Kích thước vị trí được tính dựa trên vốn chủ sở hữu tài khoản và tỷ lệ dừng lỗ.

  6. Ra khỏi vị trí dài khi giá phá vỡ dưới đường dừng lỗ.

Ưu điểm

  1. Sử dụng VWMA để xác định xu hướng nắm bắt các cơ hội xu hướng liên tục.

  2. Bộ lọc RSI tránh một số tín hiệu sai.

  3. ATR trailing stop theo xu hướng và tránh bị dừng lại bởi sự đảo ngược.

  4. Định giá vị trí dựa trên vốn chủ sở hữu tài khoản và dừng lỗ có lợi cho quản lý rủi ro.

Rủi ro

  1. Mức lỗ tiềm năng tại các điểm chuyển hướng nên giảm kích thước vị trí để hạn chế lỗ.

  2. Cài đặt tham số ATR không chính xác dẫn đến đường dừng mất mát quá chật hoặc lỏng lẻo.

  3. Sự đảo ngược xu hướng nhanh chóng có thể gây ra sự chậm trễ cập nhật dừng lỗ, làm tăng lỗ.

  4. Trong môi trường biến động thấp, giảm kích thước vị trí và tăng tần suất cập nhật dừng lỗ.

Tăng cường

  1. Kiểm tra các kết hợp tham số VWMA khác nhau để tìm các tham số tín hiệu tối ưu.

  2. Kiểm tra các thiết lập RSI khác như đường mua quá mức / bán quá mức.

  3. Kiểm tra nhân ATR để tìm sự cân bằng tối ưu giữa khả năng rút và theo dõi.

  4. Thêm các bộ lọc khác như MACD, KD để cải thiện chất lượng tín hiệu.

  5. Tối ưu hóa kích thước vị trí và tỷ lệ dừng lỗ dựa trên biến động thị trường.

Tóm lại

Chiến lược này có xu hướng theo xu hướng tổng thể và bắt được xu hướng giá rõ ràng tốt. Nó có lợi thế trong xác định xu hướng, lọc tín hiệu, dừng lỗ, vv. Nó cũng có rủi ro trong đảo ngược xu hướng. Các thông số điều chỉnh tinh tế và kích thước vị trí có thể dẫn đến hiệu suất tốt hơn.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-10-13 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/
// © mohanee

//@version=4
//strategy("", overlay=true)
strategy(title="VWMA_withATRstops_strategy V2", overlay=true, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

float xATRTrailingStop=na
int pos=na

vwmalength = input(33, title="VWMA Length", minval=1, maxval=365)
//vwmalength2 = input(9, title="VWAM Short Term Length", minval=1, maxval=365)
nATRPeriod = input(33, title="ATR length", minval=1, maxval=365)
nATRMultip = input(3.5, title="ATR Multiplier")

rsiofVwmaLength=input(14, title="RSI of VWMA Length")

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)

vwmaVal=vwma(close, vwmalength)
//vwmaVal2=vwma(close, vwmalength2)
//maVal=sma(close, vwmalength)

plot(vwmaVal, color=color.orange, linewidth=2,  title="VWMA")
//plot(vwmaVal2, color=color.blue, title="VWMA Short Term")
//plot(maVal, color=color.blue, title="MA")

//rsi of vwma Longterm
rsiofVwmaVal=rsi(vwmaVal,rsiofVwmaLength)

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop:= iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos:=	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 	    iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

color1 = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

//plot(xATRTrailingStop, color=color1, title="ATR Trailing Stop")

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


//Long Entry
//strategy.entry(id="VWMA LE", long=true, qty=qty1, when= close >vwmaVal and open>vwmaVal and close>open and close > xATRTrailingStop and xATRTrailingStop>  vwmaVal)

strategy.entry(id="VWMA LE", long=true, qty=qty1, when= rsiofVwmaVal>=30 and  close>open and close>vwmaVal and pos == 1 )    ///pos == 1 means ATRStop line is green    
//vwmaVal2>vwmaVal and

plot(strategy.position_size>=1  ? xATRTrailingStop : na, color=color1, style=plot.style_linebr, title="ATR Trailing Stop")
bgcolor(strategy.position_size>=1 ? color.blue : na )

//Exit
strategy.close(id="VWMA LE",  when= strategy.position_size>=1 and crossunder(close, xATRTrailingStop)  )
//strategy.close(id="VWMA LE",  when= strategy.position_size>=1 and close<vwmaVal and open<vwmaVal and close<open )

Thêm nữa