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


Ngày tạo: 2023-12-27 16:49:52 sửa đổi lần cuối: 2023-12-27 16:49:52
sao chép: 3 Số nhấp chuột: 1189
1
tập trung vào
1623
Người theo dõi

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

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ố tương đối mạnh (RSI) với Fibonacci Reversal. Chiến lược này đầu tiên tính toán Fibonacci Reversal quan trọng dựa trên động thái giá trị lịch sử trong một chu kỳ nhất định, sau đó kết hợp với chỉ số RSI để xác định thị trường có đang mua quá mức hay không và phát tín hiệu giao dịch gần điểm quay trở lại.

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

Chiến lược này dựa trên các nguyên tắc sau:

  1. Sử dụng dữ liệu giá trong một chu kỳ nhất định (ví dụ như 200 K-line) để tính toán giá trung bình, chênh lệch tiêu chuẩn và điểm Fibonacci quan trọng (ví dụ như 0.764) trong chu kỳ đó;

  2. Khi giá gần với một vị trí đảo ngược lên hoặc xuống, hãy sử dụng chỉ số RSI để xác định xem khu vực đảo ngược có quá mua hay quá bán hay không;

  3. Nếu chỉ số RSI cho thấy tín hiệu quá mua hoặc quá bán, nó sẽ phát ra tín hiệu tháo hoặc tháo gần điểm quay trở lại;

  4. Cài đặt mức dừng lỗ và dừng lại, và tháo lỗ khi vượt quá giá đặt hoặc kích hoạt điều kiện dừng lỗ.

Đây là quá trình cơ bản của chiến lược để xác định thời điểm giao dịch.

Phân tích lợi thế chiến lược

So với giao dịch sử dụng 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 hai chỉ số, có thể giảm tín hiệu giả và cải thiện chất lượng tín hiệu;

  2. Các nhà phân tích kỹ thuật thường sử dụng các phương pháp phân tích kỹ thuật cổ điển để thực hiện các giao dịch đảo ngược gần các điểm quay.

  3. Thiết lập một Stop Loss Stop để có thể kiểm soát hiệu quả tổn thất tối đa của một giao dịch;

  4. Có thể tối ưu hóa thông qua tham số, điều chỉnh tham số chỉ số và thiết lập quay ngược để thích ứng với các chu kỳ và giống khác nhau.

Phân tích rủi ro chiến lược

Chiến lược này cũng có một số rủi ro cần lưu ý:

  1. Khả năng tăng trở lại sau khi bước ngoặt quan trọng đến gần không phải là 100%, cần kết hợp với sự phán đoán của các thực thể giá;

  2. RSI một chu kỳ có thể tạo ra tín hiệu sai của một đợt phục hồi chết, và có thể xem xét xác minh nhiều chu kỳ;

  3. Các điểm dừng lỗ được thiết lập quá lỏng lẻo, có thể làm tăng tổn thất;

  4. Khi giá của chỉ số dao động mạnh, dừng lỗ có thể bị phá vỡ và cần xem xét nới lỏng điểm dừng lỗ.

Các rủi ro trên có thể được kiểm soát bằng các phương pháp như điều chỉnh tham số, kết hợp các chỉ số tối ưu hóa.

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

Những nơi mà chiến lược này có thể được tối ưu hóa hơn bao gồm:

  1. Tăng cường xác thực các chỉ số giao dịch để tránh các vụ phá vỡ giả mạo ở mức thấp;

  2. Lưu ý đến các chỉ số Brin và phát ra các tín hiệu khi có sự đột phá trong hình dáng băng;

  3. Xây dựng mô hình học máy hoặc mạng thần kinh để tự động nhận diệ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 và các phương pháp khác để tự động tối ưu hóa các tham số, điều chỉnh điểm dừng lỗ.

Tóm tắt

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 RSI và Fibonacci để phán đoán. Chiến lược này kết hợp phân tích chỉ số kép với chiến lược kỹ thuật cổ điển để nâng cao chất lượng tín hiệu giao dịch với giả định kiểm soát rủi ro. Hiệu quả của chiến lược có thể được nâng cao hơn nữa khi điều chỉnh tham số và tối ưu hóa mô hình.

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