Chiến lược giao thoa EMA kép

Tác giả:ChaoZhang, Ngày: 2023-11-13 17:35:14
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch dựa trên sự chéo chéo và chéo chéo giữa các đường EMA nhanh và chậm, thuộc về các chiến lược theo xu hướng. Nó mua khi EMA nhanh vượt qua EMA chậm, và bán khi EMA nhanh vượt qua EMA chậm, thực hiện một chiến lược theo dõi xu hướng đơn giản.

Chiến lược logic

Logic cốt lõi của chiến lược này chủ yếu bao gồm các phần sau:

  1. Tính toán EMA nhanh và chậm: Sử dụng ta.ema() để tính toán EMA nhanh của chiều dài fastInput và EMA chậm của chiều dài slowInput.

  2. Đặt phạm vi thời gian backtest: Sử dụng useDateFilter để thiết lập liệu có nên lọc phạm vi thời gian backtest hay không, và sử dụng backtestStartDate và backtestEndDate để thiết lập thời gian bắt đầu và kết thúc.

  3. Tạo tín hiệu giao dịch: Sử dụng ta.crossover() và ta.crossunder() để so sánh EMA nhanh và chậm, tạo tín hiệu mua khi EMA nhanh vượt qua EMA chậm, và bán tín hiệu khi EMA nhanh vượt qua EMA chậm.

  4. Quản lý các đơn đặt hàng ngoài phạm vi thời gian: Hủy bỏ các đơn đặt hàng chưa hoàn thành bên ngoài phạm vi thời gian backtest và làm phẳng tất cả các vị trí.

  5. Kéo đường EMA: Kéo đường EMA nhanh và chậm trên biểu đồ.

Phân tích lợi thế

Đây là một xu hướng rất đơn giản theo chiến lược, với những lợi thế sau:

  1. Logic đơn giản, dễ hiểu và thực hiện.

  2. EMA làm mượt dữ liệu giá và giảm tiếng ồn giao dịch.

  3. Thời gian EMA tùy chỉnh, thích nghi với môi trường thị trường khác nhau.

  4. Phạm vi thời gian backtest linh hoạt để kiểm tra các khoảng thời gian cụ thể.

  5. Điều kiện nhập cảnh và xuất cảnh tối ưu, có thể được kết hợp với các chỉ số khác.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Chiến lược EMA kép là thô, không thể thích nghi linh hoạt với những thay đổi của thị trường.

  2. Rủi ro giao dịch thường xuyên và lặp lại.

  3. Các thông số EMA không chính xác có thể gây ra các tín hiệu giao dịch sai.

  4. Khoảng thời gian backtest không hợp lý có thể dẫn đến quá phù hợp.

  5. Rủi ro rút vốn và tổn thất không thể tránh khỏi.

Rủi ro có thể được quản lý thông qua tối ưu hóa tham số, lọc biến động, dừng lỗ, v.v.

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

Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:

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

  2. Thêm các chỉ số khác để lọc các giao dịch không cần thiết.

  3. Thêm stop loss để kiểm soát lỗ giao dịch duy nhất.

  4. Kết hợp xu hướng, bộ lọc biến động để giảm tần suất giao dịch.

  5. Kiểm tra các sản phẩm khác nhau để tìm ra phù hợp nhất.

  6. Sử dụng trượt, ủy quyền cho thực tế hơn backtest.

Tóm lại

Tóm lại, đây là một chiến lược giao dịch qua đường EMA kép rất đơn giản với logic rõ ràng bằng cách so sánh EMA nhanh và chậm. Lợi thế là việc thực hiện đơn giản, nhưng nó cũng có các vấn đề như giao dịch thường xuyên, quá phù hợp. Bước tiếp theo là cải thiện tối ưu hóa tham số, quản lý rủi ro cho một chiến lược mạnh mẽ hơn.


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


//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")

// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)


// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " +  
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

// STEP 2. See if current bar falls inside the date range
inTradeWindow = true

// STEP 3. Include the date filter with the entry order conditions

// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
    strategy.entry("buy", strategy.long)

// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
    strategy.close_all(comment="sell")

// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
    strategy.cancel_all()
    strategy.close_all(comment="Date Range Exit")

// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)




Thêm nữa