Chiến lược dừng lỗ theo xu hướng dựa trên chỉ báo RSI


Ngày tạo: 2023-12-12 15:46:49 sửa đổi lần cuối: 2023-12-12 15:46:49
sao chép: 0 Số nhấp chuột: 1051
1
tập trung vào
1621
Người theo dõi

Chiến lược dừng lỗ theo xu hướng dựa trên chỉ báo RSI

Tổng quan

Chiến lược này được gọi là chiến lược dừng theo dõi xu hướng dựa trên chỉ số RSI. Chiến lược này sử dụng chỉ số RSI để xác định trường hợp quá mua quá bán, kết hợp với chỉ số MA nhanh và chậm để xác định hướng xu hướng, đặt điều kiện vào.

Nguyên tắc chiến lược

Chiến lược này chủ yếu sử dụng chỉ số RSI và chỉ số MA để xác định thời gian vào thị trường. Các tham số của chỉ số RSI được thiết lập là 2 chu kỳ, để xác định tình trạng quá mua quá bán.

Thêm đầu vào: Thêm đầu vào khi giá cao hơn MA chậm trên MA nhanh và RSI thấp hơn khu vực bán tháo (bằng 10%)
Bước vào đầu rỗng: Bước vào đầu rỗng dưới MA nhanh và giá thấp hơn MA chậm, đồng thời RSI cao hơn vùng mua quá mức (bước vào đầu rỗng là 90%).

Ngoài ra, chiến lược cũng thiết lập một bộ lọc tỷ lệ dao động tùy chọn. Bộ lọc này tính toán chênh lệch độ của MA một cách nhanh chóng và chỉ mở vị trí khi chênh lệch vượt quá ngưỡng thiết lập. Mục đích của nó là để tránh mở vị trí khi không có định hướng rõ ràng trong giai đoạn biến động giá.

Trên exit, chiến lược sử dụng phương thức theo dõi tỷ lệ phần trăm. Dựa trên tỷ lệ phần trăm của đầu vào, kết hợp với mỗi chênh lệch giá nhảy để tính giá dừng, thực hiện động điều chỉnh dừng.

Phân tích lợi thế

Chiến lược này có những lợi thế chính như sau:

  1. Các tham số của chỉ số RSI được thiết lập với 2 chu kỳ, có thể nhanh chóng nắm bắt tình trạng quá mua quá bán và đánh giá cơ hội đảo ngược.
  2. MA nhanh chóng và hiệu quả trong việc xác định xu hướng và điểm biến đổi.
  3. Kết hợp với RSI và MA đánh giá kép, có thể tránh phá vỡ giả.
  4. Cài đặt bộ lọc tỷ lệ dao động, có thể lọc các biến động thị trường trong thời gian không có định hướng rõ ràng.
  5. Sử dụng phương pháp theo dõi tỷ lệ phần trăm, có thể điều chỉnh mức độ dừng lỗ theo biến động của thị trường, kiểm soát rủi ro hiệu quả.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro, đặc biệt là:

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

Đối với các rủi ro trên, có thể tối ưu hóa theo các khía cạnh sau:

  1. Điều chỉnh tham số RSI, đặt thành 1 chu kỳ, có thể làm giảm độ chậm trễ.
  2. Điều chỉnh tham số chu kỳ MA theo đặc điểm của các giống khác nhau.
  3. Điều chỉnh mức độ dừng phần trăm để cân bằng giữa mức độ dừng và khả năng chịu động lực.

Hướng tối ưu hóa chiến lược

Chiến lược này có thể được tối ưu hóa bằng cách:

  1. Thêm các chỉ số khác, chẳng hạn như tăng chỉ số giao dịch, tránh phá vỡ giả.
  2. Tăng khả năng phán đoán của mô hình học máy, sử dụng kết quả dự đoán của mô hình để hỗ trợ quyết định.
  3. Tối ưu hóa số lần lợi nhuận và quản lý vị trí, tiếp tục nâng cao lợi nhuận chiến lược.
  4. Thiết lập cơ chế lọc biến động đêm và tiền biến động. Thiết lập quyết định tham gia vào ngày giao dịch tiếp theo theo mức biến động.

Tóm tắt

Chiến lược này nói chung là một chiến lược theo dõi xu hướng ổn định hơn. Nó kết hợp với phán đoán của chỉ số kép RSI và MA, đồng thời đảm bảo sự ổn định nhất định, cũng có thể bắt được cơ hội đảo ngược xu hướng rõ ràng hơn. Đồng thời, thiết lập bộ lọc tỷ lệ dao động có thể tránh một phần rủi ro, phương pháp dừng lỗ phần trăm cũng có thể kiểm soát hiệu quả tổn thất đơn.

Mã nguồn chiến lược
/*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")