Chiến lược này xác định hướng xu hướng giá bằng cách tính toán hai đường trung bình động với các thiết lập tham số khác nhau và so sánh các tình huống chéo của chúng, để thực hiện xu hướng sau khi giao dịch. Khi đường trung bình động nhanh phá vỡ đường trung bình động chậm từ dưới, nó được đánh giá là tín hiệu tăng. Khi đường trung bình động nhanh phá vỡ đường trung bình động chậm từ trên, nó được đánh giá là tín hiệu giảm. Chiến lược này có thể đạt được đánh giá xu hướng của các chu kỳ khác nhau bằng cách điều chỉnh các tham số.
Chiến lược này sử dụng hai bộ trung bình động với các cài đặt tham số khác nhau để so sánh. Các tham số trung bình động đầu tiên được đặt bởi len1 và type1, và các tham số trung bình động thứ hai được đặt bởi len2 và type2.
Khi đường trung bình di chuyển nhanh vượt qua đường trung bình di chuyển chậm để tạo thành đường chéo vàng, nó được đánh giá là tín hiệu tăng.
Tùy theo hướng của tín hiệu chéo, các vị trí dài hoặc ngắn sẽ được thực hiện. Khi một tín hiệu tăng được kích hoạt, nếu tham số needlong là đúng, một vị trí dài sẽ được mở với số lượng default_qty_value hoặc percentage_of_equity. Khi một tín hiệu giảm được kích hoạt, nếu tham số needshort là đúng, một vị trí ngắn sẽ được mở với số lượng default_qty_value hoặc percentage_of_equity.
Các đường trung bình động có tính chất chậm và có thể bỏ lỡ các điểm đảo ngược giá
Giải pháp: Gióng ngắn đúng chu kỳ trung bình động hoặc sử dụng kết hợp với các chỉ số khác
Không phù hợp với các thị trường biến động cao và đảo ngược thường xuyên
Giải pháp: Thêm điều kiện lọc để tránh giao dịch trên thị trường dao động
Có một số rủi ro của tín hiệu sai
Giải pháp: Thêm các chỉ số lọc khác để kết hợp để cải thiện độ tin cậy tín hiệu
Chiến lược này đánh giá xu hướng giá bằng cách so sánh các chéo chéo của hai đường trung bình động, và thực hiện các hoạt động dài và ngắn tương ứng để nắm bắt và lợi nhuận từ xu hướng. Ưu điểm là các quy tắc tín hiệu đơn giản và rõ ràng, các tham số có thể điều chỉnh, khả năng áp dụng mạnh mẽ, và nó có thể được tối ưu hóa và điều chỉnh cho các môi trường thị trường khác nhau.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0) needlong = input(true, "long") needshort = input(true, "short") len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length") type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type") src2 = input(close, defval = close, title = "Fast MA Source") len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length") type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type") src1 = input(close, defval = close, title = "Slow MA Source") col = input(false, defval = false, title = "Color of bar") o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") //DEMA 1 dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1) //TEMA 1 xEMA1 = ema(src1, len1) xEMA2 = ema(xEMA1, len1) xEMA3 = ema(xEMA2, len1) tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3 //KAMA 1 xvnoise = abs(src1 - src1[1]) nfastend = 0.20 nslowend = 0.05 nsignal = abs(src1 - src1[len1]) nnoise = sum(xvnoise, len1) nefratio = iff(nnoise != 0, nsignal / nnoise, 0) nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1])) //PriceChannel 1 lasthigh1 = highest(src1, len1) lastlow1 = lowest(src1, len1) center1 = (lasthigh1 + lastlow1) / 2 //DEMA 2 dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2) //TEMA 2 xEMA12 = ema(src2, len2) xEMA22 = ema(xEMA12, len2) xEMA32 = ema(xEMA22, len2) tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32 //KAMA 2 xvnoise2 = abs(src2 - src2[1]) nfastend2 = 0.20 nslowend2 = 0.05 nsignal2 = abs(src2 - src2[len2]) nnoise2 = sum(xvnoise2, len2) nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0) nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1])) //PriceChannel 2 lasthigh2 = highest(src2, len2) lastlow2 = lowest(src2, len2) center2 = (lasthigh2 + lastlow2) / 2 //MAs ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0 ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0 plot(ma1, color = blue, linewidth = 3, transp = 0) plot(ma2, color = red, linewidth = 3, transp = 0) //Signals trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1] up = trend == 1 and ((close < open and close[1] < open[1]) or col == false) dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false) if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na)