
Strategi siklus acak Ells adalah strategi perdagangan kuantitatif yang menggunakan indikator siklus acak Ells untuk menghasilkan sinyal perdagangan. Strategi ini menggabungkan keunggulan indikator acak dan indikator siklus untuk menangkap peluang berkala di pasar.
Strategi ini pertama-tama membangun sebuah indikator siklus halus, kemudian membangun sebuah nilai indikator acak berdasarkan indikator tersebut. Produksi sinyal perdagangan ditentukan berdasarkan persilangan rata-rata bergerak dari nilai indikator acak ini.
Secara khusus, metode perhitungan indikator siklus halus adalah:
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
Di mana src adalah data harga input, seperti harga penutupan. Indikator ini menggabungkan harga saat ini dengan harga 3 periode sebelumnya untuk membangun sinyal siklus yang halus.
Berdasarkan indikator smoothed, maka dapat dihitung siklus indikator acak:
cycle := (1 - .5 * alpha) * (1 - .5 * alpha) *
(smooth - 2 * smooth[1] + smooth[2]) +
2 * (1 - alpha) * cycle[1] -
(1 - alpha) * (1 - alpha) * cycle[2]
Perhitungan ini mencakup diferensial dua kelas dari sinyal siklus setelah smoothing, dan nilai dari dua siklus sebelumnya. α adalah faktor smoothing, yang mengatur berat dari nilai siklus baru dan lama.
Akhirnya, berdasarkan indikator siklus ini, sebuah nilai acak 0-100 value1 dihitung dan berdasarkan nilai 1 dari 10 hari moving average untuk membangun nilai sinyal signal. Ketika sinyal melewati atau di bawah rata-rata bergerak, sinyal perdagangan dikeluarkan.
Strategi ini menggabungkan indikator acak dan indikator berkala, menggabungkan keunggulan keduanya. Strategi ini dapat menangkap peluang berkala dengan lebih baik dan menghasilkan hasil yang lebih baik daripada strategi tren seperti rata-rata bergerak sederhana.
Keunggulan utama:
Strategi ini memiliki risiko utama sebagai berikut:
Risiko dapat dikendalikan dengan cara seperti pengaturan parameter optimasi, pengaturan titik berhenti, dan kombinasi dengan indikator penyaringan lainnya.
Strategi ini juga dapat dioptimalkan dari beberapa arah:
Strategi periodik acak Ells menggabungkan keuntungan dari indikator acak dan indikator periodik, dengan kontrol risiko yang efektif melalui desain sinyal ganda, mampu mendapatkan hasil yang lebih baik di pasar yang lebih kuat secara periodik. Dengan optimasi lebih lanjut, strategi ini dapat menjadi strategi perdagangan kuantitatif yang disarankan.
/*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)