
Strategi ini adalah berdasarkan kepada Indeks Relatif Daya Tarik Ells-Fisher Random yang dikemukakan oleh John Ells dalam buku analisis kawalan saham dan niaga hadapan beliau. Strategi ini menggunakan Indeks Relatif Daya Tarik Ells-Fisher untuk menilai kekuatan relatif saham dan menggabungkan peraturan perdagangan yang disesuaikan untuk membeli dan menjual.
Strategi ini pertama-tama mengira harga penutupan - harga pembukaan, iaitu bahagian entiti saham. Kemudian menghitung harga tinggi - harga rendah, iaitu bahagian garis bayangan saham. Menghitung momentum saham dengan menambahkan dan mengambil purata kedua-dua bahagian tersebut.
Kemudian, formula pengiraan Ells-Fisher digunakan untuk RVI, untuk mendapatkan nilai isyarat. Apabila nilai isyarat melebihi nilai pemicu, ia kosong. Selain itu, ia juga menetapkan stop loss tetap dan stop loss pengesanan untuk mengawal risiko.
Strategi ini menggunakan ciri-ciri dinamik saham dan petunjuk rawak untuk menilai kekuatan relatif pasaran. Reka bentuk indeks Ehlers-Fischer dapat mengurangkan kesan bunyi dan menghasilkan isyarat perdagangan yang lebih dipercayai. Indeks dinamik mencerminkan kecenderungan dan turun naik saham itu sendiri, sebagai penunjuk dinamik.
Strategi ini menggunakan gabungan organik antara indikator dan model yang dapat meningkatkan kualiti isyarat berbanding dengan penggunaan indikator dinamik atau acak secara tunggal. Peraturan berhenti rugi yang ketat juga membolehkan strategi ini mengawal risiko dengan syarat memastikan keuntungan.
Strategi ini bergantung kepada penunjuk Erles-Fisher, parameter penunjuk perlu dioptimumkan untuk menyesuaikan diri dengan keadaan baru apabila pasaran berubah secara mendadak. Jika parameter penunjuk tidak ditetapkan dengan betul, ia akan menghasilkan isyarat yang salah atau isyarat yang terlewat.
Di samping itu, strategi itu sendiri juga mempunyai tahap risiko penyesuaian kurva. Jika keadaan pasaran dalam ujian dan dalam permainan nyata berubah dengan ketara, prestasi strategi mungkin menghasilkan penyimpangan yang besar.
Strategi ini boleh dioptimumkan dengan cara berikut:
Parameter yang dioptimumkan untuk ERS-Fisher untuk menjadikannya lebih sensitif atau menapis bunyi.
Menggunakan algoritma pembelajaran mesin untuk memodelkan petunjuk seperti LSTM untuk menghasilkan isyarat perdagangan yang lebih dipercayai.
Menggabungkan indikator turun naik pasaran seperti ATR untuk menyesuaikan jarak henti secara dinamik.
Menambah sokongan untuk model pelbagai faktor, menggabungkan petunjuk teknikal dan asas untuk meningkatkan kualiti isyarat.
Mengoptimumkan logik pembukaan kedudukan kosong, menetapkan syarat kemasukan keluar secara dinamik. Memperkenalkan teknologi hentian dan hentian hentian yang beradaptasi.
Strategi ini menggunakan indikator Indeks Relatif Dinamika Ells-Fisher secara rawak untuk menilai trend dan kelemahan pasaran, menetapkan mekanisme kawalan kerugian yang munasabah. Berbanding dengan indikator tunggal, strategi ini melakukan gabungan organik pelbagai indikator dan model, yang dapat menyaring bunyi bising dan memberikan isyarat berkualiti 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)