Chiến lược giao dịch chéo điểm chuyển động trung bình

Tác giả:ChaoZhang, Ngày: 2024-01-29 11:15:42
Tags:

img

Tổng quan

Chiến lược giao dịch chéo điểm chuyển động trung bình là một chiến lược chỉ số kỹ thuật cổ điển. Ý tưởng cốt lõi của chiến lược này là tạo ra tín hiệu mua và bán bằng cách kết hợp các đường trung bình chuyển động của các giai đoạn khác nhau và tối ưu hóa việc thoát khỏi giao dịch bằng cách sử dụng các điểm chuyển động trung bình. Chiến lược này phù hợp với các khung thời gian và sản phẩm khác nhau và có thể đạt được lợi nhuận ổn định.

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

Chiến lược này chủ yếu sử dụng hai đường trung bình động, một với một khoảng thời gian ngắn hơn như đường nhanh và một với một khoảng thời gian dài hơn như đường chậm. Khi đường nhanh vượt qua đường chậm lên, một tín hiệu mua được tạo ra. Khi đường nhanh vượt qua đường chậm xuống, một tín hiệu bán được tạo ra. Đây là cơ chế tạo tín hiệu giao dịch của chiến lược chéo trung bình động cổ điển.

Ngoài ra, chiến lược thoát khỏi giao dịch bằng cách sử dụng các điểm chuyển đổi của các đường trung bình động. Khi đường nhanh biến từ tăng xuống giảm, các vị trí dài sẽ thoát ra. Khi đường nhanh biến từ giảm lên tăng, các vị trí ngắn sẽ thoát ra. Các điểm chuyển đổi trung bình có thể nắm bắt các điểm đảo ngược thị trường ngắn hạn, giúp chiến lược cắt giảm lỗ hoặc kiếm lợi nhuận kịp thời, do đó cải thiện lợi nhuận tổng thể.

Phân tích lợi thế

Chiến lược giao dịch chéo điểm chuyển động trung bình có những lợi thế sau:

  1. Đơn giản để thực hiện. Chiến lược chỉ sử dụng hai chỉ số: Moving Average và chỉ số ROC. Mã không phức tạp.

  2. Khả năng chịu đựng thua lỗ liên tiếp mạnh mẽ. Đặc điểm chậm trễ và làm mịn giá vốn có của đường trung bình động có thể lọc ra một số tiếng ồn và tránh tạo ra quá nhiều giao dịch không hợp lệ trong xu hướng dao động.

  3. Có thể kiểm soát hiệu quả các lỗ đơn phương.

  4. Áp dụng rộng. Nguyên tắc chiến lược đơn giản và có thể được áp dụng cho các sản phẩm và khung thời gian giao dịch khác nhau như thanh hàng ngày và hàng giờ. Không gian tối ưu hóa tham số lớn.

  5. Lợi nhuận ổn định: So với các chiến lược theo đuổi các điểm nóng trên thị trường, chiến lược này tập trung nhiều hơn vào kiểm soát rủi ro thay vì theo đuổi lợi nhuận siêu cao, nhưng nó có thể đạt được lợi nhuận tích cực ổn định.

Phân tích rủi ro

Chiến lược giao dịch chéo điểm chuyển động trung bình cũng có một số rủi ro, chủ yếu trong các khía cạnh sau:

  1. Khi thị trường nhanh chóng đến, các tín hiệu chéo của các đường trung bình di chuyển sẽ bị chậm lại, có thể bỏ lỡ điểm đầu vào tốt nhất.

  2. Thời gian giữ trống dài. Chiến lược này có lối ra kịp thời nhưng tín hiệu nhập chậm hơn. Điều này có thể dẫn đến thời gian giữ trống quá nhiều. Cơ hội lợi nhuận bị bỏ lỡ trong thời gian giữ trống.

  3. Chọn các tham số như độ dài trung bình chuyển động và chu kỳ ROC sẽ có tác động lớn đến hiệu suất của chiến lược. Nhưng tối ưu hóa tham số đòi hỏi rất nhiều dữ liệu lịch sử để kiểm tra lại, gây khó khăn trong tối ưu hóa.

  4. Hiệu suất kém trong xu hướng biến động cao: Trong xu hướng biến động cao, các đường trung bình động sẽ tạo ra nhiều chéo không hợp lệ, làm suy yếu hiệu suất của chiến lược.

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

Chiến lược giao dịch có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Kết hợp các chỉ số lọc xu hướng. Thêm các chỉ số như ADX và ATR để đánh giá tình trạng xu hướng. Khóa chiến lược khi không có xu hướng rõ ràng để tránh các giao dịch vô dụng.

  2. Kết hợp nhiều khung thời gian. Xác định hướng xu hướng chính trên các khung thời gian cao hơn để tránh giao dịch chống lại xu hướng chính.

  3. Tối ưu hóa tham số thích nghi. Cho phép các tham số như chiều dài trung bình chuyển để điều chỉnh thích nghi dựa trên biến động thị trường thời gian thực để cải thiện độ bền của tham số.

  4. Giới thiệu nhận dạng mô hình. Xác định các mô hình nến tại các điểm chéo MA để lọc ra các tín hiệu sai.

Tóm lại

Nhìn chung, Chiến lược giao dịch chéo chuyển động trung bình điểm chuyển đổi cân bằng rủi ro và lợi nhuận. Nó có những ưu điểm như dễ thực hiện, chống lại tổn thất liên tiếp và lợi nhuận ổn định. Nó cũng có những nhược điểm như việc phát hành MAs chậm và thời gian giữ trống quá nhiều. Bằng cách tối ưu hóa các thông số, kết hợp phán đoán xu hướng, nhận dạng mẫu vv, hiệu suất của chiến lược có thể được cải thiện hơn nữa.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("SMA", "1st MA Type", options=["SMA", "EMA"])

ma2 = input(50, title="2nd MA Length")
type2 = input("SMA", "2nd MA Type", options=["SMA", "EMA"])

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    ema(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    ema(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



Thêm nữa