JMA Crossing RSI Strategi Perdagangan

Penulis:ChaoZhang, Tanggal: 2023-09-18 21:42:50
Tag:

Gambaran umum

Strategi ini menghasilkan sinyal perdagangan dengan melintasi Jurik Moving Average (JMA) dan indikator RSI. Ini akan panjang ketika JMA melintasi di atas RSI dan pergi pendek ketika melintasi di bawah. Strategi ini mencoba untuk menyaring sinyal palsu dengan menggabungkan dua indikator, dan perdagangan ketika tren lebih jelas.

Prinsip-prinsip

Strategi ini terutama menggunakan dua jenis indikator:

  1. Indikator JMA: Rata-rata bergerak yang halus menggunakan pengganda daya, dengan lag yang lebih rendah dan lebih cepat dalam menangkap perubahan harga.

  2. Indikator RSI: Indikator kekuatan umum yang mencerminkan momentum pembelian/penjualan.

Ketika JMA melintasi di atas RSI, itu menunjukkan tren naik jangka pendek yang lebih kuat daripada tren jangka panjang dan menghasilkan sinyal beli.

Setelah sinyal, strategi memasuki perdagangan ke arah yang sesuai. Keluar ketika harga mencapai rasio keuntungan yang telah ditentukan atau indikator melintasi arah terbalik.

Keuntungan

  1. Parameter JMA yang dapat disesuaikan dengan periode yang berbeda.

  2. RSI menyaring pelarian palsu.

  3. Kombinasi indikator ganda mengurangi sinyal palsu.

  4. Membangun stop loss kontrol kehilangan.

  5. Rasio keuntungan yang dapat disesuaikan untuk penargetan keuntungan.

Risiko dan Pengurangan

  1. Kombinasi indikator ganda mungkin menghasilkan terlalu sedikit sinyal.

  2. JMA masih memiliki keterlambatan, mungkin melewatkan titik balik.

  3. Penempatan stop loss yang tidak tepat dapat dipukul untuk kerugian yang lebih besar.

  4. Terlalu bergantung pada indikator dapat menghasilkan sinyal palsu.

Peluang Peningkatan

  1. Uji parameter JMA untuk menemukan pengaturan optimal.

  2. Cobalah parameter RSI yang berbeda untuk kinerja yang lebih baik.

  3. Tambahkan mekanisme trailing stop untuk adaptif stop.

  4. Mengoptimalkan ukuran posisi masuk seperti menambahkan ke perdagangan yang menang.

  5. Cari filter tambahan seperti KD, MACD.

Ringkasan

Strategi ini memungkinkan mengikuti tren dengan JMA dan RSI crossover dan membatasi risiko melalui stop. Tapi sinyal palsu tetap mungkin, yang membutuhkan optimasi lebih lanjut pada parameter dan filter. Stop loss juga membutuhkan validasi backtest. Ini memberikan kerangka dasar untuk sistem penyeberangan indikator ganda dengan ruang untuk perbaikan.


/*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)



Lebih banyak