Chỉ số Động lực MACD Chiến lược kiểm tra lại

Tác giả:ChaoZhang, Ngày: 2023-09-24 13:21:54
Tags:

Tổng quan

Chiến lược này kết hợp chỉ số động lực MACD với chỉ số RSI quá mua / quá bán. Khi MACD vượt lên hoặc xuống, nó kiểm tra xem RSI cũng hoàn thành sự đảo ngược đáy / đỉnh tương ứng trong thời gian xem lại để tạo ra các tín hiệu giao dịch đáng tin cậy hơn.

Chiến lược logic

  1. Tính toán MACD DIFF, DEA và biểu đồ.

  2. Tính toán chỉ số RSI để xác định sự tăng giá bán quá mức và bán quá mức mua.

  3. Khi giao thoa tăng của MACD xảy ra, nếu RSI đã bật lại quá bán trong cửa sổ nhìn lại, tín hiệu dài được tạo ra.

  4. Đặt dừng lỗ sau khi nhập vào rủi ro kiểm soát.

Ưu điểm

  1. MACD nhạy cảm xác định sự thay đổi xu hướng. RSI đánh giá hiệu quả mức mua quá mức / bán quá mức.

  2. Yêu cầu cả tín hiệu MACD và RSI lọc ra các tín hiệu sai.

  3. Cửa sổ nhìn lại cải thiện độ tin cậy tín hiệu.

  4. Hết lỗ hỗ trợ quản lý rủi ro.

Rủi ro

  1. Sự chậm trễ của MACD và RSI có thể gây ra việc bỏ lỡ các mục nhập tối ưu.

  2. Khả năng tín hiệu hai chỉ báo thấp hơn có nghĩa là ít giao dịch hơn.

  3. Không xem xét hướng xu hướng lớn hơn có nguy cơ bị mắc kẹt.

  4. Định hướng stop loss kém có thể quá rộng hoặc quá chặt.

Các giải pháp có thể:

  1. Điều chỉnh các thông số MACD và RSI để giảm chậm trễ.

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

  3. Thêm bộ lọc xu hướng để tránh các mục chống xu hướng.

  4. Kiểm tra các thông số dừng mất mát khác nhau cho mức tối ưu.

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

  1. Kiểm tra SMA và các đường trung bình động khác.

  2. Thêm stop loss sau để dừng linh hoạt.

  3. Kết hợp sức mạnh xu hướng để đánh giá chất lượng nhập cảnh.

  4. Sử dụng máy học để dự đoán chuyển động của chỉ số.

  5. Kết hợp nhiều yếu tố để tối ưu hóa thời gian nhập cảnh.

Tóm lại

Chiến lược này lọc các tín hiệu đảo ngược đáng tin cậy bằng cách sử dụng MACD và RSI phối hợp. Logic rõ ràng và các tham số linh hoạt cho các cải tiến như lựa chọn chỉ số, bộ lọc xu hướng, kỹ thuật dừng lỗ vv để có được nhiều giao dịch hơn trong khi duy trì sự ổn định, nhưng cần tránh rủi ro tối ưu hóa quá mứ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)

Thêm nữa