Chiến lược chu kỳ chứng khoán của Ehlers là một chiến lược giao dịch định lượng tạo ra các tín hiệu giao dịch bằng cách sử dụng chỉ số chu kỳ chứng khoán của Ehlers.
Chiến lược này đầu tiên xây dựng một chỉ số chu kỳ trơn tru, sau đó xây dựng một giá trị chỉ số chứng khoán dựa trên chỉ số đó.
Cụ thể, chỉ số chu kỳ làm mịn được tính như sau:
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
Trong đó src là dữ liệu giá đầu vào, chẳng hạn như giá đóng cửa. chỉ số này kết hợp giá hiện tại và giá của 3 khoảng thời gian trước để xây dựng một tín hiệu chu kỳ trơn tru.
Dựa trên chỉ số trơn tru này, chu kỳ chu kỳ ngẫu nhiên sau đó có thể được tính toán:
cycle := (1 - .5 * alpha) * (1 - .5 * alpha) *
(smooth - 2 * smooth[1] + smooth[2]) +
2 * (1 - alpha) * cycle[1] -
(1 - alpha) * (1 - alpha) * cycle[2]
Công thức tính toán này chứa sự khác biệt thứ hai của tín hiệu định kỳ trơn, và các giá trị của hai chu kỳ trước. α là một yếu tố trơn điều chỉnh trọng lượng của các giá trị chu kỳ mới và cũ.
Cuối cùng, giá trị ngẫu nhiên 0-100 được tính dựa trên chỉ số chu kỳ này. Và tín hiệu giá trị tín hiệu được xây dựng dựa trên đường trung bình động 10 ngày của giá trị1.
Chiến lược này kết hợp các chỉ số chứng khoán và các chỉ số chu kỳ để tích hợp các lợi thế của cả hai. So với các chiến lược xu hướng đơn giản như đường trung bình động, chiến lược này có thể nắm bắt tốt hơn các cơ hội chu kỳ và do đó đạt được kết quả tốt hơn.
Những lợi thế chính là:
Những rủi ro chính của chiến lược này là:
Các rủi ro có thể được kiểm soát bằng cách tối ưu hóa các thiết lập tham số, thiết lập các điểm dừng lỗ, kết hợp các chỉ số lọc khác, v.v.
Chiến lược này cũng có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược Chu kỳ tin tức chứng khoán của Ehlers tích hợp các lợi thế của các chỉ số chứng khoán và chu kỳ thông qua thiết kế tín hiệu kép để kiểm soát rủi ro một cách hiệu quả và có thể đạt được lợi nhuận tốt trên các thị trường có tính chu kỳ mạnh.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers Stochastic 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 len = input(8, title = "Stochastic len") 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] value1 = stoch(cycle, cycle, cycle, len) / 100 value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5) signal = value2 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)