RSI và EMA dựa trên xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-2-25 12:19:32
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số kỹ thuật Relative Strength Index (RSI) và Exponential Moving Average (EMA) để thực hiện một chiến lược giao dịch định lượng dựa trên xu hướng.

Chiến lược logic

Chọn chỉ số

  • EMA để xác định hướng xu hướng hiện tại. Chiến lược sử dụng EMA 20 ngày, 50 ngày và 200 ngày. Khi giá vượt quá các EMA này, xu hướng tăng được xác định.
  • Chỉ số RSI để xác định mức mua quá mức / bán quá mức. Một chỉ số RSI tiêu chuẩn 14 giai đoạn, với ngưỡng mua quá mức ở 70 và ngưỡng bán quá mức ở 30.

Quy tắc nhập cảnh

Tín hiệu bước vào dài:

  • RSI dưới mức 30, cho thấy tình trạng bán quá mức mà giá có thể phục hồi
  • Giá trên đường EMA 20 ngày, 50 ngày hoặc 200 ngày, cho thấy thị trường có xu hướng tăng

Khi cả hai tiêu chí được đáp ứng, một vị trí dài được nhập.

Quản lý rủi ro

Mức lỗ tối đa cho mỗi giao dịch được giới hạn ở 3% tổng giá trị tài khoản.

Định giá vị trí tại thời điểm nhập cảnh: Loss tối đa / (Giá nhập cảnh - Giá dừng lỗ) = Size of Position

Điều này có hiệu quả kiểm soát rủi ro theo thương mại.

Các quy tắc xuất cảnh

Các tín hiệu ra chính:

  • RSI tăng trên mức 70, giá có thể giảm do điều kiện mua quá mức
  • Giá giảm xuống dưới đường EMA 20 ngày, 50 ngày hoặc 200 ngày, đảo ngược xu hướng

Khi một trong hai tín hiệu xảy ra, vị trí được đóng.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của xu hướng theo dõi và đảo ngược trung bình. EMA xác định xu hướng tổng thể, sau đó các tín hiệu nhập cảnh xảy ra tại các khu vực đảo ngược tiềm năng, hưởng lợi từ cả xu hướng và đảo ngược cho sự ổn định. Các thông số RSI cũng có thể được tối ưu hóa cho các thị trường khác nhau, làm cho chiến lược mạnh mẽ.

Mức lỗ tối đa cố định cho mỗi giao dịch bảo vệ vốn bằng cách kiểm soát trực tiếp mức độ rủi ro giao dịch.

Phân tích rủi ro

Chiến lược này hoạt động tốt trong các thị trường xu hướng rõ ràng. Trong môi trường phức tạp và biến động, sử dụng EMA cho xu hướng có thể có những hạn chế. Ngoài ra RSI có một số hiệu ứng chậm trễ, cần xác nhận từ hành động giá thực tế.

Việc đặt dừng lỗ là rất quan trọng đối với PnL, cần thử nghiệm cẩn thận cho các thị trường khác nhau. Nếu quá rộng, lỗ đơn có thể mở rộng; nếu quá chặt, tiếng ồn có thể kích hoạt dừng không mong muốn. Kiểm tra trực tiếp là cần thiết để tối ưu hóa liên tục.

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

Kiểm tra các thông số RSI khác nhau để phù hợp với nhiều thị trường hơn. Tìm tỷ lệ kích thước giao dịch tối ưu. Thêm các chỉ số kỹ thuật khác để xây dựng các hệ thống nhập / xuất mạnh hơn. Tất cả những lựa chọn này đều đáng để khám phá.

Kết luận

Chiến lược này tích hợp các điểm mạnh của các chiến lược theo xu hướng và đảo ngược trung bình. Việc nhập vào xảy ra khi có khả năng đảo ngược trong khi xác định xu hướng lớn hơn. Tối ưu hóa RSI điều chỉnh nó theo nhiều chế độ thị trường hơn. Mức độ rủi ro thương mại cố định giữ cho hoạt động ổn định trong trung hạn đến dài hạn. Những cải tiến hơn nữa có thể được thực hiện thông qua các điều chỉnh và kiểm tra độ bền bằng cách sử dụng các thị trường và phong cách khác nhau.


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

//@version=4
strategy("Stratégie RSI et EMA avec Gestion du Risque", overlay=true)

// Paramètres de la stratégie
rsiLength = input(14, "Longueur du RSI")
rsiOverbought = input(70, "Niveau de Surachat RSI")
rsiOversold = input(30, "Niveau de Survente RSI")

// Calcul du RSI
rsiValue = rsi(close, rsiLength)

// Paramètres des EMA
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema200 = ema(close, 200)

// Paramètre du risque par trade
riskPerTrade = input(0.03, "Risque par Trade (3%)")

// Distance du stop-loss en pips (à ajuster selon votre stratégie)
stopLossPips = input(1, "Distance du Stop-Loss en pips")

// Calcul de la taille de position et du stop-loss
calculatePositionSize(entryPrice, stopLossPips) =>
    stopLossPrice = entryPrice - stopLossPips * syminfo.mintick
    riskPerTradeValue = strategy.equity * riskPerTrade
    positionSize = riskPerTradeValue / (entryPrice - stopLossPrice)
    positionSize

// Conditions d'entrée
longCondition = (rsiValue < rsiOversold) and (close > ema20 or close > ema50 or close > ema200)
if longCondition
    strategy.entry("Long", strategy.long, qty=1)

// Conditions de sortie
exitCondition = (rsiValue > rsiOverbought) or (close < ema20 or close < ema50 or close < ema200)
if exitCondition
    strategy.close("Long")

// Affichage des EMA et RSI sur le graphique
plot(ema20, color=color.red)
plot(ema50, color=color.green)
plot(ema200, color=color.blue)
hline(rsiOverbought, "Niveau de Surachat RSI", color=color.red)
hline(rsiOversold, "Niveau de Survente RSI", color=color.blue)
plot(rsiValue, "RSI", color=color.purple)

Thêm nữa