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

Tác giả:ChaoZhang, Ngày: 2023-12-04 16:39:13
Tags:

img

Tổng quan

Đây là một chiến lược giao dịch đảo ngược dựa trên các chỉ số trung bình động kép. Bằng cách tính toán hai nhóm trung bình động với các thiết lập tham số khác nhau và đánh giá xu hướng giá theo những thay đổi theo hướng của chúng, các tín hiệu giao dịch có thể được tạo ra bằng cách đặt tham số độ nhạy cho những thay đổi theo hướng.

Nguyên tắc

Chỉ số cốt lõi của chiến lược này là đường trung bình động kép. Chiến lược cho phép chọn loại (SMA, EMA, v.v.), chiều dài và nguồn giá (giá gần, giá điển hình, v.v.) của đường trung bình động. Sau khi tính toán hai nhóm đường trung bình động, hướng của chúng được xác định bằng cách xác định tham số phản ứng. Một tín hiệu mua được tạo ra khi đường nhanh vượt qua đường chậm, và một tín hiệu bán được tạo ra khi nó vượt qua dưới.

Ngoài ra, chiến lược cũng đặt ra các điều kiện để xác định sự thay đổi hướng và tiếp tục tăng / giảm để tránh tạo ra tín hiệu sai. Và nó hiển thị sự tăng và giảm giá bằng các màu sắc khác nhau. Khi giá tiếp tục tăng, đường movavg được hiển thị màu xanh lá cây và màu đỏ khi giá giảm.

Phân tích lợi thế

Chiến lược movavg kép kết hợp các đường nhanh và chậm với các cài đặt tham số khác nhau, có thể lọc hiệu quả tiếng ồn trong thị trường giao dịch và xác định xu hướng mạnh hơn.

Các thông số phản ứng cho phép chiến lược linh hoạt và thích nghi với các chu kỳ và giống khác nhau.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là bỏ lỡ điểm chuyển đổi và mất tiền hoặc có vị trí ngược lại. Điều này liên quan đến cài đặt tham số phản ứng. Nếu phản ứng quá nhỏ, các tín hiệu sai có thể xảy ra. Nếu phản ứng quá lớn, nó có thể bỏ lỡ các điểm nhập tốt hơn.

Một rủi ro khác là không có khả năng kiểm soát thua lỗ một cách hiệu quả. Khi giá dao động mạnh mẽ, nó không thể nhanh chóng ngăn chặn thua lỗ, dẫn đến tổn thất lớn hơn. Điều này đòi hỏi phải sử dụng các chiến lược dừng lỗ để kiểm soát rủi ro.

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

Các hướng tối ưu hóa chính của chiến lược này tập trung vào việc lựa chọn các tham số phản ứng, các loại và chiều dài của các đường trung bình động. Tăng phản ứng phù hợp có thể làm giảm tín hiệu sai. Các tham số trung bình động có thể được thử nghiệm theo các chu kỳ và giống khác nhau để chọn sự kết hợp tốt nhất để tạo ra tín hiệu.

Ngoài ra, xác nhận tín hiệu giao dịch với các chỉ số phụ trợ khác như RSI và KD cũng là một ý tưởng tối ưu hóa.

Tóm lại

Nhìn chung, chiến lược này tương đối đơn giản và thực tế. Bằng cách lọc với các đường trung bình động kép và tạo ra các tín hiệu giao dịch, nó có thể xác định hiệu quả sự đảo ngược xu hướng và là một chiến lược theo xu hướng điển hình. Sau khi tối ưu hóa danh mục đầu tư tham số, khả năng nắm bắt xu hướng và giữ vị trí chống lại thị trường sẽ được cải thiện. Sử dụng nó với cơ chế dừng lỗ và quản lý vị trí hoạt động tốt hơn.


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

//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)

// === INPUTS

ma_type   = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len    = input(defval=32, title="MA Lenght", minval=1)
ma_src    = input(close, title="MA Source")
reaction  = input(defval=2, title="MA Reaction", minval=1)

// SuperSmoother filter
// © 2013  John F. Ehlers
variant_supersmoother(src,len) =>
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    v9
    
variant_smoothed(src,len) =>
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
    v5

variant_zerolagema(src,len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)
    v10
    
variant_doubleema(src,len) =>
    v2 = ema(src, len)
    v6 = 2 * v2 - ema(v2, len)
    v6

variant_tripleema(src,len) =>
    v2 = ema(src, len)
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)              
    v7
    
variant(type, src, len) =>
    type=="EMA"     ? ema(src,len) : 
      type=="WMA"   ? wma(src,len): 
      type=="VWMA"  ? vwma(src,len) : 
      type=="SMMA"  ? variant_smoothed(src,len) : 
      type=="DEMA"  ? variant_doubleema(src,len): 
      type=="TEMA"  ? variant_tripleema(src,len): 
      type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
      type=="SSMA"  ? variant_supersmoother(src,len) : 
      type=="ZEMA"  ? variant_zerolagema(src,len) : 
      type=="TMA"   ? sma(sma(src,len),len) : sma(src,len)


// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)

direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)

pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")

/////// Alerts ///////

alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")


longCondition = direction>0
shortCondition = direction<0
if (longCondition)
    strategy.entry("BUY", strategy.long)
if (shortCondition)
    strategy.entry("SELL", strategy.short)



Thêm nữa