Strategi ini mengira isyarat harga yang halus berdasarkan teori kitaran siber yang dicadangkan oleh Ehlers untuk merancang strategi perdagangan dengan isyarat perdagangan yang halus.
Lemparkan isyarat harga asal src dengan pelembap urutan kedua untuk mendapatkan isyarat pelembap yang lancar.
Mengira kitaran penunjuk kitaran berdasarkan isyarat yang dihaluskan.Kaedah pengiraan ialah: kitaran:= (1 -.5alpha) (1 - .5 alpha)(lurus - 2halus[1] + halus[2]) + 2(1 - alfa)kitaran[1] - (1 - alfa)(1 - alfa) * kitaran[2]
di mana α adalah parameter pelembap.
Menghaluskan penunjuk kitaran secara eksponensial dengan penghalusan perintah pertama untuk mendapatkan isyarat isyarat perdagangan akhir. isyarat:= alpha2kitaran + (1 - alpha2)nz ((sinyal[1])
di mana α2 adalah parameter penghalusan peringkat pertama.
Panjang apabila isyarat melintasi isyarat[1]; Pendek apabila isyarat melintasi isyarat[1].
Penghapusan urutan kedua isyarat harga dapat menapis bunyi frekuensi tinggi dengan berkesan dan menjadikan isyarat perdagangan lebih boleh dipercayai.
Menggunakan teori kitaran siber Ehlers boleh menentukan dengan lebih tepat titik perubahan trend pasaran.
Penghapusan eksponensial peringkat pertama menapis beberapa bunyi bising dalam penunjuk kitaran untuk menghasilkan isyarat perdagangan yang lebih boleh dipercayai.
Seluruh proses strategi adalah munasabah dan saintifik, dengan ruang pengoptimuman parameter yang besar dan prestasi sebenar yang sangat baik.
Seperti strategi penunjuk teknikal yang lain, strategi ini juga agak sensitif terhadap risiko pasaran sistemik.
Oleh kerana proses pengiraan yang kompleks, tetapan parameter yang tidak betul boleh menyebabkan kelewatan pengiraan, sehingga mempengaruhi prestasi sebenar. Parameter perlu diuji dengan teliti untuk memastikan tetapan saintifik dan munasabah.
Pemprosesan yang lancar juga membawa kepada isyarat perdagangan yang tertinggal, yang mungkin gagal menangkap titik perubahan pasaran tepat pada masanya, sehingga kehilangan peluang.
Pelbagai jenis algoritma pelinciran boleh diuji, seperti pelinciran eksponen peringkat pertama, pelinciran purata bergerak, dan lain-lain, untuk mencari skema pelinciran yang optimum.
Mekanisme penyesuaian parameter adaptif boleh diperkenalkan untuk menyesuaikan parameter secara dinamik berdasarkan keadaan pasaran untuk meningkatkan ketahanan strategi.
Stop loss dan mengambil strategi keuntungan boleh direka untuk mengurangkan risiko kerugian tunggal dan mengunci keuntungan pada masa yang sama.
Ia boleh digabungkan dengan model pembelajaran mesin lain untuk mencapai portfolio model dan menggunakan model lain untuk menapis isyarat perdagangan.
Strategi ini merancang isyarat perdagangan yang meluruskan strategi perdagangan kitaran siber Ehlers melalui pelusukan isyarat harga dan pengiraan penunjuk kitaran siber Ehlers. Ia dapat menapis bunyi bising dengan berkesan dan menghasilkan isyarat perdagangan yang lebih boleh dipercayai. Pada masa yang sama, ruang parameter besar dan prestasi sebenar adalah baik. Dengan memperkenalkan mekanisme adaptif, strategi stop loss dan pengoptimuman lainnya, kestabilan dan keberkesanan strategi dapat ditingkatkan lagi.
/*backtest start: 2024-01-19 00:00:00 end: 2024-02-18 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers 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 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] alpha2 = 1 / (lag + 1) signal = na signal := alpha2 * cycle + (1 - alpha2) * nz(signal[1]) 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)