Strategi dagangan penunjuk RSI silang penunjuk JMA


Tarikh penciptaan: 2023-09-18 21:42:50 Akhirnya diubah suai: 2023-09-18 21:42:50
Salin: 0 Bilangan klik: 1340
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

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.

Prinsip

Strategi ini menggunakan gabungan dua indikator utama:

  1. Indeks JMA: satu purata bergerak yang dilapisi dengan penggandaan kalium, yang mempunyai keterlambatan yang lebih rendah dan dapat menangkap perubahan harga lebih cepat.

  2. 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.

Kelebihan

  1. Parameter penunjuk JMA boleh disesuaikan dan dapat dioptimumkan untuk kitaran yang berbeza.

  2. Indeks RSI boleh disaring untuk penembusan palsu.

  3. Menggunakan gabungan dua indikator dapat mengurangkan isyarat palsu.

  4. Mekanisme terbina dalam untuk mengehadkan kerugian

  5. Anda boleh menyesuaikan nisbah keuntungan untuk mencapai matlamat keuntungan.

Risiko dan Penyelesaian

  1. Inating gabungan dua penunjuk, frekuensi menghasilkan isyarat mungkin terlalu rendah. Parameter boleh disesuaikan untuk membuat penunjuk lebih sensitif.

  2. Indeks JMA juga mempunyai masalah ketinggalan dan mungkin terlepas titik perubahan harga. Ia boleh dioptimumkan dengan gabungan petunjuk utama lain.

  3. Tetapan titik berhenti yang tidak betul boleh ditembusi dan menyebabkan kerugian berkembang. Titik berhenti yang sesuai harus ditentukan berdasarkan ujian data sejarah.

  4. Hanya bergantung pada petunjuk yang mudah menghasilkan isyarat palsu. Anda boleh menapis dengan jumlah dagangan atau indikator kadar turun naik.

Optimum idea

  1. Uji parameter JMA untuk mencari kombinasi parameter terbaik.

  2. Cuba Setting parameter RSI yang berbeza untuk mengoptimumkan kesan indikator.

  3. Menambah mekanisme penangguhan kerugian bergerak untuk menjadikan penangguhan kerugian lebih fleksibel.

  4. Mengoptimumkan logik pengurusan gudang terbuka, seperti menambah syarat gudang tambahan dan pembinaan kumpulan.

  5. Kajian terhadap isyarat penapis lain, seperti KD, MACD dan lain-lain.

ringkaskan

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.

Kod 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)