Strategi pembalikan berdasarkan RSI pantas dan warna candlestick

Penulis:ChaoZhang, Tarikh: 2023-09-13 17:24:54
Tag:

Strategi ini dinamakan Reversal Strategy Based on Fast RSI and Candlestick Colors. Ia menggunakan RSI cepat untuk menilai tahap overbought/oversold dan warna candlestick untuk menentukan arah trend, memasuki perdagangan pembalikan apabila kedua-duanya memberikan isyarat serentak.

RSI yang cepat mempunyai parameter yang lebih kecil dan lebih cepat dapat mengesan keadaan harga overbought / oversold. RSI di bawah 30 menunjukkan keadaan oversold, sementara di atas 70 adalah overbought.

Warna candlestick menunjukkan harga putih menutup berhampiran terbuka, hijau mewakili harga yang meningkat dan bendera merah jatuh.

Logik perdagangan adalah:

Apabila RSI cepat menunjukkan oversold dan 4 lilin merah berturut-turut muncul, ia dianggap sebagai isyarat pembalikan yang kuat untuk pergi lama.

Apabila RSI cepat overbought dan 4 lilin hijau berturut-turut muncul, ia menandakan peluang pembalikan yang kuat untuk pergi pendek.

Jika sudah memegang kedudukan panjang, keluar apabila 1 lilin hijau muncul.

Kelebihan strategi ini adalah menggunakan kombinasi penunjuk untuk menentukan isyarat pembalikan dengan tepat. Tetapi pengurusan wang yang ketat diperlukan kerana ukuran kedudukan yang berat. Hentikan kerugian juga penting.

Ringkasnya, perdagangan pembalikan bergantung kepada penunjuk yang mengenal pasti masa dengan tepat. Penggunaan RSI ditambah maklumat lilin yang munasabah dapat meningkatkan prestasi strategi. Tetapi tidak ada satu strategi yang sempurna. Pedagang masih perlu mengekalkan pemikiran perdagangan yang fleksibel.


/*backtest
start: 2022-09-06 00:00:00
end: 2023-01-20 00:00:00
period: 4d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Hundred Strategy v1.0", shorttitle = "Hundred 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")
lev = input(5, defval = 5, minval = 1, maxval = 100, title = "leverage")
onlyprofit = input(true, defval = true, title = "Only Profit")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
cbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Color Bars")
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")

//Fast RSI
fastup = rma(max(change(rsisrc), 0), fast)
fastdown = rma(-min(change(rsisrc), 0), fast)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Signals
long = strategy.position_size >= 0
short = strategy.position_size <= 0
up = sma(bar, cbars) == -1 and long and dnrsi
dn = sma(bar, cbars) == 1 and short and uprsi
profit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) or onlyprofit == false
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and profit
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih lanjut