Chiến lược chéo trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2023-11-22 16:38:26
Tags:

img

Tổng quan

Chiến lược chuyển động trung bình là một chiến lược giao dịch định lượng đơn giản nhưng hiệu quả dựa trên đường trung bình chuyển động. Nó sử dụng đường chuyển động trung bình nhanh và đường chuyển động trung bình chậm để tạo ra tín hiệu mua và bán. Khi đường nhanh xuyên qua đường chậm từ dưới, một tín hiệu mua được tạo ra. Khi đường nhanh xuyên qua đường chậm từ trên, một tín hiệu bán được tạo ra.

Chiến lược logic

Lập luận cốt lõi của chiến lược này nằm ở việc sử dụng đường trung bình động để đánh giá xu hướng thị trường. Đường trung bình động có chức năng lọc ra tiếng ồn thị trường ngẫu nhiên. Đường trung bình động nhanh có thể phản ứng nhanh hơn với những thay đổi giá và phản ánh các xu hướng mới nhất, trong khi đường trung bình động chậm phản ứng chậm hơn với những thay đổi giá mới nhất và đại diện cho xu hướng trung bình đến dài hạn.

Cụ thể, chiến lược này đầu tiên xác định trung bình di chuyển nhanh sig1 và trung bình di chuyển chậm sig2. Sau đó, điểm mua và bán được xác định theo các mối quan hệ chéo giữa sig1 và sig2. Khi sig1 phá vỡ sig2 từ dưới, một điều kiện dài longCondition được tạo ra. Khi sig1 phá vỡ qua sig2 từ trên, một điều kiện ngắn shortCondition được tạo ra. Chiến lược sau đó đặt lệnh khi các điều kiện dài và ngắn được đáp ứng, và đặt lệnh dừng lỗ và lấy lợi nhuận để thoát.

Phân tích lợi thế

Những lợi thế của chiến lược này là đáng kể:

  1. Logic đơn giản, dễ hiểu và thực hiện
  2. Điều chỉnh tham số linh hoạt, có thể được tối ưu hóa theo các điều kiện thị trường khác nhau
  3. Có thể được kết hợp với các chỉ số khác để lọc tín hiệu và cải thiện sự ổn định
  4. Hiệu suất tốt, ví dụ như EMA15-EMA30 combo có thể đạt được tỷ lệ thắng 83% trên dữ liệu hàng ngày EURCHF

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Ảnh hưởng whipsaw nghiêm trọng, cấu hình dừng mất mát là rất quan trọng
  2. Hiệu suất kém trong các thị trường theo chiều ngang
  3. Cần thử nghiệm rộng rãi và điều chỉnh tham số để phù hợp với các sản phẩm và khung thời gian khác nhau

Các biện pháp tối ưu hóa:

  1. Thêm các chỉ số khác để đánh giá để tránh chém
  2. Điều chỉnh các loại và tham số MA để phù hợp với các sản phẩm khác nhau
  3. Tối ưu hóa tỷ lệ dừng lỗ và lợi nhuận để kiểm soát rủi ro

Kết luận

Nói chung, chiến lược chéo trung bình động là một chiến lược số lượng với logic đơn giản, tính thực tế mạnh mẽ và ổn định. Với điều chỉnh tham số và tối ưu hóa thích hợp, nó có thể tạo ra lợi nhuận ổn định trong các môi trường thị trường khác nhau. Đáng chú trọng và áp dụng cho các nhà giao dịch định lượng.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-11-16 04:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Simple yet effective MA cross strategy.
// You'll have to tune the parameters to get an optimal win ratio.
// If JPY or XAU or any other currency with pips defined as the 
// second decimal digit are involved, do not forget to set the respective flag on.
//
// Created by vitelot/yanez/Vts, who's the same fellow with different user names
// December 2018 -- Merry Xmas
//
strategy("MA cross strategy Vts", overlay=true, initial_capital=1000, currency="EUR", pyramiding=0)

yr  = input(2016, title="Starting year to analyse")
src = input(close, title="Source")
maType = input( defval="EMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA"])
//
isJPY = input(false, title="Is JPY or XAU involved?") // JPY and Gold have the pips defined as the 2 decimal digit

maPar1 = input(26, minval=1, title="MA fast period")
maPar2 = input(51, minval=2, title="MA slow period")

atrPar = input(14,minval=1, title="ATR period")
atrMulSL = input(1.5, title="SL ATR multiplicator")
atrMulTP = input(1.0, title="TP ATR multiplicator")

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

ma(t,sig,len) =>
    if t =="SMA"
        sma(sig,len)
    else
        if t == "EMA"
            ema(sig,len)
        else
            if t == "HMA"
                hma(sig,len)
            else
                if t == "McG" // Mc Ginley
                    mcg(sig,len)
                else
                    wma(sig,len)
                    
        
sig1 = ma(maType, src, maPar1)
sig2 = ma(maType, src, maPar2)

tickFactor = isJPY? 1e3: 1e5
sl = atrMulSL*atr(atrPar)*tickFactor
tp = atrMulTP*atr(atrPar)*tickFactor

plot(sig1, color=aqua, title="MA1", linewidth=2)
plot(sig2, color=orange, title="MA2", linewidth=2)

longCondition = crossunder(sig2, sig1) and year>=yr // change the >= to == if you like exact years not a range
if (longCondition)
    strategy.entry("Long", strategy.long, qty=1) // exit trade when SL and TP are hit
    strategy.exit("Exit Long", "Long", loss=sl, profit=tp)
if (crossunder(sig1, sig2)) // or when the short condition is met
    strategy.close("Long")

shortCondition = crossover(sig2,sig1) and year>=yr // change the >= to == if you like exact years not a range
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=1)
    strategy.exit("Exit Short", "Short", loss=sl, profit=tp)
if (crossover(sig1,sig2))
    strategy.close("Short")


Thêm nữa