Chiến lược giao dịch định lượng dựa trên đường trung bình động hàm mũ và các chỉ báo MACD


Ngày tạo: 2023-12-08 16:58:01 sửa đổi lần cuối: 2023-12-08 17:04:03
sao chép: 0 Số nhấp chuột: 464
1
tập trung vào
1235
Người theo dõi

Chiến lược giao dịch định lượng dựa trên đường trung bình động hàm mũ và các chỉ báo MACD

Tổng quan

Chiến lược này kết hợp các tín hiệu đột phá của chỉ số trung bình di chuyển và MACD, thiết lập hai chu kỳ giữ vị trí dài và ngắn, kiếm lợi nhuận bằng cách theo dõi xu hướng và giao dịch đảo ngược.

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

Chiến lược này dựa trên các nguyên tắc sau:

  1. Tính trung bình di chuyển chỉ số 200 ngày để xác định hướng của xu hướng lớn. Giá đóng cửa cao hơn trung bình là đà tăng và thấp hơn là đà giảm.

  2. Xác định chỉ số giá động trung bình dựa trên giá cao nhất, giá thấp nhất và giá đóng cửa, tính toán chênh lệch giữa giá trung bình và giá cao nhất và giá thấp nhất, xây dựng biểu đồ trụ MACD.

  3. Tính trung bình di chuyển 9 ngày của biểu đồ cột MACD, xây dựng đường tín hiệu MACD.

  4. MACD tạo ra tín hiệu mua khi nó phá vỡ đường tín hiệu từ dưới lên; tạo ra tín hiệu bán khi nó phá vỡ đường tín hiệu từ trên xuống.

  5. Các nhà phân tích đã đưa ra một số kết luận về xu hướng này, bao gồm:

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

Chiến lược này kết hợp cả xu hướng và đảo ngược, có thể theo dõi xu hướng trong thời gian dài và nắm bắt cơ hội đảo ngược trên đường ngắn, đáp ứng linh hoạt với các tình huống khác nhau trên thị trường.

Những ưu điểm cụ thể bao gồm:

  1. Sử dụng đường trung bình di chuyển 200 ngày để xác định xu hướng chính, tránh hoạt động ngược.

  2. Chỉ số MACD nhạy cảm hơn với biến động giá ngắn hạn và có thể nắm bắt cơ hội đảo ngược hiệu quả hơn.

  3. Sự kết hợp MACD dưới các thiết lập tham số khác nhau, có thể thực hiện tín hiệu giao dịch trên nhiều khung thời gian.

  4. Kết hợp với chiến lược dừng lỗ, bạn có thể kiểm soát hiệu quả tổn thất đơn lẻ.

Rủi ro chiến lược

Chiến lược này có những rủi ro:

  1. Chỉ số chu kỳ ngắn có thể có một khoảng cách thời gian khi phát ra tín hiệu giao dịch, cần đánh giá tổng hợp xu hướng lớn.

  2. MACD là một chỉ số đảo ngược, khi có tình huống kinh khủng, khả năng giải thích của chỉ số sẽ giảm.

  3. Điểm dừng bị thiết lập không đúng, có thể dừng quá sớm hoặc quá lớn.

  4. Các tín hiệu đột phá được đánh giá là quá thường xuyên, có thể tạo ra nhiều tín hiệu giả hơn.

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

  1. Tối ưu hóa các tham số MACD, điều chỉnh độ nhạy của chỉ số.

  2. Kết hợp với các chỉ số khác để đánh giá giai đoạn diễn biến, tránh theo dõi mù quáng các tín hiệu MACD.

  3. Kiểm tra và tối ưu hóa các tham số chiến lược dừng lỗ.

  4. Tăng các điều kiện lọc để tránh quá nhiều tín hiệu giả.

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

Chiến lược này có thể được tối ưu hóa theo các hướng sau:

  1. Tối ưu hóa các tham số của moving average và MACD để có được tín hiệu giao dịch hiệu quả hơn.

  2. Thêm một số chỉ số khác để tăng cường hiệu quả của chiến lược.

  3. Set up a position sizing strategy rather than fixed lots for each trade. Thiết lập một chiến lược kích thước vị trí thay vì số lượng cố định cho mỗi giao dịch.

  4. Add more advanced exit rules rather than just stop loss. Such as profit target, trailing stops etc. Thêm các quy tắc thoát cấp cao hơn, chứ không chỉ là dừng lỗ, chẳng hạn như dừng lỗ, di chuyển dừng lỗ, v.v.

  5. Backtest with more complex fee settings to better simulate real trading environoment. Kiểm tra lại với các thiết lập phí phức tạp hơn để mô phỏng tốt hơn môi trường giao dịch thực.

  6. Walk forward analysis, robustness test among multiple products to enhance reliability. Thực hiện phân tích bước tiến, kiểm tra độ bền của các sản phẩm khác nhau để nâng cao độ tin cậy.

Tóm tắt

Chiến lược này đồng thời tính đến xu hướng và giao dịch đảo ngược, chìa khóa nằm ở tính chính xác của thiết lập các tham số chỉ số và sự hiểu biết về xu hướng lớn. Bằng cách liên tục tối ưu hóa các tham số thiết lập, tăng điều kiện đợt sóng, các biện pháp khác, chiến lược có thể làm cho các tín hiệu thị trường đánh giá chính xác hơn và lợi nhuận ổn định hơn. Nhìn chung, chiến lược này có mức độ tích hợp cao và có triển vọng ứng dụng tốt.

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

//@version=4
strategy("Strategia EMA + Impulse MACD", shorttitle="EMA+IMACD", overlay=true)

// Impostazioni
ema_length = input(200, title="Periodo EMA a 200", type=input.integer)
lengthMA = input(34, title="Periodo EMA", type=input.integer)
lengthSignal = input(9, title="Periodo Signal", type=input.integer)
lengthImpulseMACD = input(12, title="Periodo Impulse MACD", type=input.integer)
lengthImpulseMACDSignal = input(9, title="Periodo Impulse MACD Signal", type=input.integer)
stopLossPeriod = input(20, title="Periodo Stop Loss", type=input.integer)

var float ema200 = na
if bar_index >= ema_length
    ema200 := ema(close, ema_length)

// Impulse MACD
var float hi = na
var float lo = na
var float mi = na
var float impulseMACD = na
var float impulseMACDSignal = na

calc_smma(src, len) =>
    var float smma = na
    if na(smma)
        smma := sma(src, len)
    else
        smma := (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ema(src, length)
    ema2 = ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

if bar_index >= lengthMA
    src = hlc3
    hi := calc_smma(high, lengthMA)
    lo := calc_smma(low, lengthMA)
    mi := calc_zlema(src, lengthMA)

    impulseMACD := (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
    impulseMACDSignal := sma(impulseMACD, lengthSignal)

// Calcolo dello stop loss
var float stopLossLong = na
var float stopLossShort = na

stopLossLong := lowest(low, stopLossPeriod)
stopLossShort := highest(high, stopLossPeriod)

// Calcolo del take profit
var float takeProfitLong = na
var float takeProfitShort = na

if not na(stopLossLong)
    takeProfitLong := close + (close - stopLossLong) * 1.5
if not na(stopLossShort)
    takeProfitShort := close - (stopLossShort - close) * 1.5

// Condizioni per aprire una posizione long
longCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close > ema200 and impulseMACD < 0 and impulseMACDSignal < 0 and crossover(impulseMACD, impulseMACDSignal)

// Condizioni per aprire una posizione short
shortCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close < ema200 and impulseMACD > 0 and impulseMACDSignal > 0 and crossunder(impulseMACD, impulseMACDSignal)

// Disegna l'EMA 200 sul grafico
plot(ema200, color=color.blue, title="EMA 200")

// Imposta lo stop loss e il take profit
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Impulse MACD
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(impulseMACD, color=color.red, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(impulseMACDSignal, color=color.blue, linewidth=2, title="ImpulseMACDSignal", style=plot.style_histogram)

// Disegna le operazioni long e short sul grafico
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, title="Long Entry")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, title="Short Entry")