Chiến lược xu hướng RSI Alligator


Ngày tạo: 2024-01-29 14:40:07 sửa đổi lần cuối: 2024-01-29 14:40:07
sao chép: 0 Số nhấp chuột: 770
1
tập trung vào
1617
Người theo dõi

Chiến lược xu hướng RSI Alligator

Tổng quan

Chiến lược xu hướng RSI cá mập là một tập hợp các chỉ số cá mập dựa trên chỉ số RSI để đánh giá xu hướng vào và ra. Nó sử dụng ba đường trung bình - đường cá mập lên, đường răng và đường môi, xây dựng RSI với các chu kỳ khác nhau.

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

Chiến lược xu hướng RSI cá mập sử dụng chỉ số RSI để xây dựng ba đường trung bình di chuyển của chỉ số cá mập. Các thiết lập cụ thể như sau:

  • Dòng RSI trên: 5 chu kỳ
  • Dòng răng: Dòng RSI 13 chu kỳ
  • Dòng môi: Dòng RSI 34 chu kỳ

Lập luận của tín hiệu nhập là:

Tín hiệu đa đầu: làm nhiều hơn khi vắt môi trên dây răng và dây răng trên cao hơn dây răng.

Tín hiệu đầu trống: Hàm trống khi đường môi đi qua dưới đường răng và đường lên dưới đường răng.

Chiến lược này đặt ra cả điều kiện dừng lỗ và dừng lại:

  • Lệnh dừng là 10% giá nhập
  • Stop Stop được thiết lập là 90% giá nhập

Phân tích lợi thế

Chiến lược RSI Catch Trends có những lợi thế sau:

  1. Sử dụng chỉ số cá mập để đánh giá xu hướng, có thể lọc hiệu quả tiếng ồn thị trường, khóa xu hướng chính
  2. Kết hợp với RSI đa chu kỳ, tránh phá vỡ giả, tăng độ tin cậy của tín hiệu
  3. Thiết lập các điều kiện dừng lỗ hợp lý để hỗ trợ chiến lược hoạt động ổn định
  4. Ý tưởng chiến lược rõ ràng, dễ hiểu, thiết lập tham số đơn giản, dễ dàng điều hành ổ cứng
  5. Có thể thực hiện nhiều công việc đồng thời, cân bằng cả hai hướng của xu hướng, linh hoạt

Phân tích rủi ro

RSI có những rủi ro sau đây:

  1. Sự giao thoa của dây răng và dây môi có thể dẫn đến phá vỡ giả, dẫn đến tổn thất không cần thiết. Các tham số chu kỳ có thể được điều chỉnh thích hợp để giảm khả năng phá vỡ giả.

  2. Cài đặt dừng lỗ có thể quá quyết liệt, có nhiều khả năng dừng lỗ không cần thiết. Bạn có thể nới lỏng phạm vi dừng lỗ một cách thích hợp, hoặc thêm các điều kiện khác như là điều kiện tiên quyết để kích hoạt dừng lỗ.

  3. Nếu tình hình nghiêm trọng, bị hư hỏng hoặc không có hiệu quả như bảo lãnh. Trong trường hợp này, cần can thiệp bằng tay và dừng thiệt hại kịp thời.

  4. Khi chuyển đổi đa không gian thường xuyên, áp lực chi phí giao dịch cao hơn. Các điều kiện nhập cảnh có thể được nới lỏng thích hợp, giảm lặp đi lặp lại không cần thiết.

Hướng tối ưu hóa

Các chiến lược RSI có thể được tối ưu hóa từ các khía cạnh sau:

  1. Tối ưu hóa các thiết lập tham số của dòng cá mập, điều chỉnh tham số chu kỳ, tìm các tham số kết hợp tốt nhất

  2. Tối ưu hóa logic điều kiện nhập, chẳng hạn như các chỉ số khối lượng giao dịch mới và các tín hiệu lọc

  3. Tối ưu hóa chiến lược dừng lỗ để phù hợp hơn với tình hình và mức bảo lãnh

  4. Tăng cơ chế xử lý các sự kiện bất ngờ, tránh phơi bày các hành vi bất thường

  5. Tăng thuật toán mở cửa, kiểm soát tỷ lệ đầu tư đơn lẻ, tránh rủi ro

Tóm tắt

Chiến lược theo dõi xu hướng cá RSI nói chung là một chiến lược theo dõi xu hướng đáng tin cậy và dễ sử dụng. Nó sử dụng chỉ số cá RSI để xác định hướng xu hướng, kết hợp với chỉ số RSI để thiết lập ngưỡng tham chiếu, có thể khóa xu hướng một cách hiệu quả và thiết lập điểm xuất phát hợp lý. Đồng thời, chính chiến lược cũng có tính linh hoạt và mở rộng mạnh mẽ, đáng để ứng dụng thực tế và tối ưu hóa sau đó.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=3
// RSI Alligator
// Forked from Author: Reza Akhavan
// Updated by Khalid Salomão

strategy("RSI Alligator Strategy", overlay=false, pyramiding=0, default_qty_type=strategy.cash, default_qty_value=25000, initial_capital=25000, commission_type=strategy.commission.percent, commission_value=0.15, slippage=3)

// === TA LOGIC ===
overBought = input(70, minval=0, maxval=100, title="Over bought")
overSold = input(30, minval=0, maxval=100, title="Over sold")
jawPeriods = input(5, minval=1, title="Jaw Periods")
jawOffset = input(0, minval=0, title="Jaw Offset")
teethPeriods = input(13, minval=1, title="Teeth Periods")
teethOffset = input(0, minval=0, title="Teeth Offset")
lipsPeriods = input(34, minval=1, title="Lips Periods")
lipsOffset = input(0, minval=0, title="Lips Offset")

jaws = rsi(close, jawPeriods)
teeth = rsi(close, teethPeriods)
lips = rsi(close, lipsPeriods)
plot(jaws, color=green, offset=jawOffset, title="Jaw")
plot(teeth, color=red, offset=teethOffset, title="Teeth")
plot(lips, color=blue, offset=lipsOffset, title="Lips")

//
// === Signal logic ===
// 
LONG_SIGNAL_BOOLEAN  = crossover(teeth, lips) and jaws > teeth
SHORT_SIGNAL_BOOLEAN = crossunder(teeth, lips) and jaws < teeth

// === INPUT BACKTEST DATE RANGE ===
strategyType = input(defval="Long Only", options=["Long & Short", "Long Only", "Short Only"])

FromMonth = input(defval = 7, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        
window()  => true

// === STRATEGY BUY / SELL ENTRIES ===

// TODO: update the placeholder LONG_SIGNAL_BOOLEAN and SHORT_SIGNAL_BOOLEAN to signal
// long and short entries
buy()  => window() and LONG_SIGNAL_BOOLEAN
sell() => window() and SHORT_SIGNAL_BOOLEAN

if buy()
    if (strategyType == "Short Only")
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long, comment="Long")

if sell()
    if (strategyType == "Long Only")
        strategy.close("Long")
    else
        strategy.entry("Short", strategy.short, comment="Short")
        

// === BACKTESTING: EXIT strategy ===
sl_inp = input(10, title='Stop Loss %', type=float)/100
tp_inp = input(90, title='Take Profit %', type=float)/100

stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)

strategy.exit("Stop Loss/Profit", "Long", stop=stop_level, limit=take_level)