Chiến lược bán đầu da dựa trên chỉ số RSI với Trailing Stop Loss

Tác giả:ChaoZhang, Ngày: 2023-12-12 15:46:49
Tags:

img

Tổng quan

Chiến lược này được đặt tên là Scalping Strategy dựa trên chỉ số RSI với Trailing Stop Loss. Nó sử dụng chỉ số RSI để xác định các điều kiện mua quá nhiều và bán quá nhiều, kết hợp với Moving Averages (MA) nhanh và chậm để xác định hướng xu hướng và thiết lập các điều kiện nhập cảnh. Nó cũng sử dụng cơ chế dừng lỗ theo dõi phần trăm để thoát khỏi các vị trí.

Chiến lược logic

Các tín hiệu đầu vào của chiến lược này chủ yếu được xác định bởi chỉ số RSI và giao thoa MA. Các thông số RSI được thiết lập thành 2 giai đoạn để nhanh chóng nắm bắt các tình huống mua quá mức và bán quá mức cho các cơ hội đảo ngược. MA nhanh và MA chậm được thiết lập thành 50 và 200 giai đoạn tương ứng để xác định hướng xu hướng. Cụ thể, logic đầu vào là:

Đăng nhập dài: MA nhanh vượt trên MA chậm, giá vượt trên MA chậm và RSI dưới mức bán quá mức (thất định 10%); Nhập ngắn: MA nhanh vượt dưới MA chậm, giá dưới MA chậm, và RSI trên mức mua quá mức (thất định 90%).

Ngoài ra, có một bộ lọc biến động tùy chọn trong chiến lược. Nó tính toán sự khác biệt giữa các độ dốc của MAs nhanh và chậm. Các vị trí sẽ chỉ được mở khi sự khác biệt vượt quá ngưỡng. Mục đích là tránh mở các vị trí khi không có hướng rõ ràng trong biến động thị trường.

Về phía exit, chiến lược sử dụng tỷ lệ stoploss. Dựa trên tỷ lệ phần trăm đầu vào, nó tính toán giá stop loss kết hợp với kích thước tick, để điều chỉnh stop loss một cách năng động.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Chỉ số RSI được thiết lập cho 2 giai đoạn có thể nhanh chóng nắm bắt các tình huống mua quá mức và bán quá mức cho các cơ hội đảo ngược.
  2. Các MA nhanh và chậm có thể xác định hiệu quả hướng xu hướng và các điểm chuyển hướng.
  3. Sự kết hợp của các chỉ số RSI và MA tránh sự đột phá sai.
  4. Bộ lọc biến động tránh mở các vị trí khi không có hướng rõ ràng trong thời gian biến động.
  5. Tỷ lệ phần trăm dừng lỗ có thể điều chỉnh mức dừng lỗ dựa trên biến động thị trường để kiểm soát rủi ro hiệu quả.

Phân tích rủi ro

Có một số rủi ro trong chiến lược này:

  1. Các chỉ số RSI và MA có một số hiệu ứng chậm lại, có thể bỏ lỡ một số cơ hội đảo ngược.
  2. Tỷ lệ dừng lỗ phần trăm có thể được kích hoạt khi giảm khối lượng thấp.
  3. Sự biến động giá qua đêm và trước thị trường không được xử lý hiệu quả.

Các hướng tối ưu hóa rủi ro là:

  1. Điều chỉnh tham số RSI đến 1 giai đoạn để giảm hiệu ứng chậm.
  2. Tối ưu hóa thời gian MA dựa trên các đặc điểm của biểu tượng.
  3. Điều chỉnh mức dừng lỗ tỷ lệ phần trăm để cân bằng giữa dừng lỗ và dung nạp biến động.

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

Các hướng tối ưu hóa cho chiến lược này là:

  1. Thêm các đánh giá chỉ số khác, chẳng hạn như khối lượng, để tránh các tín hiệu đột phá sai.
  2. Thêm dự đoán mô hình máy học để hỗ trợ trong việc ra quyết định.
  3. Tối ưu hóa thời gian kim tự tháp và kích thước vị trí để cải thiện lợi nhuận hơn nữa.
  4. Thiết lập các bộ lọc cho biến động giá qua đêm và trước thị trường.

Kết luận

Nói chung, đây là một xu hướng tương đối ổn định sau chiến lược. Bằng cách kết hợp hai chỉ số RSI và MA, nó đảm bảo sự ổn định nhất định trong khi nắm bắt các cơ hội đảo ngược xu hướng rõ ràng hơn. Bộ lọc biến động tránh một số rủi ro và tỷ lệ dừng lỗ cũng kiểm soát hiệu quả lỗ giao dịch duy nhất. Chiến lược này có thể được sử dụng như một chiến lược chung đa biểu tượng và cũng có thể được tối ưu hóa trên các tham số và mô hình cho các biểu tượng cụ thể để đạt được kết quả tốt hơn.


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

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")


Thêm nữa