
Chiến lược đường chéo trung bình di chuyển 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 đường chéo giữa các đường trung bình di chuyển trong các khoảng thời gian khác nhau làm tín hiệu mua bán.
Chiến lược này được thiết lập bằng cách đưa vào loại trung bình di chuyển (SMA, EMA, WMA, RMA) và độ dài chu kỳ, và phạm vi thời gian đo lại.
Tính toán các loại trung bình di chuyển khác nhau trong hàm biến. Các trung bình di chuyển được tính được lưu giữ bởi biến ma.
Khi giá đóng cửa vượt qua ma, nó tạo ra tín hiệu mua; khi giá đóng cửa vượt qua ma, nó tạo ra tín hiệu bán.
Để thiết lập dừng lỗ, tính toán độ dao động trung bình thực tế trong 14 chu kỳ thông quaatr. Với điểm đi qua làm tham chiếu, tăng lên hoặc giảm xuống 2 lầnatr như phạm vi dừng lỗ.
Logic nhập cảnh và xuất cảnh cụ thể như sau:
Nhiều đầu vào: đóng trên ma và trong thời gian phản hồi, điểm dừng là điểm vào Nhiều đầu ra: đóng cửa dưới ma trừ đi 2 lầnatr khi dừng chân ra, hoặc giá cao nhất vượt quá điểm vào cửa đóng cửa cộng 2 lầnatr khi dừng chân ra Đi đầu không vào: close dưới ma và trong thời gian phản hồi, điểm dừng là điểm vào close Bỏ đầu trống: đóng cửa khi mang ma cộng 2 lầnatr khi dừng lỗ, hoặc giá thấp nhất thấp hơn điểm vào cửa khi đóng cửa trừ 2 lầnatr khi dừng
Đối với các rủi ro, bạn có thể tối ưu hóa từ:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược chéo trung bình di chuyển là một chiến lược phân tích kỹ thuật rất điển hình và phổ biến. Ý tưởng cốt lõi của chiến lược này đơn giản, dễ thực hiện, phù hợp với mọi thị trường và là một trong những chiến lược nhập cảnh cho giao dịch định lượng. Tuy nhiên, chiến lược này cũng có một số vấn đề, chẳng hạn như tạo ra tín hiệu thường xuyên, dễ bị dừng lại, v.v..
/*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] )