Chiến lược kiểm tra ngược chỉ báo động lượng MACD


Ngày tạo: 2023-09-24 13:21:54 sửa đổi lần cuối: 2023-09-24 13:21:54
sao chép: 1 Số nhấp chuột: 796
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này kết hợp các chỉ số động lực MACD và chỉ số bán tháo RSI để xác minh xem RSI có hoàn thành sự đảo ngược chạm đáy / chạm đỉnh tương ứng khi MACD xảy ra hay không, để tạo ra tín hiệu giao dịch đáng tin cậy hơn. Đây là một trong những chiến lược đảo ngược ngắn hạn điển hình.

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

  1. Tính DIFF, DEA và cột MACD của MACD. Khi DIFF trên đi qua DEA, nó tạo ra tín hiệu Gold Fork, và khi đi qua DEA, nó tạo ra tín hiệu Dead Fork.

  2. Tính toán chỉ số RSI để xác định xem điểm đáy đã hồi phục hay đỉnh đã quay trở lại. Và thiết lập cửa sổ xem lại để xác định xem có điểm đáy hay đỉnh đã xảy ra trong giai đoạn gần đây hay không.

  3. Khi MACD Gold Forks, nếu RSI hoàn thành chạm đáy hồi phục trong cửa sổ xem lại, sẽ tạo ra tín hiệu xem nhiều. Khi MACD chết, nếu RSI hoàn thành chạm đáy quay trở lại, sẽ có tín hiệu xem không.

  4. Cài đặt điểm dừng để kiểm soát rủi ro.

Lợi thế chiến lược

  1. MACD đánh giá thời gian chuyển hướng nhạy cảm. RSI đánh giá tình trạng quá mua quá bán.

  2. Đồng thời xác nhận mã thông báo MACD và RSI, có thể lọc các tín hiệu giả.

  3. Nhìn lại cửa sổ để đánh giá độ tin cậy của tín hiệu tăng lên.

  4. Thiết lập dừng lỗ giúp quản lý rủi ro.

Rủi ro chiến lược

  1. MACD và RSI đều bị tụt hậu và có thể đã bỏ lỡ điểm xuất phát tốt nhất.

  2. Trong khi chờ đợi hai tín hiệu chỉ số xuất hiện ít có khả năng, tín hiệu ít hơn.

  3. Những người này không quan tâm đến xu hướng lớn và dễ bị lừa.

  4. Cài đặt dừng lỗ không đúng có thể quá nhẹ hoặc quá nghiêm ngặt.

Giải pháp tương ứng:

  1. Điều chỉnh các tham số MACD và RSI để giảm khả năng tụt hậu.

  2. Mở rộng phạm vi hiệu quả của chỉ số để cung cấp nhiều tín hiệu hơn.

  3. Thêm bộ lọc xu hướng để tránh sự gia nhập ngược.

  4. Kiểm tra các thiết lập parameter dừng khác nhau để tìm ra ưu điểm.

Hướng tối ưu hóa chiến lược

  1. Kiểm tra hiệu quả của các đường trung bình khác như SMA.

  2. Tăng mức dừng di động để giảm lỗ linh hoạt hơn.

  3. Thêm một số chỉ số xu hướng để đánh giá mức độ tốt và thấp của việc nhập học.

  4. Giới thiệu các chỉ số dự đoán học máy.

  5. Lựa chọn thời gian nhập học được tối ưu hóa với nhiều yếu tố khác.

Tóm tắt

Chiến lược này sử dụng sự kết hợp của hai chỉ số MACD và RSI để tham gia sau khi chọn ra tín hiệu đảo ngược đáng tin cậy. Chiến lược có ý tưởng rõ ràng, điều chỉnh tham số linh hoạt, có thể mở rộng từ lựa chọn chỉ số, phán đoán xu hướng, cách dừng lỗ, v.v., để có được nhiều cơ hội giao dịch hơn khi duy trì nền tảng ổn định.

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

//@version=5
//based on Range Strat - MACD/RSI 
// strategy("MACD/RSI - edited", 
//      overlay=true,
//      default_qty_type=strategy.percent_of_equity,
//      default_qty_value=10, precision=2, initial_capital=100000,
//      pyramiding=2,
//      commission_value=0.05)

//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true

// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")

// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed


coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)

// MACD Input Settings
macdsrc = input(title="MACD Source", defval=close, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")


// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal

MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)

// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01

// Calculating Stop Loss
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)



// Strategy Entry
if (not na(vrsi))
	if (inDateRange and MACDcrossover and coCheck)
		strategy.entry("LONG", strategy.long, comment="LONG")
	if (inDateRange and MACDcrossunder and cuCheck)
		strategy.entry("SHORT", strategy.short, comment="SHORT")

// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
    strategy.exit(id="SHORT STOP", stop=shortStopPrice)