Strategi Pembalikan Trend RSI

RSI ATR
Tarikh penciptaan: 2024-04-28 13:33:19 Akhirnya diubah suai: 2024-04-28 13:33:19
Salin: 1 Bilangan klik: 546
1
fokus pada
1617
Pengikut

Strategi Pembalikan Trend RSI

Gambaran keseluruhan

Strategi RSI Trend Reversal adalah strategi perdagangan kuantitatif berdasarkan indeks yang agak kuat (RSI) dan purata gelombang sebenar (ATR). Strategi ini menyesuaikan diri dengan turun naik pasaran yang cepat dengan menyesuaikan stop loss (TP / SL) secara dinamik, menangkap peluang untuk membalikkan trend. Strategi ini berpusat pada RSI, digabungkan dengan ATR untuk mengukur turun naik, dan membina dua segmen dinamika yang sesuai untuk digunakan sebagai dasar untuk membuka kedudukan.

Prinsip Strategi

Inti strategi pembalikan trend RSI adalah pembinaan barisan stop loss yang dinamik. Pertama, gunakan fungsi highest_custom dan lowest_custom yang disesuaikan untuk mencari harga tertinggi dan terendah sejak persimpangan terakhir, membentuk asas gelombang. Kemudian, perhitungan RSI dan ATR yang panjangnya adalah panjang, dan kemudian perhitungan seperti berikut:

  1. Laluan bawah = harga tertinggi ×[1 - (ATR/harga + 1/(RSI turun ke bawah × pengganda))
  2. Naik ke atas = harga terendah ×[1 + (ATR/harga + 1/(RSI naik ke landasan × pengganda))

Di antaranya multiplier adalah faktor pembesaran untuk band yang disesuaikan oleh pengguna. Jika harga naik ke atas, ia akan menjadi lebih banyak, dan jika turun ke bawah, ia akan menjadi kosong.

Kelebihan Strategik

  1. Adaptif, tali penghalang kerugian dapat menyesuaikan diri secara automatik mengikut turun naik harga, dan bertindak balas terhadap perubahan harga.
  2. Parameter boleh disesuaikan, dengan menyesuaikan parameter seperti panjang, pengganda, dan sebagainya, anda boleh mengawal kepekaan strategi dengan fleksibel.
  3. Logik yang jelas, struktur kod yang munasabah, mudah difahami dan digunakan semula.
  4. Ia boleh digunakan secara berasingan dengan strategi, atau dengan menambah fungsi Stop Loss untuk strategi lain.
  5. Kecekapan pengiraan yang tinggi, dengan menyesuaikan fungsi seperti highestest_custom, mengelakkan banyak pengiraan berulang yang disebabkan oleh penggunaan jenis seri.

Risiko Strategik

  1. Pilihan parameter yang tidak tepat boleh membawa risiko tambahan, seperti panjang yang terlalu kecil boleh menyebabkan perdagangan yang terlalu kerap, pengganda yang terlalu besar boleh menyebabkan stop loss terlalu longgar.
  2. Keadaan pasaran tertentu mungkin kurang berkesan, seperti penyesuaian yang kerap dan penembusan palsu dalam pasaran yang bergolak mungkin menghasilkan lebih banyak perdagangan yang merugikan.
  3. Strategi itu sendiri tidak mempunyai fungsi penilaian trend, dan memerlukan isyarat lain untuk digunakan.

Arah pengoptimuman strategi

  1. Anda boleh mempertimbangkan untuk menggunakan indikator trend seperti purata bergerak, dan hanya berdagang pada titik-titik yang berlawanan dengan arah trend utama.
  2. Parameter boleh dioptimumkan untuk mencari kombinasi parameter terbaik seperti panjang, pengganda dan sebagainya.
  3. Ia boleh digabungkan dengan petunjuk teknikal lain atau sentimen pasaran untuk meningkatkan ketepatan kedudukan.
  4. Anda boleh mengawal risiko setiap dagangan dengan menambahkan pengurusan kedudukan.

ringkaskan

Strategi RSI Trend Reversal menggunakan RSI dan ATR untuk membina gelombang penyesuaian diri, yang dapat menyesuaikan secara dinamik titik-titik hentian dan kerugian, dan bertindak balas terhadap perubahan pasaran. Logik strategi ini jelas, luas, dan boleh digunakan sebagai alat yang kuat untuk pedagang kuantitatif. Tetapi dalam penggunaan praktikal, perhatian masih perlu diberikan kepada pilihan parameter dan kawalan risiko, dan disarankan untuk digunakan dengan kombinasi isyarat indikator lain untuk meningkatkan prestasi keseluruhan.

Kod sumber strategi
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false)


//INPUTS 
rsi_length = input.int(title = "Lenght", defval = 8)
rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05)
lookback = input.int(title = "Delay to prevent idealization", defval = 1)
sltp = input.float(title = "Minimum Difference", defval = 10)
src = input.source(title = "Source Input", defval = close)

//PARAMETERS INITILIZATION
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//FUNCTION INITILIZATION
highest_custom(src, length) =>
    x = src
    for i = 0 to length
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to length
        if src[i] < x
            x := src[i]
    x
rsilev(src, length, mult, sltp) =>
    sl = (100 - sltp) / 100
    tp = (100 + sltp) / 100
    var bool crossup = na
    var bool crossdown = na
    var float dir = na
    dir_change = ta.change(dir)
    var float BearGuy = 0
    BullGuy = ta.barssince(crossup or crossdown)
    if na(BullGuy)
        BearGuy += 1
    else
        BearGuy := BullGuy
    var float upper = na
    var float lower = na
    rsilower = ta.rsi(src, length)
    rsiupper = math.abs(ta.rsi(src, length) - 100)
    atr = ta.atr(length) / src
    lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy)
    upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy)
    var float thresh = na
    if na(thresh)
        thresh := lower
    if na(dir)
        dir := 1
    if crossdown
        dir := -1
    if crossup
        dir := 1
    if dir == 1
        thresh := lower
    if dir == -1
        thresh := upper
    crossup := ta.crossover(src, thresh)
    crossdown := ta.crossunder(src, thresh)
    thresh

rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp)

//PLOTTING
var color col = color.lime
if hclose > rsiclose
    col := color.lime
if hclose < rsiclose
    col := color.red
plot(rsiclose, linewidth = 2, color = col)

//STRATEGY
buy = ta.crossover(hclose, rsiclose)
sell = ta.crossunder(hclose, rsiclose)

if buy[lookback]
    strategy.entry("long", strategy.long)
if sell[lookback]
    strategy.entry("Short", strategy.short)