
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.
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.
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à:
Chiến lược này có những rủi ro:
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.
Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:
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.
/*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)