Chiến lược dừng lỗ năng động thích nghi với biến động ATR

Tác giả:ChaoZhang, Ngày: 2023-10-09 15:30:29
Tags:

Tổng quan

Chiến lược này kết hợp các chỉ số động lực Stochastic K và chỉ số biến động ATR để điều chỉnh động đường dừng lỗ và đường nhập dựa trên các giá trị ATR, thực hiện ý tưởng tự động điều chỉnh đường dừng lỗ và đường nhập theo biến động thị trường.

Chiến lược logic

  1. Tính toán giá trị K sma ((stoch ((close, high, low, len), smoothK) với chiều dài len, đại diện cho giá trị Stochastic K.

  2. Tính toán giá trị ATR atr ((len) với chiều dài len.

  3. Chế độ stop loss line plot ((rsi(atr, len) +lowLine,..., title = low line) và entry line plot ((rsi(atr, len) *-1+100-lowLine,..., title = up line) dựa trên giá trị ATR.

  4. Xác định tín hiệu nhập và xuất khi giá trị K vượt qua đường nhập (k, đường lên) và đường dừng (k, đường xuống).

  5. Màu nền biểu đồ cho tín hiệu mua và bán.

  6. Thực hiện các giao dịch và đặt dừng lỗ khi các tín hiệu trên được kích hoạt.

Phân tích lợi thế

  1. Chiến lược điều chỉnh động các đường dừng lỗ và đường nhập vào dựa trên biến động thị trường ATR, tự động điều chỉnh rủi ro dừng lỗ theo biến động thị trường.

  2. Khi biến động thị trường cao, khoảng cách giữa các đường dừng lỗ và đường vào tăng lên để tránh bị dừng bởi biến động.

  3. Khi biến động thị trường thấp, khoảng cách giữa đường dừng lỗ và đường vào thu hẹp lại để dừng lỗ kịp thời.

  4. Sử dụng các giá trị K của chỉ số động lực để xác định các bước vào và ra. Các giá trị K phản ánh tốc độ thay đổi giá và điểm chuyển đổi.

  5. Kết hợp các chỉ số động lực và biến động có thể nắm bắt xu hướng và tự động điều chỉnh rủi ro dựa trên biến động.

Phân tích rủi ro

  1. Các giá trị K có thể có sự đột phá sai, gây ra các tín hiệu giao dịch không cần thiết.

  2. Nếu tham số len ATR quá lớn, khoảng cách giữa các đường stop loss và đường entry trở nên quá lớn với rủi ro cao.

  3. Đơn giản là không thể xác định được vị trí stop loss phù hợp hay không và không thể kiểm soát rủi ro stop loss đơn.

  4. Các tín hiệu chiến lược thường xuyên dẫn đến chi phí giao dịch cao.

Hướng dẫn tối ưu hóa

  1. Kiểm tra và điều chỉnh tham số smoothK để tìm kết hợp các tham số giá trị K mịn tối ưu.

  2. Kiểm tra các giá trị khác nhau của tham số ATR len để xác định các tham số ATR thích hợp.

  3. Tối ưu hóa tham số dòng đầu vào lowLine để tìm các tham số tối ưu để kiểm soát tần suất giao dịch.

  4. Xem xét kết hợp các chỉ số khác để lọc các tín hiệu nhập cảnh và tránh đột phá sai, chẳng hạn như chỉ số khối lượng giao dịch, chỉ số KDJ, v.v.

  5. Xem xét tối ưu hóa các phương pháp dừng lỗ, cải thiện đến mức dừng lỗ dự kiến để kiểm soát tích cực rủi ro dừng lỗ.

Tóm lại

Chiến lược này thực hiện ý tưởng điều chỉnh stop loss và entry line năng động dựa trên các giá trị của chỉ số động lực K và chỉ số biến động ATR. Nó có thể nắm bắt xu hướng và tự động điều chỉnh rủi ro dựa trên biến động, điều này rất sáng tạo và thực tế.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Stoch + ATR", overlay=false, pyramiding = 0, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0.0454, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

len = input(34, minval=1, title="Length for Main Stochastic & ATR") 
smoothK = input(2, minval=1, title="SmoothK for Main Stochastic")
lowLine = input(10, minval=-50, maxval=50, title="Multiplier for up/low lines")

//Stoch formula
k = sma(stoch(close, high, low, len), smoothK)
plot(k, color=aqua, title = "Stoch")

//len=input
atr=atr(len)
plot(rsi(atr, len)+lowLine , color=red,linewidth=2, title = "low line")
plot(rsi(atr, len)*-1+100-lowLine, color=lime,linewidth=2, title = "up line")

aboveLine = crossunder(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine = crossover(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

aboveLine2 = crossover(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine2 = crossunder(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

skip=(aboveLine2==1 or belowLine2==1) and (aboveLine==1 or belowLine==1)? 1 : 0

//BackGroound Color Plots
plotchar(belowLine==1 and skip==0, title="Buy Signal", char='B', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine==1 and skip==0, title="Sell Signal", char='S', location=location.top, color=white, transp=0, offset=0)
plotchar(belowLine2==1 and skip==0, title="Close Signal", char='C', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine2==1 and skip==0, title="Close Signal", char='C', location=location.top, color=white, transp=0, offset=0)

bgcolor(aboveLine==1 ? red : na, transp=30, title = "sell signal")
bgcolor(belowLine==1 ? lime : na, transp=30, title = "buy signal")

bgcolor(aboveLine2==1 ? lime : na, transp=80, title = "close short")
bgcolor(belowLine2==1 ? red : na, transp=80, title = "close long")

bgcolor(skip==1 ? black : na, transp=0, title = "skip signal")

//strategy
longCondition = belowLine==1
shortCondition = aboveLine==1

strategy.entry("BUY", strategy.long, when = longCondition)
strategy.entry("SELL", strategy.short, when = shortCondition)
strategy.cancel_all(when = skip==1)





Thêm nữa