Chiến lược chu kỳ mạng Stochastic Ehlers

Tác giả:ChaoZhang, Ngày: 2024-01-17 16:03:30
Tags:

img

Tổng quan

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 logic

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.

Ưu điểm của Chiến lược

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à:

  1. Các chỉ số chu kỳ có thể xác định các mô hình chu kỳ, các chỉ số chứng khoán cung cấp các cơ hội giao dịch
  2. Thiết kế chỉ số kép có thể lọc hiệu quả các tín hiệu sai
  3. Các tham số có thể tùy chỉnh phù hợp với môi trường thị trường khác nhau

Rủi ro của chiến lược

Những rủi ro chính của chiến lược này là:

  1. Cài đặt tham số không chính xác có thể dẫn đến giao dịch thường xuyên, tăng chi phí giao dịch và chi phí trượt
  2. Không thể xử lý hiệu quả các thị trường với biến động giá mạnh mẽ có thể dẫn đến tổn thất lớn
  3. Các chỉ số chu kỳ phụ thuộc rất nhiều vào việc lắp xếp đường cong, lắp đặt không đúng có thể tạo ra tín hiệu sai

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.

Hướng dẫn tối ưu hóa

Chiến lược này cũng có thể được tối ưu hóa trong các khía cạnh sau:

  1. Kết hợp với các chỉ số kỹ thuật khác để lọc tín hiệu, chẳng hạn như Bollinger Bands, RSI, v.v., để giảm tín hiệu sai
  2. Thêm cơ chế thoát adaptive, điều chỉnh động điểm dừng lỗ theo biến động thị trường
  3. Sử dụng các phương pháp học máy để tự động tối ưu hóa các thông số để thích nghi với thị trường một cách năng động
  4. Tối ưu hóa việc sử dụng vốn thông qua đòn bẩy, tổng hợp và các phương tiện khác

Kết luận

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)

Thêm nữa