Chiến lược đảo ngược đường trung bình động cắt nhau


Ngày tạo: 2023-12-28 12:00:27 sửa đổi lần cuối: 2023-12-28 12:00:27
sao chép: 0 Số nhấp chuột: 543
1
tập trung vào
1623
Người theo dõi

Chiến lược đảo ngược đường trung bình động cắt nhau

Tóm tắt: Chiến lược này là chiến lược giao dịch cổ điển dựa trên đường trung bình chéo, các chỉ số chọn đường trung bình kép, bao gồm đường trung bình di chuyển đơn giản ((SMA), đường trung bình di chuyển chỉ số ((EMA), đường trung bình di chuyển trọng lượng tuyến tính ((VWMA) và đường trung bình di chuyển trọng lượng dao động ((HMA)).

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

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

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 đường trung bình phổ biến sẽ có nhiều tín hiệu giả, dẫn đến vấn đề của nhiều vị trí bán tháo với lợi nhuận nhỏ, ảnh hưởng đến thu nhập tổng thể. Ngoài ra, thiết lập chiều dài đường trung bình nhanh hoặc chậm cũng sẽ bị hỏng trong một số chu kỳ.

Hướng tối ưu hóa: 1) Thử nghiệm các chu kỳ khác nhau để xác định kết hợp chu kỳ giao chéo đường trung bình tốt nhất. 2) Xem xét các tham số của đường trung bình nhóm thứ hai và các phán quyết phụ trợ của chỉ số RSI để giảm tín hiệu giả. 3) Giới thiệu phán quyết điều kiện dựa trên sự thay đổi của chỉ số gia tăng MA thay vì giao chéo đơn giản, để có được phán quyết giao chéo đáng tin cậy hơn.

Tóm lại: Chiến lược này sử dụng khuôn khổ của chiến lược chéo chéo dòng truyền thống, thực hiện thử nghiệm hai dòng bằng nhau để tìm kiếm sự kết hợp chu kỳ trung bình tốt nhất, đồng thời tăng lệnh dừng dựa trên ROC và giá bằng nhau. Nói chung là một chiến lược hai dòng đơn giản, dễ sử dụng và 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 tiếp theo của chiến lược này.

Mã nguồn chiến lược
/*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")