Chiến lược giao dịch định lượng chu kỳ ngẫu nhiên Ehlers


Ngày tạo: 2024-01-17 16:03:30 sửa đổi lần cuối: 2024-01-17 16:03:30
sao chép: 0 Số nhấp chuột: 793
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng chu kỳ ngẫu nhiên Ehlers

Tổng quan

Chiến lược chu kỳ ngẫu nhiên của Ells là một chiến lược giao dịch định lượng sử dụng chỉ số chu kỳ ngẫu nhiên của Ells để tạo ra tín hiệu giao dịch. Chiến lược này kết hợp các ưu điểm của chỉ số ngẫu nhiên và chỉ số chu kỳ để nắm bắt cơ hội chu kỳ trong thị trường.

Nguyên tắc chiến lược

Chiến lược này đầu tiên xây dựng một chỉ số chu kỳ mượt mà, sau đó xây dựng một giá trị chỉ số ngẫu nhiên dựa trên chỉ số đó. Sự ra đời của tín hiệu giao dịch được xác định dựa trên sự chéo của moving average của giá trị chỉ số ngẫu nhiên này.

Cụ thể, phương pháp tính toán của chỉ số chu kỳ mịn là:

smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6

Trong đó src là dữ liệu giá nhập, chẳng hạn như giá đóng cửa. Chỉ số này kết hợp giá hiện tại và giá trong 3 khoảng thời gian trước để tạo ra một tín hiệu chu kỳ mịn màng.

Dựa trên chỉ số được làm mịn, sau đó có thể tính toán chu kỳ chỉ số ngẫu nhiê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 bao gồm phân số phân số thứ hai của tín hiệu chu kỳ sau khi làm mịn, và giá trị của hai chu kỳ trước đó. α là nhân tố làm mịn, điều chỉnh trọng lượng của giá trị chu kỳ mới và cũ.

Cuối cùng, dựa trên chỉ số chu kỳ này, một giá trị ngẫu nhiên 0-100 value1 được tính. Và dựa trên giá trị trung bình di chuyển 10 ngày của value1 để xây dựng tín hiệu.

Lợi thế chiến lược

Chiến lược này kết hợp các chỉ số ngẫu nhiên và các chỉ số chu kỳ, tổng hợp các ưu điểm của cả hai. So với các chiến lược xu hướng như trung bình di chuyển đơn giản, chiến lược này có thể nắm bắt cơ hội chu kỳ tốt hơn, do đó có hiệu quả tốt hơn.

Những ưu điểm chính là:

  1. Chỉ số chu kỳ có thể xác định mô hình vòng lặp, chỉ số ngẫu nhiên cung cấp thời gian giao dịch xFB
  2. Thiết kế chỉ số kép, có thể lọc hiệu quả các tín hiệu giả
  3. Các tham số có thể tùy chỉnh để thích ứng với các môi trường thị trường khác nhau

Rủi ro chiến lược

Chiến lược này có những rủi ro:

  1. Thiết lập tham số không đúng có thể dẫn đến giao dịch thường xuyên, tăng phí giao dịch và chi phí điểm trượt
  2. Không có khả năng xử lý hiệu quả thị trường biến động giá mạnh, có thể gây ra tổn thất lớn
  3. Chỉ số chu kỳ phụ thuộc mạnh vào sự phù hợp của đường cong, sự phù hợp không đúng có thể tạo ra tín hiệu sai

Bạn có thể kiểm soát rủi ro bằng cách thiết lập tham số tối ưu hóa, thiết lập điểm dừng lỗ và kết hợp các chỉ số lọc khác.

Hướng tối ưu hóa chiến lược

Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:

  1. Bộ lọc tín hiệu kết hợp với các chỉ số kỹ thuật khác, chẳng hạn như Blink, RSI, để giảm tín hiệu sai
  2. Tham gia vào cơ chế thoát thích ứng, điều chỉnh điểm dừng động theo mức độ biến động của 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 tham số để có thể thích ứng với thị trường
  4. Tối ưu hóa sử dụng vốn, tăng hiệu quả sử dụng vốn thông qua các phương tiện như đòn bẩy, lợi nhuận

Tóm tắt

Chiến lược chu kỳ ngẫu nhiên của Ells sử dụng lợi thế của chỉ số ngẫu nhiên và chỉ số chu kỳ để kiểm soát rủi ro hiệu quả thông qua thiết kế tín hiệu kép, có thể thu được lợi nhuận tốt hơn trong thị trường có tính chu kỳ mạnh mẽ. Với tối ưu hóa hơn nữa, chiến lược này có thể trở thành một chiến lược giao dịch định lượng đáng được đề xuất.

Mã nguồn chiến lược
/*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)