
Strategi ini didasarkan pada Ells-Fisher Random Relative Dynamics Index yang dikemukakan oleh John Ehlers dalam buku analisis kontrolnya tentang saham dan futures. Strategi ini menggunakan Ells-Fisher Index untuk menilai kekuatan relatif saham dan menggabungkan aturan perdagangan yang disesuaikan untuk membeli dan menjual.
Strategi ini pertama-tama menghitung harga penutupan - harga pembukaan, yaitu bagian entitas saham. Kemudian menghitung harga tinggi - harga rendah, yaitu bagian garis bayangan saham. Menghitung momentum saham dengan menghitung rata-rata kedua bagian tersebut secara terpisah.
Selanjutnya, menggunakan rumus perhitungan dari indeks Ells-Fisher untuk RVI, untuk mendapatkan nilai sinyal. Ketika nilai sinyal di atas melewati nilai pemicu, lakukan lebih banyak, dan kosong ketika di bawah melewati. Selain itu, juga mengatur stop loss tetap dan tracking stop loss untuk mengontrol risiko.
Strategi ini memanfaatkan karakteristik dinamis saham dan indikator acak untuk menilai kekuatan relatif pasar. Desain indikator Ells-Fisher mengurangi dampak kebisingan dan menghasilkan sinyal perdagangan yang lebih andal. Indeks dinamis mencerminkan tren dan volatilitas saham itu sendiri, dan merupakan indikator dinamis.
Strategi ini melakukan penggabungan organik antara indikator dan model yang dapat meningkatkan kualitas sinyal dibandingkan dengan penggunaan indikator dinamis atau acak tunggal. Dengan aturan stop loss yang ketat, strategi ini juga memungkinkan pengendalian risiko dengan asumsi bahwa profitabilitas terjamin.
Strategi ini terutama bergantung pada indikator Ells-Fisher. Parameter indikator perlu dioptimalkan untuk menyesuaikan diri dengan lingkungan baru ketika pasar mengalami perubahan besar. Jika parameter indikator tidak disetel dengan benar, akan menghasilkan sinyal yang salah atau sinyal yang tertinggal.
Selain itu, ada juga risiko penyesuaian kurva pada strategi itu sendiri. Jika ada perubahan besar dalam lingkungan pasar dalam pengujian dan real-time, kinerja strategi dapat menghasilkan deviasi besar. Saat ini perlu menyesuaikan parameter strategi atau mengoptimalkan aturan perdagangan untuk menyesuaikan diri dengan kondisi pasar baru.
Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:
Parameter yang dioptimalkan untuk indeks Ells-Fisher, yang membuatnya lebih sensitif atau memfilter kebisingan.
Menggunakan algoritma pembelajaran mesin untuk memodelkan indikator seperti LSTM untuk menghasilkan sinyal perdagangan yang lebih andal.
Dengan menggunakan indikator volatilitas pasar seperti ATR, stop loss distance dapat disesuaikan secara dinamis.
Menambahkan dukungan untuk model multi-faktor, mengintegrasikan indikator teknis lainnya dan indikator fundamental untuk meningkatkan kualitas sinyal.
Mengoptimalkan logika pembukaan posisi, mengatur kondisi keluar masuk yang dinamis. Memperkenalkan teknologi stop loss dan stop loss yang beradaptasi.
Strategi ini menggunakan indikator Relative Dynamics Index (RDI) Ells-Fischer acak untuk menilai tren dan kekuatan pasar, mengatur mekanisme pengendalian kerugian yang masuk akal dan risiko. Dibandingkan dengan indikator tunggal, strategi ini melakukan kombinasi organik dari beberapa indikator dan model, yang dapat memfilter kebisingan untuk memberikan sinyal berkualitas tinggi.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ehlers Fisher Stochastic Relative Vigor Index 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)
p = input(10, title = "Length")
FisherStoch(src, len) =>
val1 = stoch(src, src, src, len) / 100
val2 = (4 * val1 + 3 * val1[1] + 2 * val1[2] + val1[3]) / 10
FisherStoch = 0.5 * log((1 + 1.98 * (val2 - 0.5)) / (1 - 1.98 * (val2 - 0.5))) / 2.64
CO = close - open
HL = high - low
value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6
num = sum(value1, p)
denom = sum(value2, p)
RVI = denom != 0 ? num / denom : 0
signal = FisherStoch(RVI, p)
trigger = signal[1]
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
barsSinceEntry := 0
if ((crossover(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossunder(signal, trigger))) and abs(signal) > 2 / 2.64
strategy.entry("Long", strategy.long)
barsSinceEntry := 0
if ((crossunder(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossover(signal, trigger))) and abs(signal) > 2 / 2.64
strategy.entry("Short", strategy.short)
barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
strategy.close_all()
barsSinceEntry := 0
hline(0, title="ZeroLine", color=gray)
signalPlot = plot(signal, title = "Signal", color = blue)
triggerPlot = plot(trigger, title = "Trigger", color = green)
fill(signalPlot, triggerPlot, color = signal < trigger ? red : lime, transp = 50)