Strategi Dagangan JMA Melalui RSI

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

Ringkasan

Strategi ini menghasilkan isyarat perdagangan dengan menyeberangi Jurik Moving Average (JMA) dan penunjuk RSI. Ia pergi lama apabila JMA melintasi di atas RSI dan pergi pendek apabila melintasi di bawah. Strategi ini cuba menapis isyarat palsu dengan menggabungkan dua penunjuk, dan perdagangan apabila trend lebih jelas.

Prinsip-prinsip

Strategi ini terutamanya menggunakan dua jenis penunjuk:

  1. Penunjuk JMA: Purata bergerak yang halus menggunakan pengganda kuasa, dengan kelewatan yang lebih rendah dan lebih cepat dalam menangkap perubahan harga.

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

Apabila JMA melintasi di atas RSI, ia menunjukkan trend kenaikan jangka pendek yang lebih kuat daripada trend jangka panjang dan menghasilkan isyarat beli.

Pada isyarat, strategi memasuki perdagangan ke arah yang sesuai. Keluar apabila harga mencapai nisbah keuntungan yang telah ditentukan atau penunjuk melintasi arah sebaliknya.

Kelebihan

  1. Parameter JMA yang boleh disesuaikan untuk tempoh yang berbeza.

  2. RSI menapis pelarian palsu.

  3. Gabungan dua penunjuk mengurangkan isyarat palsu.

  4. Terbina dalam kawalan stop loss kehilangan.

  5. Nisbah keuntungan yang boleh disesuaikan untuk penargetan keuntungan.

Risiko dan Pengurangan

  1. Kombo dua indikator mungkin menghasilkan terlalu sedikit isyarat.

  2. JMA masih mempunyai kelewatan, mungkin terlepas titik perubahan.

  3. Penempatan stop loss yang tidak betul mungkin akan menyebabkan kerugian yang lebih besar.

  4. Terlalu bergantung pada penunjuk boleh menghasilkan isyarat palsu. boleh menambah jumlah atau penapis turun naik.

Peluang Peningkatan

  1. Uji parameter JMA untuk mencari tetapan optimum.

  2. Cuba parameter RSI yang berbeza untuk prestasi yang lebih baik.

  3. Tambah mekanisme penghentian untuk penghentian adaptif.

  4. Mengoptimumkan saiz kedudukan kemasukan seperti menambah perdagangan yang menang.

  5. Cari penapis tambahan seperti KD, MACD.

Ringkasan

Strategi ini membolehkan trend mengikuti dengan persimpangan JMA dan RSI dan mengehadkan risiko melalui berhenti. Tetapi isyarat palsu masih mungkin, memerlukan pengoptimuman lebih lanjut pada parameter dan penapis. Stop loss juga memerlukan pengesahan backtest. Ia menyediakan rangka kerja asas untuk sistem persimpangan penunjuk dua dengan ruang untuk penambahbaikan.


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