Chiến lược dựa trên đường trung bình di chuyển biểu thức và chỉ số MACD

Tác giả:ChaoZhang, Ngày: 2023-12-08 16:58:01
Tags:

img

Tổng quan

Chiến lược này kết hợp các tín hiệu đột phá từ chỉ số trung bình chuyển động theo cấp số và chỉ số MACD, với cả hai thời gian giữ dài và ngắn, để thực hiện lợi nhuận thông qua giao dịch theo xu hướng và đảo ngược trung bình.

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

Chiến lược này chủ yếu dựa trên:

  1. Tính toán EMA 200 ngày để xác định hướng xu hướng chính. Giá đóng trên 200-EMA cho thấy xu hướng tăng, trong khi dưới đây cho thấy xu hướng giảm.

  2. Tính toán EMA dựa trên giá trung bình của giá cao nhất, thấp nhất và giá đóng cửa, sau đó lấy sự khác biệt giữa EMA và giá cao nhất / thấp nhất để xây dựng biểu đồ MACD.

  3. Tính toán MA 9 ngày của biểu đồ MACD để xây dựng đường tín hiệu MACD.

  4. Một tín hiệu mua được tạo ra khi MACD vượt qua trên đường tín hiệu, trong khi tín hiệu bán khi MACD vượt qua dưới đường tín hiệu.

  5. Kết hợp phân tích các xu hướng chính để xác định xem thị trường đang ở đầu một xu hướng mới hay chỉ là một sự đảo ngược ngắn hạn.

Ưu điểm

Chiến lược này kết hợp cả việc theo xu hướng và giao dịch đảo ngược trung bình, có thể theo dõi xu hướng dài hạn và nắm bắt các cơ hội đảo ngược ngắn hạn để đối phó với các điều kiện thị trường khác nhau.

Những lợi thế chính bao gồm:

  1. EMA 200 ngày xác định hướng xu hướng chính, tránh giao dịch chống lại xu hướng.

  2. Chỉ số MACD nhạy cảm với những thay đổi giá ngắn hạn và có thể bắt được các tín hiệu đảo ngược có lợi nhuận.

  3. Các thông số khác nhau cho các thành phần MACD có thể tạo ra các tín hiệu giao dịch trên các khung thời gian.

  4. Tích hợp các chiến lược dừng lỗ để kiểm soát hiệu quả lỗ giao dịch duy nhất.

Rủi ro

Các rủi ro chính bao gồm:

  1. Có thể có sự chậm trễ giữa các tín hiệu giao dịch từ các chỉ số dài hạn và ngắn hạn.

  2. MACD là chỉ số đảo ngược trung bình có thể hoạt động kém hơn trong thời gian xu hướng mạnh.

  3. Đặt stop loss không đúng có thể dẫn đến kích hoạt stop loss sớm hoặc mất quá lớn.

  4. Các tín hiệu thoát quá thường xuyên có thể đưa ra nhiều tín hiệu sai hơn.

Giải pháp:

  1. Tối ưu hóa các thông số MACD để điều chỉnh độ nhạy của chỉ số.

  2. Kết hợp các chỉ số khác để xác định điều kiện thị trường, tránh mù quáng theo tín hiệu MACD.

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

  4. Thêm bộ lọc để giảm tín hiệu sai.

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

Chiến lược có thể được tối ưu hóa thông qua:

  1. Tối ưu hóa các tham số cho đường trung bình động và MACD để có được các tín hiệu giao dịch hiệu quả hơn.

  2. Thêm các chỉ số khác như khối lượng, RSI để tăng hiệu quả chiến lược.

  3. Thiết lập các quy tắc kích thước vị trí thay vì số lượng cố định cho mỗi giao dịch.

  4. Thêm các quy tắc thoát cấp tiến hơn ngoài lệnh dừng lỗ, ví dụ như mục tiêu lợi nhuận, lệnh dừng sau.

  5. Backtest với cài đặt phí thực tế hơn để mô phỏng giao dịch thực tế.

  6. Thực hiện phân tích đi trước, thử nghiệm độ bền để cải thiện độ tin cậy.

Kết luận

Chiến lược cân bằng theo xu hướng và trung bình đảo ngược giao dịch. Bản chất nằm trong điều chỉnh tham số thích hợp và hiểu đúng về các xu hướng chính. Bằng cách tối ưu hóa các tham số, thêm bộ lọc, chiến lược có thể đưa ra phán đoán tín hiệu giao dịch tốt hơn và đạt được 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à triển vọng ứng dụng đầy hứa hẹn.


/*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")


Thêm nữa