Kase Dynamic Stop Loss Strategy

Tác giả:ChaoZhang, Ngày: 2023-09-13 14:08:47
Tags:

Chiến lược này dựa trên phương pháp dừng lỗ động của ông Kase, tính toán phạm vi động của giá để tìm mức dừng lỗ tối ưu và lấy mức lợi nhuận để cân bằng lợi nhuận và lỗ.

Chiến lược logic:

  1. Tính toán chỉ số phạm vi động của giá RWH và RWL.

  2. Trả ra chỉ số mức độ lệch Pk từ RWH và RWL.

  3. Khi Pk>0, tính toán stop loss dựa trên mức độ lệch. Khi Pk <0, tính toán lợi nhuận.

  4. Số lần lệch thường dao động từ 1-3 lệch chuẩn.

  5. Lấy vị trí đối lập khi giá đạt điểm dừng lỗ/lợi nhuận.

Ưu điểm:

  1. Các điểm dừng/lợi nhuận động thích nghi với sự biến động thay đổi.

  2. Các cái đệm không quá chặt cũng không quá lỏng.

  3. Cách tiếp cận toán học tránh những phán đoán cảm xúc và chủ quan.

Rủi ro:

  1. Tiến trình tính toán dừng chậm trễ, có khả năng thiếu thời điểm dừng tốt nhất.

  2. Điều chỉnh tham số cần thiết để cân bằng dừng và mục tiêu.

  3. Không có giới hạn về kích thước lỗ, rủi ro thua lỗ lớn.

Tóm lại, cách tiếp cận này có thể tối ưu hóa các điểm dừng và mục tiêu một cách thông minh ở một mức độ nào đó nhưng vẫn đòi hỏi phải kiểm tra lại mạnh mẽ. Nó cũng không thể loại bỏ hoàn toàn các rủi ro chủ quan vì vậy giao dịch thận trọng vẫn rất cần thiết.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/10/2019
//  The Kase Dev Stops system finds the optimal statistical balance between letting profits run, 
//  while cutting losses.  Kase DevStop seeks an ideal stop level by accounting for volatility (risk),
//  the variance in volatility (the change in volatility from bar to bar), and volatility skew 
//  (the propensity for volatility to occasionally spike incorrectly).
//
//  Kase Dev Stops are set at points at which there is an increasing probability of reversal against 
//  the trend being statistically significant based on the log normal shape of the range curve.  
//  Setting stops will help you take as much risk as necessary to stay in a good position, but not more.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Kase Dev Stops Backtest", overlay = true)
Length = input(30, minval=2, maxval = 100)
Level = input(title="Trade From Level", defval=4, options=[1, 2, 3, 4])
reverse = input(false, title="Trade reverse")
RWH = (high - low[Length]) / (atr(Length) * sqrt(Length))
RWL = (high[Length] - low) / (atr(Length) * sqrt(Length))
Pk = wma((RWH-RWL),3)
AVTR = sma(highest(high,2) - lowest(low,2), 20)
SD = stdev(highest(high,2) - lowest(low,2),20)
Val4 = iff(Pk>0, highest(high-AVTR-3*SD,20), lowest(low+AVTR+3*SD,20))
Val3 = iff(Pk>0, highest(high-AVTR-2*SD,20), lowest(low+AVTR+2*SD,20))
Val2 = iff(Pk>0, highest(high-AVTR-SD,20), lowest(low+AVTR+SD,20))
Val1 = iff(Pk>0, highest(high-AVTR,20), lowest(low+AVTR,20))
ResPrice = iff(Level == 4, Val4,
             iff(Level == 3, Val3,
               iff(Level == 2, Val2,
                 iff(Level == 1, Val1, Val4))))
pos = iff(close < ResPrice , -1, 1)
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa