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.
Các nguyên tắc chính đằng sau chiến lược này là:
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 đó;
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;
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;
Đặ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.
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:
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;
Giao dịch ở mức Fibonacci là một kỹ thuật phân tích kỹ thuật cổ điển;
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ả;
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.
Ngoài ra còn có một số rủi ro cần lưu ý cho chiến lược này:
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á;
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;
Cài đặt stop loss lỏng lẻo có thể làm tăng lỗ;
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.
Các lĩnh vực tối ưu hóa thêm bao gồm:
Thêm chỉ số âm lượng để tránh đột phá sai với âm lượng thấp;
Xem xét Bollinger Bands cho các tín hiệu từ việc phá vỡ dải;
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;
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.
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))