Chiến lược đột phá phạm vi MACD Stochastics

Tác giả:ChaoZhang, Ngày: 2023-12-11 11:48:27
Tags:

img

Tổng quan

Chiến lược đột phá phạm vi MACD Stochastics kết hợp các chỉ số MACD và Stochastics thành một chiến lược giao dịch định lượng.

Khi thực hiện các vị trí, chiến lược này xem xét các tín hiệu từ cả MACD và Stochastics để cải thiện chất lượng các mục nhập. Ngoài ra, các điểm dừng lỗ và lấy lợi nhuận được đặt trước có thể kiểm soát rủi ro một cách hiệu quả.

Chiến lược logic

Chiến lược đột phá phạm vi MACD Stochastics chủ yếu dựa trên các nguyên tắc sau:

  1. Chỉ số MACD có thể xác định hiệu quả hướng và động lực của xu hướng giá
  2. Chỉ số chứng khoán có thể phát hiện các điều kiện mua quá mức hoặc bán quá mức của một cổ phiếu
  3. Khi giá cổ phiếu đã dao động trong một khoảng thời gian, một động thái theo hướng đáng kể sau khi phá vỡ phạm vi trước đây có thể xảy ra
  4. Kết hợp các tín hiệu từ MACD và Stochastics về các đột phá phạm vi cho phép nhập vào kịp thời và cải thiện chất lượng

Cụ thể, chiến lược sử dụng đường MACDDIFF vượt qua đường DEA để xác định tín hiệu xu hướng tăng hoặc giảm. Khi DIFF vượt qua DEA lên, nó tạo ra tín hiệu tăng và ngược lại.

Trong khi đó, các đường chéo giữa đường K và đường D của Stochastics xung quanh các khu vực mua quá mức / bán quá mức (thất định 30 và 70) cũng tạo ra các tín hiệu giao dịch.

Khi MACD và Stochastics đưa ra các tín hiệu phù hợp, chiến lược sẽ có vị trí.

Sau khi nhập, điểm dừng lỗ và lấy lợi nhuận được thiết lập để kiểm soát hợp lý lỗ giao dịch duy nhất và khóa lợi nhuận.

Điểm mạnh

Chiến lược đột phá phạm vi MACD Stochastics có những điểm mạnh sau:

  1. Kết hợp các chỉ số cải thiện chất lượng tín hiệu

    Sử dụng cả MACD và Stochastics lọc ra một số tín hiệu giả và cho phép chất lượng đầu vào tốt hơn.

  2. Khám phá các động thái phá vỡ và giao dịch xu hướng

    Chiến lược này chuyên trong việc bắt được những động thái đột phá quan trọng sau khi dao động. Những động thái này có xu hướng rất lớn.

  3. Cơ chế dừng lỗ / lấy lợi nhuận tối ưu hóa kiểm soát rủi ro hiệu quả

    Logic dừng lỗ / lấy lợi nhuận tích hợp hạn chế hợp lý tổn thất giao dịch đơn và khóa kịp thời lợi nhuận.

Rủi ro

Mặc dù được thiết kế cẩn thận, Chiến lược đột phá phạm vi MACD Stochastics có một số rủi ro vốn có:

  1. Thiếu thời gian nhập cảnh hoàn hảo

    Sự đột phá sai thường xảy ra trước khi sự đột phá hợp lệ xảy ra. Thời gian nhập cảnh kém tối ưu có thể dẫn đến giá nhập cảnh tốt nhất bị bỏ lỡ.

  2. Thất bại trong việc đào thoát

    Mặc dù chuẩn bị đầy đủ được thực hiện trước khi nhập cảnh, việc phá vỡ thất bại vẫn có thể xảy ra, dẫn đến tổn thất.

  3. Tối ưu hóa tham số không chính xác

    Cài đặt tham số không phù hợp làm suy yếu hiệu suất chiến lược.

Để giải quyết các rủi ro trên, các tối ưu hóa sau đây có thể được áp dụng:

  1. Thêm các chỉ số khác vào các tín hiệu lọc

  2. Sự can thiệp thủ công để đảm bảo thoát hiệu quả

  3. Các thử nghiệm tối ưu hóa tham số đa tập hợp nghiêm ngặt

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

Vẫn còn chỗ cho việc tối ưu hóa hơn nữa của Chiến lược đột phá phạm vi MACD Stochastics:

  1. Tối ưu hóa các thông số MACD để tìm kết hợp tốt nhất

  2. Tối ưu hóa các tham số Stochastics để tìm kết hợp tốt nhất

  3. Kết hợp các chỉ số khác như KDJ, BOLL để cải thiện chất lượng nhập cảnh

  4. Kiểm tra các khoảng thời gian giữ khác nhau, tối ưu hóa dừng lỗ / lấy lợi nhuận

  5. Sự khác biệt tham số giữa các tài sản thử nghiệm

  6. giới thiệu thuật toán học máy cho tối ưu hóa tham số tự động

Kết luận

Chiến lược đột phá phạm vi của MACD Stochastics tận dụng các đột phá phạm vi bằng cách nhập dựa trên các tín hiệu được sắp xếp từ cả MACD và Stochastics. Cơ chế dừng lỗ / lấy lợi nhuận kiểm soát thêm rủi ro. Nó nhằm mục đích nắm bắt xu hướng ngắn hạn nhưng vẫn để lại chỗ cho điều chỉnh tham số và nhiều kết hợp chỉ số để có hiệu suất tốt hơn.


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

//@version=5
strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval = 180)
slow_length = input(title = "Slow Length", defval = 390)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing",  minval = 1, maxval = 500, defval = 135)
sma_source = input.string(title = "Oscillator MA Type",  defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// hline(0, "Zero Line", color = color.new(#787B86, 50))
// plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
// plot(macd,   title = "MACD",   color = #2962FF)

// plot(signal, title = "Signal", color = #FF6D00)

periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
// plot(k, title="%K", color=#2962FF)
// plot(d, title="%D", color=#FF6D00)
// h0 = hline(80, "Upper Band", color=#787B86)
// hline(50, "Middle Band", color=color.new(#787B86, 50))
// h1 = hline(20, "Lower Band", color=#787B86)
// fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")


// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01

shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01

// Calculate trading conditions
enterLong  = macd>signal and ta.crossover(k,30)
enterShort = macd<signal and ta.crossunder(k,70)

// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? longExitPrice : na,
     color=color.green, style=plot.style_circles,
     linewidth=3, title="Long Take Profit")

plot(strategy.position_size < 0 ? shortExitPrice : na,
     color=color.red, style=plot.style_circles,
     linewidth=3, title="Short Take Profit")

// Submit entry orders
if enterLong
    strategy.entry("long", strategy.long)

if enterShort
    strategy.entry("short", strategy.short)

// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0
    strategy.exit("long TP", limit=longExitPrice)

if strategy.position_size < 0
    strategy.exit("short TP", limit=shortExitPrice)

Thêm nữa