Chiến lược này tính toán tín hiệu giá trơn tru dựa trên lý thuyết chu kỳ mạng được đề xuất bởi Ehlers để thiết kế một chiến lược giao dịch với các tín hiệu giao dịch trơn tru. Nó có thể lọc hiệu quả tiếng ồn thị trường và tạo ra các tín hiệu giao dịch đáng tin cậy hơn.
Làm mịn tín hiệu giá ban đầu src với mịn thứ hai để có được tín hiệu mịn.
Tính toán chu kỳ chỉ số chu kỳ dựa trên tín hiệu làm mịn. Phương pháp tính toán là: chu kỳ:= (1 -.5alpha) (1 - .5 alpha)(mẹo - 2)mịn [1] + mịn [2]) + 2(1 - alpha)chu kỳ[1] - (1 - alpha)(1 - alpha) * chu kỳ [2]
trong đó α là tham số làm mịn.
Lớp dần các chỉ số chu kỳ với thứ tự thứ nhất để có được tín hiệu tín hiệu giao dịch cuối cùng. Phương pháp tính toán là: tín hiệu:= alpha2chu kỳ + (1 - alpha2)nz (( tín hiệu [1])
trong đó α2 là tham số làm mịn thứ nhất.
Long khi tín hiệu vượt qua tín hiệu [1]; Short khi tín hiệu vượt qua tín hiệu [1].
Việc làm mịn của tín hiệu giá thứ hai có thể lọc hiệu quả tiếng ồn tần số cao và làm cho tín hiệu giao dịch đáng tin cậy hơn.
Áp dụng lý thuyết chu kỳ mạng của Ehlers có thể xác định chính xác hơn điểm chuyển hướng của xu hướng thị trường.
Việc làm mịn theo cấp số nhân thứ nhất lọc một số tiếng ồn trong chỉ số chu kỳ để tạo ra các tín hiệu giao dịch đáng tin cậy hơn.
Toàn bộ quy trình của chiến lược là hợp lý và khoa học, với không gian tối ưu hóa tham số lớn và hiệu suất thực tế xuất sắc.
Giống như các chiến lược chỉ số kỹ thuật khác, chiến lược này cũng tương đối nhạy cảm với rủi ro thị trường hệ thống.
Do quá trình tính toán phức tạp, các cài đặt tham số không đúng có thể gây ra sự chậm trễ tính toán, do đó ảnh hưởng đến hiệu suất thực tế. Các tham số cần được kiểm tra cẩn thận để đảm bảo cài đặt khoa học và hợp lý.
Việc xử lý mượt cũng dẫn đến tín hiệu giao dịch chậm, có thể không nắm bắt được các điểm chuyển đổi thị trường kịp thời, do đó bỏ lỡ cơ hội.
Các loại thuật toán làm mịn khác nhau có thể được thử nghiệm, chẳng hạn như làm mịn theo cấp số nhân thứ nhất, làm mịn trung bình động, v.v., để tìm ra kế hoạch làm mịn tối ưu.
Một cơ chế điều chỉnh tham số thích nghi có thể được đưa ra để điều chỉnh động các tham số dựa trên điều kiện thị trường để cải thiện độ vững chắc của chiến lược.
Chiến lược dừng lỗ và lấy lợi nhuận có thể được thiết kế để giảm rủi ro mất một lần và khóa lợi nhuận cùng một lúc.
Nó có thể được kết hợp với các mô hình học máy khác để đạt được danh mục đầu tư mô hình và sử dụng các mô hình khác để lọc tín hiệu giao dịch.
Chiến lược này thiết kế một tín hiệu giao dịch làm mịn chiến lược giao dịch chu kỳ ảo của Ehlers thông qua làm mịn tín hiệu giá và tính toán chỉ số chu kỳ ảo của Ehlers. Nó có thể lọc hiệu quả tiếng ồn và tạo ra các tín hiệu giao dịch đáng tin cậy hơn. Đồng thời, không gian tham số lớn và hiệu suất thực tế tốt. Bằng cách giới thiệu các cơ chế thích nghi, chiến lược dừng lỗ và tối ưu hóa khác, sự ổn định và hiệu quả của chiến lược có thể được tăng thêm.
/*backtest start: 2024-01-19 00:00:00 end: 2024-02-18 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1) src = input(hl2, title = "Source") alpha = input(.07, title = "Alpha") lag = input(9, title = "Lag") smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6 cycle = na if na(cycle[7]) cycle := (src - 2 * src[1] + src[2]) / 4 else cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2] alpha2 = 1 / (lag + 1) signal = na signal := alpha2 * cycle + (1 - alpha2) * nz(signal[1]) oppositeTrade = input(true) barsSinceEntry = 0 barsSinceEntry := nz(barsSinceEntry[1]) + 1 if strategy.position_size == 0 barsSinceEntry := 0 if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1])) strategy.entry("Long", strategy.long) barsSinceEntry := 0 if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1])) strategy.entry("Short", strategy.short) barsSinceEntry := 0 if strategy.openprofit < 0 and barsSinceEntry > 8 strategy.close_all() barsSinceEntry := 0 plot(0, title="ZeroLine", color=gray) plotSrc = signal cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue) triggerPlot = plot(plotSrc[1], title = "Trigger", color = green) fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)