
Chiến lược này sử dụng giao lộ của hai đường trung bình di chuyển như một tín hiệu giao dịch, kết hợp với ATR dừng để thực hiện giao dịch theo xu hướng. Ý tưởng cốt lõi của nó là làm nhiều khi đi qua đường trung bình di chuyển ngắn hạn, làm trống khi đi qua đường trung bình di chuyển dài hạn, đồng thời sử dụng ATR để thiết lập điểm dừng lỗ, dừng lại theo dõi động.
Chiến lược này chủ yếu đánh giá xu hướng bằng hai nhóm trung bình di chuyển. Độ dài của trung bình di chuyển nhanh là 25 ngày và độ dài của trung bình di chuyển chậm là 100 ngày.
Để lọc ra một số tín hiệu giả, chiến lược đã thêm một bộ đếm số chéo crossCount. Chỉ khi số lần chéo của trung bình di chuyển nhanh trong thời gian lookback (lần 25 ngày mặc định) ít hơn maxNoCross (lần 10 mặc định) thì sẽ kích hoạt tín hiệu.
Ngoài ra, chiến lược cũng bổ sung một cơ chế xác nhận, tức là sau khi tín hiệu ban đầu được phát ra, tín hiệu sẽ được xác nhận nếu giá quay trở lại giữa hai đường trung bình di chuyển.
Sau khi tham gia, chiến lược sử dụng chỉ số ATR để thiết lập khoảng cách dừng lỗ. ATR đo lường phạm vi biến động giá trong một khoảng thời gian nhất định trong quá khứ, ở đây thiết lập khoảng cách dừng lỗ bằng 14 lần ATR.
Chiến lược này có một số ưu điểm:
Sử dụng phương tiện di chuyển kép kết hợp với cơ chế lọc chéo, có thể lọc hiệu quả các tín hiệu giả và nắm bắt xu hướng mạnh mẽ hơn.
Tăng cơ chế xác nhận để tránh bị phá vỡ giả.
Sử dụng ATR để theo dõi lỗ hổng, bạn có thể khóa lợi nhuận tối đa và tránh rút tiền quá nhiều.
Các tham số tối ưu hóa thuận tiện ít hơn, dễ thực hiện.
Có thể áp dụng trong nhiều thị trường, bao gồm tiền kỹ thuật số và thị trường cơ bản truyền thống.
Việc xây dựng chiến lược sử dụng nhiều chỉ số tổng hợp giúp cho chiến lược trở nên vững chắc hơn.
Chiến lược này có những rủi ro:
Trong giai đoạn chấn động, các đường trung bình di chuyển sẽ giao nhau thường xuyên, dễ gây ra nhiều lần mất mát.
Thiết lập tham số ATR không đúng có thể gây ra mất mát quá nhẹ hoặc quá chặt chẽ.
Lỗ hổng hoặc khoảng cách lớn có thể trực tiếp gây ra thiệt hại.
Các sự kiện lớn bất ngờ có thể gây ra biến động mạnh trong giá cả.
Các tham số trung bình di chuyển không hợp lý có thể dẫn đến việc bỏ lỡ xu hướng hoặc tạo ra quá nhiều tín hiệu giả.
Sự thay đổi trong phạm vi biến động giá gần đây có thể khiến ATR dừng lỗ không phù hợp.
Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:
Các tham số di chuyển trung bình được tối ưu hóa để tìm ra sự kết hợp phù hợp hơn. Các tham số khác nhau của chu kỳ và trung bình di chuyển trọng lượng có thể được thử nghiệm.
Kiểm tra các tham số chu kỳ ATR khác nhau để tìm khoảng cách dừng tốt hơn.
Thêm các điều kiện lọc bổ sung, chẳng hạn như tăng khối lượng giao dịch, chỉ số dao động, để cải thiện chất lượng tín hiệu.
Các chỉ số này được kết hợp với các chỉ số đánh giá xu hướng để tránh bị mắc kẹt trong tình trạng chấn động.
Thêm thuật toán học máy, tự động tối ưu hóa các tham số thông qua đào tạo dữ liệu lịch sử.
Tìm kiếm nhiều xác nhận hơn trong biểu đồ cấp lớn và tránh bị lừa bởi tiếng ồn đường ngắn.
Thiết lập các quy tắc giảm vị trí lợi nhuận và khóa lợi nhuận dần dần.
Chiến lược này tích hợp nhiều chỉ số kỹ thuật khác nhau như chéo đường trung bình di chuyển đôi, lọc xu hướng, cơ chế xác nhận và dừng động ATR. Có chỗ để cải thiện về tối ưu hóa tham số và kiểm soát rủi ro, nhưng ý tưởng giao dịch của nó đơn giản và rõ ràng, dễ thực hiện sao chép, là một chiến lược theo dõi xu hướng mạnh mẽ hơn.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)
//MA's for basic signals, can experiment with these values
fastEMA = sma(close, 25)
slowEMA = sma(close, 100)
//Parameters for validation of position
lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets
//Amount of crosses on MA to filter out noise
ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)
//Entries long
agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false
//Entries short
agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false
//ATR
atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15", title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))
//Strategy
longCondition = ((agrLong or consLong) == true)
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
strategy.entry("Short", strategy.short)
//Stop multiplier
stopMult = 4
//horizontal stoplosses
longStop = na
longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1]
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]
//Strategy exit functions
strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)
//Plots
redgreen = (fastEMA > slowEMA) ? green : red
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2)
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2)
fill(p1, p2, color=redgreen)
s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop')
fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)