Strategi dagangan penjejakan isyarat terlepas berdasarkan RSI terbalik


Tarikh penciptaan: 2023-09-28 10:54:24 Akhirnya diubah suai: 2023-09-28 10:54:24
Salin: 1 Bilangan klik: 693
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini membolehkan perdagangan berbalik dengan mengesan isyarat overbought dan oversold yang terlepas oleh RSI. Ia menghasilkan isyarat tracking do more apabila RSI jatuh dari kawasan overbought dan isyarat tracking do more apabila ia bangkit dari kawasan oversold untuk menangkap peluang berbalik.

Prinsip Strategi

Isyarat ditentukan

RSI digunakan untuk menilai overbought dan oversold. Apabila RSI melintasi garisan overbought yang ditetapkan, ia adalah isyarat overbought, dan apabila ia melintasi garisan oversold, ia adalah isyarat oversold.

overbought = rsi > uplimit 
oversold = rsi < dnlimit

Jika satu K-line RSI sebelumnya berada dalam keadaan overbought, K-line RSI semasa akan keluar dari keadaan overbought, menghasilkan isyarat multitasking.up1Jika satu K-line RSI sebelumnya berada dalam keadaan oversold, K-line RSI semasa akan keluar dari keadaan oversold dan menghasilkan isyarat tracking shortdn1

up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false 

Keluar dari penghakiman

Isyarat keluar dihasilkan apabila arah pegangan bersesuaian dengan arah entiti K-baris dan entiti itu telah menembusi separuh daripada purata 10 kitaran.

exit = (((strategy.position_size > 0 and bar == 1) or 
         (strategy.position_size < 0 and bar == -1)) and 
        body > abody / 2)

Kelebihan Strategik

  1. Mencari isyarat reversal yang terlepas oleh RSI untuk mengelakkan kesukaran yang diperlukan untuk menangkap titik jual beli yang berlebihan dalam masa yang tepat.

  2. Menggunakan sifat-sifat reversal RSI untuk menangkap peluang reversal.

  3. Keputusan keluar dibuat dengan menggunakan arah dan saiz entiti K-line untuk mengelakkan pengesanan semula selepas rebound.

Risiko dan Penyelesaian

  1. Risiko RSI memberi isyarat palsu

    • Penyelesaian: Mengesampingkan kesalahan pengesahan dengan menggunakan pengesahan yang berkaitan dengan petunjuk lain.
  2. Harga mungkin telah berubah pada masa pelacakan isyarat, risiko kerugian besar

    • Penyelesaian: Kurangkan kedudukan kemasukan, atau optimumkan masa kemasukan.
  3. Beberapa rebound tidak menguntungkan dan berisiko memberi isyarat untuk keluar

    • Penyelesaian: Mengoptimumkan logik keputusan keluar dan meningkatkan peluang keuntungan pemegang saham.

Optimum idea

  1. Tetapan parameter pengoptimuman, seperti overbuy oversell line, pusingan semula, dan lain-lain, disesuaikan untuk pasaran yang berbeza.

  2. Menyesuaikan cara pengurusan kedudukan, seperti menurunkan kedudukan semasa menjejaki isyarat.

  3. Mengoptimumkan masa kemasukan, menambah sekatan tambahan berdasarkan isyarat pengesanan.

  4. Mengoptimumkan kaedah keluar untuk meningkatkan peluang keuntungan, seperti memperkenalkan hentian bergerak.

  5. Mengoptimumkan cara menghentikan kerugian, mengurangkan risiko kerugian, seperti memperkenalkan penutupan bergerak, penutupan sekat dan sebagainya.

ringkaskan

Strategi ini adalah berdasarkan kepada RSI untuk mendapatkan isyarat overbought dan oversold untuk mengikuti perdagangan berbalik. Strategi ini mempunyai kelebihan untuk mengikuti isyarat berbalik, tetapi juga terdapat risiko isyarat palsu dan risiko kerugian. Dengan pengoptimuman berterusan, anda boleh meningkatkan lagi kestabilan dan kadar pulangan strategi.

Kod sumber strategi
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Anti RSI Strategy v1.0", shorttitle = "Anti RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod1 = input(14, defval = 14, minval = 2, maxval = 50, title = "RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit = 100 - rsilimit1
dnlimit = rsilimit1

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overbought = rsi > uplimit
oversold = rsi < dnlimit

up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
up2 = bar == -1 and strategy.position_size > 0 and overbought == false
dn2 = bar == 1 and strategy.position_size < 0 and oversold == false

norma = overbought == false and oversold == false
exit = (((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 or up2 or dn2 ? blue : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()