Strategi ini menghasilkan isyarat beli dan jual melalui persilangan Jurik Moving Average (JMA) dengan RSI. Ia adalah lebih tinggi apabila JMA melintasi RSI dan lebih rendah apabila JMA melintasi RSI. Strategi ini cuba menggunakan gabungan kedua-dua indikator untuk menyaring isyarat palsu dan berdagang apabila trend lebih jelas.
Strategi ini menggunakan gabungan dua indikator utama:
Indeks JMA: satu purata bergerak yang dilapisi dengan penggandaan kalium, yang mempunyai keterlambatan yang lebih rendah dan dapat menangkap perubahan harga lebih cepat.
RSI: Indikator kekuatan lemah yang lebih biasa, yang mencerminkan daya beli pasaran.
Apabila JMA melepasi RSI, menunjukkan momentum kenaikan harga jangka pendek lebih kuat daripada trend jangka panjang, menghasilkan isyarat beli; apabila JMA melepasi RSI, isyarat tandas kosong.
Selepas isyarat silang dikeluarkan, perdagangan membuka kedudukan di arah yang sesuai. Syarat kedudukan kosong adalah harga melebihi peratusan sasaran yang ditetapkan atau penunjuk silang berbalik lagi.
Parameter penunjuk JMA boleh disesuaikan dan dapat dioptimumkan untuk kitaran yang berbeza.
Indeks RSI boleh disaring untuk penembusan palsu.
Menggunakan gabungan dua indikator dapat mengurangkan isyarat palsu.
Mekanisme terbina dalam untuk mengehadkan kerugian
Anda boleh menyesuaikan nisbah keuntungan untuk mencapai matlamat keuntungan.
Inating gabungan dua penunjuk, frekuensi menghasilkan isyarat mungkin terlalu rendah. Parameter boleh disesuaikan untuk membuat penunjuk lebih sensitif.
Indeks JMA juga mempunyai masalah ketinggalan dan mungkin terlepas titik perubahan harga. Ia boleh dioptimumkan dengan gabungan petunjuk utama lain.
Tetapan titik berhenti yang tidak betul boleh ditembusi dan menyebabkan kerugian berkembang. Titik berhenti yang sesuai harus ditentukan berdasarkan ujian data sejarah.
Hanya bergantung pada petunjuk yang mudah menghasilkan isyarat palsu. Anda boleh menapis dengan jumlah dagangan atau indikator kadar turun naik.
Uji parameter JMA untuk mencari kombinasi parameter terbaik.
Cuba Setting parameter RSI yang berbeza untuk mengoptimumkan kesan indikator.
Menambah mekanisme penangguhan kerugian bergerak untuk menjadikan penangguhan kerugian lebih fleksibel.
Mengoptimumkan logik pengurusan gudang terbuka, seperti menambah syarat gudang tambahan dan pembinaan kumpulan.
Kajian terhadap isyarat penapis lain, seperti KD, MACD dan lain-lain.
Strategi ini berdasarkan kepada JMA dan RSI dua penunjuk salib untuk mewujudkan trend mengikuti, boleh dikonfigurasi untuk menghentikan kerugian untuk mengehadkan risiko. Tetapi masih terdapat kemungkinan tertentu isyarat palsu, perlu terus mengoptimumkan parameter penunjuk dan syarat penapisan untuk mengurangkan perdagangan yang salah.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Stratégie marche le mieux sur du 2 jours
strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000)
// Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(06, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true
// Strategy Tester End Time
eYear = input(2019, title = "End Year")
eMonth = input(12, title = "End Month", minval = 01, maxval = 12)
eDay = input(01, title = "End Day", minval = 01, maxval = 31)
eHour = input(00, title = "End Hour", minval = 00, maxval = 23)
eMinute = input(00, title = "End Minute", minval = 00, maxval = 59)
endTime = true
// === RSI ===
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=color.purple)
band1 = hline(70)
band0 = hline(30)
// === JMA ===
_length = input(7, title="Length")
_phase = input(50, title="Phase")
_power = input(2, title="Power")
highlightMovements = input(true, title="Highlight Movements ?")
// srcJMA = input(rsi, title="Source")
srcJMA = rsi
phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
alpha = pow(beta, _power)
jma = 0.0
e0 = 0.0
e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1])
e1 = 0.0
e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
jma := e2 + nz(jma[1])
// === End of JMA def ===
jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f
plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0)
// === Inputs ===
// risk management
useStop = input(true, title = "Use Initial Stop Loss?")
goLong() => crossover(rsi, jma)
killLong() => crossunder(rsi, jma)
// ======= DEBUGGGGGGGG ============
long_price = 0.0
short_price = 0.0
if(startTime and endTime)
if(goLong())
long_price := close
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong() and close > long_price)
// Shorting if using
goShort() => killLong()
killShort() => goLong()
if(startTime and endTime)
if(goShort())
short_price := close
strategy.entry("Sell", strategy.short, when = goShort() and close < short_price)
strategy.close("Sell", when = killShort())
// =========================
if (useStop)
strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08)
strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)