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

Tác giả:ChaoZhang, Ngày: 2023-11-03 17:23:54
Tags:

img

Tổng quan

Chiến lược chéo trung bình động là một chiến lược phân tích kỹ thuật rất cổ điển và thường được sử dụng. Ý tưởng cốt lõi của chiến lược này là sử dụng chéo giữa các trung bình động của các giai đoạn khác nhau làm tín hiệu giao dịch. Khi trung bình động ngắn hạn vượt qua trên trung bình động dài hạn từ dưới, một tín hiệu mua được tạo ra. Khi trung bình động ngắn hạn vượt qua dưới trung bình động dài hạn từ trên, một tín hiệu bán được tạo ra.

Chiến lược logic

Chiến lược này sử dụng đầu vào để thiết lập loại (SMA, EMA, WMA, RMA) và thời gian của đường trung bình động, cũng như phạm vi thời gian backtesting.

Các loại trung bình động khác nhau được tính trong hàm biến thể.

Khi giá đóng vượt trên ma, một tín hiệu mua được tạo ra. Khi giá đóng vượt dưới ma, một tín hiệu bán được tạo ra.

Để thiết lập stop loss, trung bình 14 giai đoạn thực phạm vi atr được tính toán.

Logic vào và ra cụ thể là như sau:

Đăng nhập dài: đóng chéo trên ma và trong phạm vi thời gian backtest, điểm dừng mất mát là điểm nhập khẩu gần
Exit dài: đóng chéo dưới ma trừ 2 lần atr để thoát khỏi lỗ dừng hoặc giá cao nhất vượt quá điểm vào đóng cộng với 2 lần atr để thoát khỏi lợi nhuận

Nhập ngắn: đóng chéo dưới ma và trong phạm vi thời gian backtest, điểm dừng mất mát là điểm nhập gần
Khóa ngắn: đóng chéo trên ma cộng với 2 lần atr để thoát khỏi lỗ dừng hoặc giá thấp nhất thấp hơn điểm nhập khẩu đóng trừ 2 lần atr để thoát khỏi lợi nhuận

Ưu điểm của Chiến lược

  1. Ý tưởng chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện
  2. Được sử dụng rộng rãi, phù hợp với các thị trường và sản phẩm khác nhau
  3. Cài đặt tham số linh hoạt, loại và thời gian trung bình động có thể điều chỉnh
  4. Sử dụng ATR stop loss để giúp kiểm soát rủi ro

Rủi ro của chiến lược

  1. Chiến lược trung bình động có xu hướng tạo ra giao dịch thường xuyên và dừng lỗ, làm giảm tiềm năng lợi nhuận
  2. Trong các thị trường biến động cực kỳ, đường trung bình động có thể tạo ra các tín hiệu gây hiểu lầm
  3. Phạm vi dừng lỗ ATR có thể quá rộng hoặc quá hẹp, không thể ngăn ngừa tổn thất lớn

Để giải quyết rủi ro, tối ưu hóa có thể được thực hiện trong các khía cạnh sau:

  1. Điều chỉnh thời gian trung bình động, sử dụng thời gian dài trung bình động
  2. Thêm điều kiện lọc để tránh giao dịch thường xuyên trên thị trường biến động
  3. Tối ưu hóa các thông số ATR hoặc sử dụng các phương pháp dừng lỗ khác
  4. Kết hợp các chỉ số xu hướng để xác định xu hướng tổng thể, tránh giao dịch ngược xu hướng

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

Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:

  1. Thêm các điều kiện bộ lọc như khối lượng, biến động để tránh đột phá không hợp lý
  2. Sử dụng ATR stop loss thích nghi để phạm vi stop loss thay đổi theo biến động thị trường
  3. Kết hợp Stoch, RSI và các chỉ số khác để xác nhận nhiều yếu tố để cải thiện chất lượng tín hiệu
  4. Thêm xác định xu hướng để tránh giao dịch ngược xu hướng
  5. Sử dụng thời gian thoát để tránh giữ kẻ thua cuộc quá lâu
  6. Tối ưu hóa các tham số thời gian trung bình động để tìm kết hợp tham số tốt nhất

Tóm lại

Chiến lược giao dịch trung bình động là một chiến lược phân tích kỹ thuật rất điển hình và thường được sử dụng. Ý tưởng cốt lõi của chiến lược đơn giản và dễ thực hiện, phù hợp với các thị trường khác nhau, và là một trong những chiến lược giao dịch định lượng cấp nhập cảnh. Tuy nhiên, chiến lược cũng có một số vấn đề như tạo ra tín hiệu thường xuyên và có xu hướng dừng lỗ. Với tối ưu hóa thích hợp, hiệu suất có thể được cải thiện đáng kể.


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

//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)

type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])

length = input(28)
source = close



// === INPUT BACKTEST RANGE ===
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2000, title = "From Year", minval = 2000)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(9999, 1, 1, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"



variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v5 = wma(src, len)                                                  // Weighted
    v7 = rma(src, len)                                                  // Smoothed
    type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)


atr = security(syminfo.tickerid, "D", atr(14))

range = valuewhen(cross(close,ma), (atr*2), na)

ep = valuewhen(cross(close,ma), close, na)

plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)

strategy.entry("Long Entry", true, when = crossover(close,ma)  and window() , stop  = ep ) 
strategy.exit("Long Exit", "Long Entry", stop  = ep-range) 
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) 

strategy.entry("Short Entry", false, when = crossunder(close,ma)  and window() , stop  = ep ) 
strategy.exit("Short Exit", "Short Entry", stop  = ep+range) 
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] ) 


Thêm nữa