Ujian Balik dan Pengoptimuman Strategi RSI


Tarikh penciptaan: 2023-11-10 11:59:40 Akhirnya diubah suai: 2023-11-10 11:59:40
Salin: 1 Bilangan klik: 858
1
fokus pada
1617
Pengikut

Ujian Balik dan Pengoptimuman Strategi RSI

Gambaran keseluruhan

Strategi ini berdasarkan indeks kekuatan relatif (RSI) untuk menilai overbought dan oversold, menetapkan kedudukan terbalik apabila RSI mencapai kawasan overbought dan oversold, untuk mencapai harga rendah dan harga tinggi. Strategi ini mudah dan efisien, untuk mendapatkan keuntungan dengan menangkap fenomena overbought dan oversold dalam jangka pendek di pasaran.

Prinsip Strategi

Strategi ini hanya menggunakan indikator RSI sebagai isyarat untuk membina kedudukan. Apabila RSI melepasi paras rendah yang ditetapkan (default 20), dan apabila RSI melepasi paras tinggi yang ditetapkan (default 80), strategi ini dibuat kosong.

Secara khusus, logik utama strategi ini ialah:

  1. Menggunakan RSI untuk menilai overbought dan oversold
  2. RSI di bawah 20 lebih banyak
  3. RSI naik ke 80 dan kosong.
  4. $ 100 untuk setiap penempatan.
  5. Stop loss atau kedudukan kosong selepas kerugian
  6. Jika rugi, 24 K baris tidak akan diperdagangkan pada baris K seterusnya.

Strategi ini sangat sederhana, hampir tidak ada ruang untuk pengoptimuman parameter. Ia menggunakan ciri matematik RSI semata-mata untuk mendapatkan keuntungan berbalik dari penempatan terbalik di kawasan yang terlalu banyak dibeli.

Analisis kelebihan

Strategi ini adalah mudah dan berkesan.

  1. Menggunakan satu RSI, tidak memerlukan analisis teknikal yang rumit.
  2. Sistem perdagangan automatik sepenuhnya, tidak dipengaruhi oleh emosi individu.
  3. Mengambil keuntungan daripada ciri-ciri matematik yang berbeza dalam jangka masa pendek, tanpa perlu meramalkan pergerakan pasaran.
  4. Kaedah pengurusan wang, mekanisme kawalan risiko dan kawalan kerugian.

Di samping itu, strategi ini juga menetapkan nisbah stop loss untuk mengunci keuntungan dan mengawal risiko, dan mekanisme penangguhan perdagangan untuk mengurangkan frekuensi perdagangan. Ini membolehkan strategi untuk mendapatkan keuntungan yang stabil dengan risiko minimum.

Analisis risiko

Risiko utama dari strategi ini adalah:

  1. RSI mungkin berada di kawasan overbought atau oversold untuk jangka masa yang panjang apabila trend sangat kuat, dan peluang untuk berbalik tidak banyak, strategi ini akan sukar untuk mendapat keuntungan.

  2. Tetapan stop loss yang terlalu besar boleh menyebabkan kerugian berkembang. Pada masa ini, stop loss adalah 3%, mungkin perlu disesuaikan kepada 1-2% lebih munasabah.

  3. Frekuensi dagangan yang terlalu tinggi mudah mendapat keuntungan selepas terus membina kedudukan, frekuensi pembukaan kedudukan harus dikawal dengan sewajarnya.

  4. Fiks setiap kali anda membuka akaun dengan modal $ 100 mungkin berisiko terlalu tertumpu dan perlu dioptimumkan sebagai peratusan dana.

Arah pengoptimuman

Berdasarkan analisis di atas, strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Tambah indikator trend seperti MA dan hentikan dagangan jika trend tidak jelas.

  2. Optimumkan peratusan hentian hentian, penyesuaian hentian hentian menjadi 1-2% lebih munasabah, hentian hentian boleh diset sebagai hentian hentian.

  3. Tingkatkan had frekuensi pembukaan, seperti hanya dibenarkan untuk membuka 1 hingga 2 kali dalam masa tertentu.

  4. Ubah modal tetap $ 100 menjadi peratusan dana, seperti 1%

  5. Mengoptimumkan kombinasi parameter seperti kitaran RSI, kawasan overbought dan oversold.

  6. Meningkatkan kawalan kedudukan, tidak meningkatkan modal dagangan tunggal apabila modal awal meningkat.

Dengan mengoptimumkan beberapa perkara di atas, anda dapat mengurangkan risiko perdagangan dan meningkatkan kestabilan dan kebolehpercayaan strategi.

ringkaskan

Strategi ini secara keseluruhan sangat mudah dan langsung, mendapatkan keuntungan berbalik jangka pendek melalui penilaian indikator RSI. Kelebihannya adalah mudah dan cekap, tidak perlu membuat ramalan, logik perdagangan jelas, mudah dikesan dan disahkan. Tetapi mungkin sukar untuk menangani keadaan trend, terdapat risiko kerugian tertentu. Dengan memperkenalkan penilaian trend, mengoptimumkan parameter pengaturan, mengawal kedudukan dan lain-lain, anda dapat meningkatkan kestabilan dan keuntungan strategi.

Kod sumber strategi
/*backtest
start: 2023-11-02 00:00:00
end: 2023-11-09 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash)
open_pos = input.int(50000, title = "每次开单资金(usdt)")
rsi_period = input.int(14, title = "rsi周期")
rsi_line      = input.float(20.0,      title='RSI触发线',      step=0.05)
stop_rsi_top_line = input.float(70, title = "顶部rsi止损线")
stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线")
stop_loss_perc = input.float(0.03, title = "止损线")
stop_profit = input.float(0.01, title = "止盈")
loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易")


rsiParam = ta.rsi(close, rsi_period)

var int failedTimes = 0
var bool stopTrade = false

// plot(rsiParam)

if stopTrade
    failedTimes += 1
    if failedTimes == loss_stop_trade_k
        failedTimes := 0
        stopTrade := false



// 获取当前持仓方向
checkCurrentPosition() =>
    strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0

curPosition = checkCurrentPosition()

// 当前持仓成本价
position_avg_price = strategy.position_avg_price


// 当前持单, 触达反向的rsi线,清仓
if curPosition > 0 and rsiParam >= stop_rsi_top_line
    strategy.close_all(comment = "closebuy")

if curPosition < 0 and rsiParam <= stop_rsi_bottom_line
    strategy.close_all(comment = "closesell")


// 止盈止损清仓
if curPosition > 0
    // if (position_avg_price - close) / close >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closebuy")
    //     stopTrade := true
    if (close - position_avg_price) / position_avg_price >= stop_profit
        // 止盈
        strategy.close_all(comment = "closebuy")



if curPosition < 0
    // if (close - position_avg_price) / position_avg_price >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closesell")
    //     stopTrade := true

    if (position_avg_price - close) / close >= stop_profit
        // 止盈
        strategy.close_all(comment = "closesell")


a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0
    stopTrade := true

var float openPrice = 0.0



if rsiParam <= rsi_line and stopTrade == false
	strategy.entry("long", strategy.long, open_pos / close, comment = "long")
    if curPosition == 0
        openPrice := close
    strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy")

if rsiParam >= 100 - rsi_line and stopTrade == false
    strategy.entry("short", strategy.short, open_pos / close, comment = "short")
    if curPosition == 0
        openPrice := close
    strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell")




plot(failedTimes)