Chiến lược này thiết kế một chiến lược giao dịch vòng tròn của Els để làm mịn các tín hiệu giao dịch bằng cách tính toán các tín hiệu giá được xử lý trơn tru, kết hợp với lý thuyết chỉ số vòng tròn của Ehlers. Chiến lược này có thể lọc hiệu quả tiếng ồn thị trường và tạo ra tín hiệu giao dịch đáng tin cậy hơn.
Các tín hiệu giá nguyên thủysrc được xử lý bằng phẳng thứ hai, để có được tín hiệu mịn.
Tính toán chỉ số chu kỳ dựa trên tín hiệu mịn. Cách tính là: cycle := (1 - .5 alpha) (1 - .5 alpha) (smooth - 2 smooth[1] + smooth[2]) + 2 (1 - alpha) cycle[1] - (1 - alpha) (1 - alpha) * cycle[2]
Trong đó α là tham số mịn.
Trong đó α2 là tham số phẳng một cấp.
Bằng cách làm mịn các tín hiệu giá ở cấp hai, các tín hiệu giao dịch có thể được làm đáng tin cậy hơn bằng cách lọc hiệu quả tiếng ồn tần số cao.
Ứng dụng lý thuyết chỉ số vòng tròn của Els, bạn có thể xác định chính xác hơn điểm chuyển đổi của xu hướng thị trường.
Chỉ số một giai đoạn sẽ lọc một phần tiếng ồn trong các chỉ số tuần hoàn, tạo ra tín hiệu giao dịch đáng tin cậy hơn.
Toàn bộ quy trình chiến lược là hợp lý, khoa học, có rất nhiều không gian để tối ưu hóa các tham số và màn hình thực tế hoạt động tốt.
Giống như các chiến lược chỉ số kỹ thuật khác, chiến lược này cũng nhạy cảm với rủi ro hệ thống của thị trường. Trong trường hợp xảy ra một sự cố thiên bạch đen lớn, có thể gây ra tổn thất lớn.
Do quá trình tính toán phức tạp, thiết lập tham số không chính xác có thể gây ra sự chậm trễ trong tính toán, do đó ảnh hưởng đến hiệu quả của ổ cứng. Cần kiểm tra cẩn thận để đảm bảo rằng thiết lập tham số hợp lý về khoa học.
Việc xử lý trơn tru cũng có thể dẫn đến sự chậm trễ của tín hiệu giao dịch, có thể không thể nắm bắt được các điểm biến đổi của thị trường kịp thời, do đó bỏ lỡ cơ hội. Cần cân bằng các thiết lập tham số trơn tru.
Có thể thử nghiệm các loại thuật toán mài mòn khác nhau, chẳng hạn như mài mòn chỉ số bậc một, mài mòn đường trung bình, để tìm ra giải pháp mài mòn tối ưu.
Có thể giới thiệu cơ chế điều chỉnh tham số thích ứng, điều chỉnh các tham số động theo tình hình thị trường, tăng cường tính mạnh mẽ của chiến lược.
Có thể thiết kế các chiến lược dừng lỗ và dừng lại để giảm nguy cơ mất mát đơn lẻ, đồng thời khóa lợi nhuận.
Mô hình học máy có thể kết hợp các mô hình khác, thực hiện các mô hình kết hợp, 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 chiến lược giao dịch vòng tròn của Els bằng cách làm mịn tín hiệu giá và tính toán các chỉ số vòng tròn của Els. Chiến lược này có thể lọc nhiễu hiệu quả và tạo ra tín hiệu giao dịch đáng tin cậy hơn. Ngoài ra, có nhiều tham số và hiệu quả tốt.
/*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)