Chiến lược chéo trung bình di chuyển kép đảo ngược

Tác giả:ChaoZhang, Ngày: 2023-12-28 12:00:27
Tags:

img

Tổng quan: Chiến lược này dựa trên chiến lược giao dịch cổ điển của đường chéo trung bình động. Nó sử dụng hai đường trung bình động, bao gồm đường trung bình di chuyển đơn giản (SMA), đường trung bình di chuyển theo cấp số (EMA), đường trung bình di chuyển cân nhắc biến động (VWMA) và đường trung bình di chuyển Hull (HMA).

Nguyên tắc: Logic cốt lõi của chiến lược là giao thoa trung bình động kép. Bằng cách tính toán hai trung bình động với các tham số khác nhau, một tín hiệu mua được tạo ra khi trung bình động nhanh vượt qua trung bình chậm, và một tín hiệu bán được tạo ra khi trung bình động nhanh vượt qua dưới trung bình chậm.

Phân tích lợi thế: Những lợi thế chính của chiến lược chéo trung bình động kép là sự đơn giản và dễ dàng hoạt động. Chỉ với một tín hiệu, phán đoán xu hướng cơ bản nhất có thể được thu được mà không cần quá nhiều lựa chọn và điều chỉnh tham số, rất phù hợp với các nhà giao dịch mới bắt đầu. Ngoài ra, các loại trung bình động khác nhau được thử nghiệm để tối ưu hóa các kết hợp khác nhau.

Phân tích rủi ro: Rủi ro chính của chiến lược này là các chiến lược chéo trung bình động phổ biến sẽ có rất nhiều tín hiệu sai, dẫn đến nhiều lợi nhuận nhỏ và các vị trí phẳng, ảnh hưởng đến lợi nhuận tổng thể.

Hướng dẫn tối ưu hóa: 1) Kiểm tra các khoảng thời gian khác nhau để xác định sự kết hợp tối ưu của các đường chéo trung bình động; 2) Xem xét việc giới thiệu một bộ thứ hai các tham số trung bình động và chỉ số RSI để hỗ trợ phán đoán để giảm tín hiệu sai; 3) giới thiệu phán đoán điều kiện dựa trên sự thay đổi gia tăng của chỉ số MA thay vì giao chéo đơn giản để có được phán đoán giao chéo đáng tin cậy hơn.

Tóm tắt: Chiến lược này áp dụng khuôn khổ của chiến lược chéo trung bình động truyền thống để kiểm tra trung bình di chuyển kép để tìm sự kết hợp tối ưu của các giai đoạn trung bình di chuyển. Đồng thời, nó thêm các phán quyết dừng lỗ dựa trên ROC và giá của trung bình di chuyển. Nhìn chung, đây là một chiến lược trung bình di chuyển kép đơn giản và dễ sử dụng phù hợp với logic giao dịch định lượng. Ngoài ra, các ý tưởng tối ưu hóa phong phú cũng cung cấp không gian cho sự phát triển hơn nữa của chiến lược này.


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

//@version=3
//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(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

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

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(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) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
    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