Chiến lược giao dịch EMA và MACD với Trailing Stop Loss

Tác giả:ChaoZhang, Ngày: 2023-09-20 11:21:14
Tags:

Tổng quan

Chiến lược này kết hợp các chỉ số trung bình động theo cấp số nhân (EMA) và chỉ số biến đổi biến đổi trung bình động (MACD) để tạo ra các tín hiệu giao dịch, và áp dụng lệnh dừng lỗ để kiểm soát rủi ro. Chiến lược này phù hợp với các thị trường xu hướng và nhằm theo dõi xu hướng trung hạn cho các cổ phiếu dài hạn.

Chiến lược logic

Khi đường EMA nhanh vượt qua đường EMA chậm và biểu đồ MACD biến thành giảm, chiến lược sẽ đi dài. Khi một vị trí dài tồn tại, một đường dừng lỗ đi xuống được thiết lập. Nếu giá giảm xuống dưới đường dừng lỗ một tỷ lệ phần trăm nhất định, vị trí dài sẽ bị dừng lại.

Đặc biệt, chiến lược này sử dụng EMA 7 ngày và EMA 14 ngày để xây dựng EMA nhanh và chậm. Giá trị MACD được lấy bằng cách trừ EMA 26 ngày khỏi EMA 12 ngày, và đường tín hiệu được lấy với EMA 9 ngày của MACD. Khi EMA 7 ngày vượt qua EMA 14 ngày và giá trị MACD vượt qua đường tín hiệu, một vị trí dài được mở. Sau đó, một đường dừng lỗ đi xuống được thiết lập. Nếu giá giảm từ mức cao hơn một tỷ lệ phần trăm nhất định, vị trí dài sẽ bị dừng.

Phân tích lợi thế

Chiến lược này kết hợp các chỉ số EMA và MACD, có thể lọc hiệu quả các đột phá sai. EMA đánh giá hướng xu hướng và MACD xác định các điểm nhập cảnh. Kết hợp cả hai có thể làm giảm tần suất giao dịch trong khi cải thiện chất lượng tín hiệu.

Các thử nghiệm ngược lại cho thấy rằng chiến lược này có thể tạo ra lợi nhuận tốt ngay cả trong thị trường gấu, cho thấy sự mạnh mẽ nhất định. Tần suất giao dịch không cao, phù hợp với cổ phần trung bình đến dài hạn. Các thông số thời gian EMA có thể được điều chỉnh để tùy chỉnh xu hướng theo xu hướng.

Phân tích rủi ro

Chiến lược dựa chủ yếu trên các chỉ số, với nguy cơ bị đánh bại. Trong quá trình củng cố giới hạn trong phạm vi, EMA và MACD có thể tạo ra các tín hiệu sai quá mức, dẫn đến giao dịch quá mức và thua lỗ.

Việc mở rộng các khoảng thời gian EMA một cách thích hợp có thể làm giảm các tín hiệu sai. Các chỉ số khác cũng có thể được kết hợp để lọc các tín hiệu, chẳng hạn như chỉ số khối lượng hoặc biến động. Ngoài ra, tỷ lệ stoploss có thể được điều chỉnh dựa trên điều kiện thị trường, để cân bằng stoploss và rủi ro whipsaw.

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

  1. Các kết hợp thời gian EMA khác nhau có thể được thử nghiệm để tìm các thông số phù hợp hơn.

  2. Các chỉ số khác như RSI, KD có thể được thêm vào để lọc tín hiệu và cải thiện chất lượng.

  3. Tỷ lệ phần trăm dừng lỗ có thể được điều chỉnh dựa trên các sản phẩm khác nhau, với các điểm dừng theo dõi năng động.

  4. Breakout, nhận dạng mẫu và các kỹ thuật khác có thể được kết hợp cho các quy tắc nhập và xuất dễ tùy chỉnh hơn.

  5. Học máy có thể giúp dự đoán hướng xu hướng tổng thể để hỗ trợ EMA.

Tóm lại

Nhìn chung, chiến lược khá mạnh mẽ, tạo ra lợi nhuận tốt ngay cả trong thị trường gấu. Nhưng có một số rủi ro whipsaw, đòi hỏi điều chỉnh tham số và lọc tín hiệu. Tăng cường hơn nữa với các chỉ số kỹ thuật khác và học máy có thể cải thiện đáng kể. Tóm lại, chiến lược cung cấp một mẫu đáng tin cậy cho giao dịch định lượng.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-19 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Coinrule

//@version=5
strategy('EMA and MACD with Trailing Stop Loss',
         overlay=true,
         initial_capital=1000,
         process_orders_on_close=true,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=30,
         commission_type=strategy.commission.percent,
         commission_value=0.1)

showDate = input(defval=true, title='Show Date Range')
timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0)
notInTrade = strategy.position_size <= 0

// EMAs 
fastEMA = ta.ema(close, 7)
slowEMA = ta.ema(close, 14)
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.green)
//buyCondition1 = ta.crossover(fastEMA, slowEMA)
buyCondition1 = fastEMA > slowEMA


// DMI and MACD inputs and calculations
[macd, macd_signal, macd_histogram] = ta.macd(close, 12, 26, 9)
buyCondition2 = ta.crossover(macd_signal, macd)


// Configure trail stop level with input options
longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01
shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01

// Determine trail stop loss prices
longStopPrice = 0.0
shortStopPrice = 0.0

longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + shortTrailPerc)
    math.min(stopValue, shortStopPrice[1])
else
    999999
    

if (buyCondition1 and buyCondition2 and notInTrade and timePeriod)
    strategy.entry(id="Long", direction = strategy.long)

strategy.exit(id="Exit", stop = longStopPrice, limit = shortStopPrice)


//if (sellCondition1 and sellCondition2 and notInTrade and timePeriod)
//strategy.close(id="Close", when = sellCondition1 or sellCondition2)


Thêm nữa