Strategi perdagangan persilangan indikator JMA dan RSI


Tanggal Pembuatan: 2023-09-18 21:42:50 Akhirnya memodifikasi: 2023-09-18 21:42:50
menyalin: 0 Jumlah klik: 1340
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menghasilkan sinyal jual beli melalui persilangan Jurik Moving Average (JMA) dengan indikator RSI. Strategi ini mencoba menggunakan kombinasi dua indikator untuk memfilter sinyal palsu dan melakukan perdagangan ketika tren lebih jelas.

Prinsip

Strategi ini menggunakan kombinasi dari dua indikator:

  1. Indikator JMA: Sebuah rata-rata bergerak yang lebih halus dengan perkalian kalium, memiliki keterlambatan yang lebih rendah, dan dapat menangkap perubahan harga lebih cepat.

  2. Indikator RSI: Indikator kekuatan lemah yang lebih umum, yang mencerminkan pergerakan pasar.

Ketika JMA di atas RSI, menunjukkan momentum kenaikan harga jangka pendek lebih kuat dari tren jangka panjang, menghasilkan sinyal beli; ketika JMA di bawah RSI, menunjukkan sinyal shorting.

Setelah sinyal cross keluar, perdagangan membuka posisi di arah yang berlawanan. Kondisi posisi kosong adalah harga melebihi proporsi target yang ditentukan atau indikator cross kembali.

Keunggulan

  1. Parameter indikator JMA dapat disesuaikan dan dapat dioptimalkan untuk siklus yang berbeda.

  2. Indeks RSI dapat disaring untuk false breakout.

  3. Menggunakan kombinasi dua indikator dapat mengurangi sinyal palsu.

  4. Ada juga fitur built-in stop loss yang dapat membatasi kerugian.

  5. Anda dapat menyesuaikan rasio keuntungan untuk mencapai tujuan keuntungan.

Risiko dan Solusi

  1. Inating kombinasi dua indikator, frekuensi sinyal yang dihasilkan mungkin terlalu rendah. Parameter dapat disesuaikan untuk membuat indikator lebih sensitif.

  2. Indikator JMA juga memiliki masalah keterlambatan dan mungkin melewatkan titik balik harga. Dapat dioptimalkan dengan kombinasi dengan indikator pivot lainnya.

  3. Setting stop loss yang tidak tepat dapat ditembus dan menyebabkan peningkatan kerugian. Stop loss yang tepat harus ditentukan berdasarkan tes data sejarah.

  4. Hanya mengandalkan indikator yang mudah menghasilkan sinyal palsu. Anda dapat menambahkan volume perdagangan atau indikator volatilitas untuk memfilter.

Optimalkan Pikiran

  1. Tes parameter JMA untuk menemukan kombinasi parameter yang optimal.

  2. Cobalah berbagai pengaturan parameter RSI untuk mengoptimalkan efek indikator.

  3. Menambahkan mekanisme mobile stop loss untuk membuat stop loss lebih adaptif.

  4. Mengoptimalkan logika manajemen gudang terbuka, seperti menambahkan kondisi gudang tambahan dan batch.

  5. Studi terhadap indikator lain seperti KD, MACD dan lain-lain.

Meringkaskan

Strategi ini didasarkan pada JMA dan RSI dua indikator silang untuk mewujudkan trend tracking, dapat dikonfigurasi stop loss untuk membatasi risiko. Namun, masih ada probabilitas tertentu sinyal palsu, perlu terus mengoptimalkan parameter indikator dan kondisi penyaringan untuk mengurangi kehilangan perdagangan. Strategi stop loss juga perlu dilakukan tes optimasi berdasarkan data pengukuran kembali.

Kode Sumber Strategi
/*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)