Chiến lược RSI MACD Moving Average được cải thiện

Tác giả:ChaoZhang, Ngày: 2024-01-05 16:11:23
Tags:

img

Tổng quan

Đây là một chiến lược kết hợp sử dụng chỉ số RSI, MACD và Moving Averages. Nó kết hợp các tín hiệu mua quá mức / bán quá mức từ chỉ số RSI, độ nhạy của MACD và hiệu ứng chỉ số của chỉ số trung bình động khi xác định các điểm nhập cảnh.

Chiến lược logic

Chiến lược chủ yếu đánh giá bốn điều kiện sau đây để quyết định tham gia dài hạn:

  1. Đường biểu đồ MACD lớn hơn mức nhập cảnh dài được thiết lập;
  2. Chỉ số RSI trên 50, cho thấy tình trạng mua quá mức;
  3. EMA ngắn hạn vượt qua EMA dài hạn, tạo thành đường chéo vàng;
  4. Giá đóng phá vỡ EMA dài hạn và cao hơn EMA dài hạn cộng với phạm vi dừng lỗ ATR.

Khi đáp ứng hai điều kiện thoát sau đây, chiến lược sẽ đóng các vị trí để dừng lỗ:

  1. Đường biểu đồ MACD thấp hơn mức dừng lỗ đã thiết lập;
  2. EMA ngắn hạn vượt qua dưới EMA dài hạn, tạo thành đường chéo chết.

Do đó, chiến lược kịp thời ngăn chặn tổn thất và tránh tổn thất lớn khi lấy lợi nhuận hoặc khôi phục.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này nằm ở việc sử dụng kết hợp các chỉ số, cho phép tận dụng đầy đủ các ưu điểm của mỗi chỉ số:

  1. Việc áp dụng chỉ số RSI tránh mất phí giao dịch do mở nhiều lần các vị trí trên các thị trường giới hạn phạm vi.

  2. Độ nhạy của chỉ số biểu đồ MACD đảm bảo nắm bắt kịp thời các điểm uốn cong.

  3. Mức trung bình động lọc tiếng ồn thị trường ngắn hạn và tạo ra hiệu ứng chỉ số đầy đủ.

Rủi ro và giải pháp

Những rủi ro chính của chiến lược này bao gồm:

  1. Rủi ro khôi phục cao. Rủi ro lớn nhất của trung bình động như các chiến lược theo xu hướng là sự rút lui lớn do đảo ngược xu hướng. Điều này có thể được kiểm soát tích cực bằng cách định kích thước vị trí, dừng lỗ v.v.

  2. Khó khăn trong tối ưu hóa tham số. Các chiến lược kết hợp nhiều chỉ số có khó khăn cao hơn trong việc thiết lập và tối ưu hóa tham số. Các phương pháp như đi trước, thuật toán di truyền có thể được áp dụng cho các tham số tối ưu hóa.

Định hướng nâng cao

Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Tăng các bộ lọc bổ sung để tránh thêm các tín hiệu sai, ví dụ: kết hợp với các chỉ số khối lượng, biến động vv.

  2. Phân biệt tham số thử nghiệm phù hợp với nhiều sản phẩm hơn. Điều chỉnh các tham số để thích nghi với nhiều giống hơn.

  3. Tối ưu hóa các thiết lập tham số trung bình động. Kiểm tra sự khác biệt của các tham số chiều dài khác nhau.

  4. Nghiên cứu các đường trung bình chuyển động thích nghi, chuyển đổi các bộ tham số khác nhau dựa trên chế độ thị trường.

Kết luận

Tóm lại, chiến lược này là một phiên bản tối ưu hóa điển hình của chiến lược trung bình động và theo xu hướng. Nó hấp thụ điểm mạnh của các chỉ số chính như MACD và RSI trong các khía cạnh của thời gian nhập và dừng lỗ.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)

// Inputs
src = input(close, title="RSI Source")

// RSI Settings
lengthRSI = input.int(14, minval=1)

// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")

// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)

// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")

// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")

atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")

// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)

// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)

// Calculate ATR
atr = ta.atr(atrLength)

// Variables
var bool canEnterLong = na

// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr

// Entries and Exits
if hist < exitLevel and emaShort < emaLong
    canEnterLong := true
    strategy.close("Long")
    
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
    strategy.entry("Long", strategy.long)
    canEnterLong := false
    lastEntryPrice := close
if lastEntryPrice < close
    lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)

// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
    last_buy = strategy.opentrades[0]
    if (close < stopLossLevel)
        strategy.close("Long", comment="Stop Loss Triggered")
    if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
        strategy.close("Long", comment="Take Profit Triggered")

Thêm nữa