RSI và Chiến lược giao dịch Fibonacci Retracement

Tác giả:ChaoZhang, Ngày: 2023-12-27 16:49:52
Tags:

img

Tổng quan

Bài viết này chủ yếu mô tả một chiến lược giao dịch kết hợp Chỉ số Sức mạnh Tương đối (RSI) và các mức khôi phục Fibonacci. Chiến lược này đầu tiên tính các mức khôi phục Fibonacci chính dựa trên động lực giá lịch sử trong một khoảng thời gian nhất định, và sau đó sử dụng chỉ số RSI để đánh giá xem thị trường có bị mua quá mức hay bán quá mức gần các mức khôi phục để tạo ra các tín hiệu giao dịch.

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

Các nguyên tắc chính đằng sau chiến lược này là:

  1. Sử dụng dữ liệu giá trong một khoảng thời gian nhất định (ví dụ: 200 thanh) để tính giá trung bình, độ lệch chuẩn và mức khôi phục Fibonacci chính (ví dụ: 0,764) cho khoảng thời gian đó;

  2. Khi giá tiếp cận các mức giảm giá trên hoặc dưới, sử dụng chỉ số RSI để xác định xem có tình trạng mua quá mức hoặc bán quá mức xung quanh các mức đó hay không;

  3. Nếu chỉ số RSI cho thấy tín hiệu mua quá mức hoặc bán quá mức, các tín hiệu dài hoặc ngắn sẽ được tạo ra xung quanh các mức khôi phục;

  4. Đặt stop loss và lấy lợi nhuận để đóng các vị trí khi giá vượt quá mức đặt trước hoặc stop loss được kích hoạt.

Điều trên là quy trình làm việc cơ bản để xác định các cơ hội giao dịch trong chiến lược này.

Phân tích lợi thế

So với việc sử dụng chỉ số RSI hoặc Fibonacci một mình, chiến lược kết hợp này có những lợi thế sau:

  1. Bộ lọc chỉ số hai có thể làm giảm tín hiệu sai và cải thiện chất lượng tín hiệu;

  2. Giao dịch ở mức Fibonacci là một kỹ thuật phân tích kỹ thuật cổ điển;

  3. Với dừng lỗ và lấy lợi nhuận theo tốc độ, lỗ tối đa cho mỗi giao dịch có thể được kiểm soát hiệu quả;

  4. Các thông số có thể được tối ưu hóa cho các giai đoạn và sản phẩm khác nhau.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro cần lưu ý cho chiến lược này:

  1. Khả năng đảo ngược ở các mức chính không phải là 100%, cần phải kết hợp với hành động giá;

  2. RSI thời gian duy nhất có thể tạo ra tín hiệu sai từ cú nhảy của mèo chết, xem xét xác thực nhiều khung thời gian;

  3. Cài đặt stop loss lỏng lẻo có thể làm tăng lỗ;

  4. Các điểm dừng có thể được chạy qua trong các biến động giá biến động.

Những rủi ro này có thể được quản lý thông qua điều chỉnh tham số, tối ưu hóa sự kết hợp của các chỉ số v.v.

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

Các lĩnh vực tối ưu hóa thêm bao gồm:

  1. Thêm chỉ số âm lượng để tránh đột phá sai với âm lượng thấp;

  2. Xem xét Bollinger Bands cho các tín hiệu từ việc phá vỡ dải;

  3. Xây dựng các mô hình học máy để tự động phát hiện các cơ hội giao dịch chất lượng cao;

  4. Sử dụng các thuật toán di truyền để điều chỉnh tham số tự động và điều chỉnh mức dừng lỗ / lợi nhuận.

Tóm lại

Bài viết này mô tả chi tiết một chiến lược giao dịch định lượng kết hợp phân tích RSI và phân tích khôi phục Fibonacci. Bằng cách kết hợp phân tích chỉ số kép và các chiến lược kỹ thuật cổ điển, chiến lược cải thiện chất lượng tín hiệu dưới rủi ro được quản lý.


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

//@version=4
strategy(title="Gab Fib  + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4)

// Inputs
timeFilter = year >= 2000
    // Stop Loss 
stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100
    // RSI Inputs
len = input(title="[RSI] Length", minval=0, step=1, defval=14)
overSold = input(title="[RSI] Over Sold %", defval=30)
overBought = input(title="[RSI] Over Bought %", defval=70)
    // Fibonacci Levels
length = input(title="[Fibonacci] Length", defval=200, minval=1)
src = input(hlc3, title="[Fibonacci] Source")
mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50)
level = input(title="[Fibonacci] Level", defval=764)


// Calculate Fibonacci
basis = vwma(src, length)
dev = mult * stdev(src, length)
fu764= basis + (0.001*level*dev)
fu1= basis + (1*dev)
fd764= basis - (0.001*level*dev)
fd1= basis - (1*dev)

// Calculate RSI
vrsi = rsi(close, len)

// Calculate the Targets
targetUp = fd764
targetDown = fu764
    // Actual Targets
bought = strategy.position_size[0] > strategy.position_size[1]
exit_long = valuewhen(bought, targetUp, 0)
sold = strategy.position_size[0] < strategy.position_size[1]
exit_short = valuewhen(sold, targetDown, 0)

// Calculate Stop Losses
sl_long = close * (1-stop_loss)
sl_short = close * (1+stop_loss)


// Conditions to Open Trades
openLong = low < fd1 and crossover(vrsi[1], overSold)
openShort = high > fu1 and crossunder(vrsi[1], overBought)

// Conditions to Close Trades
closeLong = high > exit_long or sl_long
closeShort = low < exit_short or sl_short


//Rounding to MinTick value
roundtargetUp = round_to_mintick(targetUp)
roundtargetDown = round_to_mintick(targetDown)
roundsllong = round_to_mintick(sl_long)
roundslshort = round_to_mintick(sl_short)

// Plots
plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis")
plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target")
plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top")
plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target")
plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom")


// Strategy Orders
if timeFilter
    // Entry Orders
    strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong))
    strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close,  alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort))

    // Exit Orders
    strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker))
    strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))

Thêm nữa