RSI và chiến lược thoát trung bình động

Tác giả:ChaoZhang, Ngày: 2024-01-24 14:31:01
Tags:

img

Tổng quan

Chiến lược RSI và Moving Average Breakout là một chiến lược định lượng sử dụng cả chỉ số RSI và đường trung bình chuyển động để xác định cơ hội giao dịch. Ý tưởng cốt lõi của chiến lược này là tìm kiếm các điểm đột phá tốt hơn theo hướng của đường trung bình chuyển động khi RSI đạt mức mua quá mức hoặc bán quá mức.

Chiến lược logic

  1. Tính toán chỉ số RSI và đường trung bình động đơn giản dựa trên các tham số được xác định bởi người dùng.

  2. Khi chỉ số RSI vượt qua đường bán quá mức (thất định 30), một tín hiệu dài được tạo ra nếu giá thấp hơn Trung bình Di chuyển LONG.

  3. Khi RSI vượt qua dưới đường mua quá mức (mất mặc định 70), một tín hiệu ngắn được tạo ra nếu giá vượt trên Đường trung bình di chuyển thoát SHORT.

  4. Người dùng có thể chọn lọc tín hiệu dựa trên đường trung bình động xu hướng.

  5. Các lối ra được xác định bởi các đường thoát LONG và SHORT Moving Average.

Phân tích lợi thế

  1. Thiết kế chỉ số kép cải thiện độ chính xác bằng cách kết hợp hai yếu tố thị trường chính.

  2. Sử dụng đặc điểm đảo ngược trung bình của RSI một cách hiệu quả để xác định các điểm chuyển đổi.

  3. Bộ lọc bổ sung với Moving Averages tăng độ nghiêm ngặt logic để tránh theo đuổi đỉnh và đáy.

  4. Các tham số có thể tùy chỉnh cho phép tối ưu hóa trên các sản phẩm và khung thời gian khác nhau.

  5. Lý thuyết đơn giản làm cho nó dễ hiểu và sửa đổi.

Phân tích rủi ro

  1. Bị chọc đòn là phổ biến với RSI, chỉ số mật độ có thể giúp.

  2. RSI có xu hướng thất bại trên các khung thời gian lớn hơn, các thông số có thể được điều chỉnh hoặc các chỉ số bổ sung có thể hỗ trợ.

  3. Moving Averages có hiệu ứng chậm, chiều dài có thể được rút ngắn hoặc các chỉ số như MACD có thể hỗ trợ.

  4. Cần đưa ra nhiều chỉ số hơn để xác nhận tín hiệu do logic cơ bản.

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

  1. Tối ưu hóa các thông số RSI hoặc giới thiệu chỉ số mật độ để giảm tín hiệu sai.

  2. Kết hợp các chỉ số xu hướng và biến động như DMI và BOLL để xác định xu hướng và hỗ trợ.

  3. Đưa ra MACD để thay thế hoặc bổ sung cho các phán đoán về Moving Average.

  4. Thêm thêm các điều kiện logic vào tín hiệu vào để tránh các sự đột phá không thuận lợi.

Kết luận

Chiến lược RSI và Moving Average Breakout kết hợp việc phát hiện RSI quá mua và xác định xu hướng của Moving Averages để tận dụng cơ hội đảo ngược trung bình về mặt lý thuyết. Chiến lược này trực quan và dễ sử dụng cho người mới bắt đầu, và có thể được tối ưu hóa trên các sản phẩm khác nhau, làm cho nó trở thành một chiến lược định lượng bắt đầu được khuyến cáo. Có thể giới thiệu nhiều chỉ số phụ trợ hơn để xác nhận thêm các tín hiệu và cải thiện lợi nhuận.


/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-23 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Global Market Signals: RSI Strategy.
//@version=4
strategy("GMS: RSI Strategy", overlay=true)

LongShort = input(title="Long Only or Short Only or Both?", type=input.string, defval="Both", options=["Both", "Long Only", "Short Only"])
RSILength = input(title="RSI Length", type = input.integer ,defval=14)
RSIUpper = input(title="Upper Threshold", type = input.float ,defval=70)
RSILower = input(title="Lower Threshold", type = input.float ,defval=30)
LongExit = input(title="Long Exit SMA Length", type = input.integer ,defval=5)
ShortExit = input(title="Short Exit SMA Length", type = input.integer ,defval=5)
AboveBelow = input(title="Trend SMA Filter?", type=input.string, defval="Above", options=["Above", "Below", "Don't Include"])
TrendLength = input(title="Trend SMA Length", type = input.integer ,defval=200)


//Long Side

if LongShort =="Long Only" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
    
//SHORT SIDE

if LongShort =="Short Only" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
    
    
    
    
    
   





Thêm nữa