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.
Strategi ini terutamanya menggunakan dua jenis penunjuk:
Penunjuk JMA: Purata bergerak yang halus menggunakan pengganda kuasa, dengan kelewatan yang lebih rendah dan lebih cepat dalam menangkap perubahan harga.
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.
Parameter JMA yang boleh disesuaikan untuk tempoh yang berbeza.
RSI menapis pelarian palsu.
Gabungan dua penunjuk mengurangkan isyarat palsu.
Terbina dalam kawalan stop loss kehilangan.
Nisbah keuntungan yang boleh disesuaikan untuk penargetan keuntungan.
Kombo dua indikator mungkin menghasilkan terlalu sedikit isyarat.
JMA masih mempunyai kelewatan, mungkin terlepas titik perubahan.
Penempatan stop loss yang tidak betul mungkin akan menyebabkan kerugian yang lebih besar.
Terlalu bergantung pada penunjuk boleh menghasilkan isyarat palsu. boleh menambah jumlah atau penapis turun naik.
Uji parameter JMA untuk mencari tetapan optimum.
Cuba parameter RSI yang berbeza untuk prestasi yang lebih baik.
Tambah mekanisme penghentian untuk penghentian adaptif.
Mengoptimumkan saiz kedudukan kemasukan seperti menambah perdagangan yang menang.
Cari penapis tambahan seperti KD, MACD.
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)