Pengujian Ulang dan Optimalisasi Strategi RSI


Tanggal Pembuatan: 2023-11-10 11:59:40 Akhirnya memodifikasi: 2023-11-10 11:59:40
menyalin: 1 Jumlah klik: 858
1
fokus pada
1617
Pengikut

Pengujian Ulang dan Optimalisasi Strategi RSI

Ringkasan

Strategi ini didasarkan pada indikator relatif kuat (RSI) untuk menilai overbought dan oversold, untuk membangun posisi terbalik ketika RSI mencapai zona overbought dan oversold, untuk mencapai tujuan low buy high sell. Strategi ini sederhana dan efisien, untuk mendapatkan keuntungan dengan menangkap fenomena overbought dan oversold di pasar dalam jangka pendek.

Prinsip Strategi

Strategi ini hanya menggunakan indikator RSI sebagai sinyal untuk membangun posisi. Lakukan lebih banyak ketika RSI di bawah melewati setelan rendah (default 20) dan kosong ketika RSI di atas melewati setelan tinggi (default 80). Setiap perdagangan tetap dana (default $ 100), bagaimanapun juga, hanya mengejar keuntungan 1% dan berhenti. Jika kerugian mencapai 3%. Untuk mengontrol frekuensi perdagangan, strategi ini juga diatur untuk menghentikan 24 K garis tidak melakukan perdagangan setelah kerugian.

Secara khusus, logika inti dari strategi ini adalah:

  1. Menggunakan indikator RSI untuk menilai overbought dan oversold
  2. RSI di bawah 20 lebih banyak
  3. RSI naik ke 80 dengan posisi kosong
  4. $ 100 untuk setiap posisi.
  5. Stop loss atau stop loss
  6. Jika Anda mengalami kerugian, Anda dapat menghentikan 24 K Line yang tidak diperdagangkan pada K Line berikutnya.

Strategi ini sangat sederhana, mechanical, dan hampir tidak ada ruang untuk pengoptimalan parameter. Ini murni menggunakan karakteristik matematika indikator RSI untuk mendapatkan keuntungan berbalik dari posisi terbalik di zona overbought dan oversold.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah kesederhanaan dan efisiensi.

  1. Dengan menggunakan satu indikator RSI, tidak perlu analisis teknis yang rumit.
  2. Sistem perdagangan yang sepenuhnya otomatis, tidak dipengaruhi oleh emosi pribadi.
  3. Menggunakan karakteristik matematis dari deviasi jangka pendek pasar untuk mendapatkan keuntungan, tidak perlu memprediksi tren pasar.
  4. Kode manajemen dana, mekanisme pengendalian risiko.

Selain itu, strategi juga mengatur stop-loss ratio untuk mengunci keuntungan dan mengendalikan risiko, dan mekanisme penundaan perdagangan untuk mengurangi frekuensi perdagangan. Ini memungkinkan strategi untuk mendapatkan keuntungan yang stabil dengan risiko minimal.

Analisis risiko

Risiko utama dari strategi ini berasal dari:

  1. RSI mungkin berada di zona overbought atau oversold untuk jangka panjang ketika tren sangat kuat, dan tidak ada banyak kesempatan untuk membalikkan, strategi ini akan sulit untuk menghasilkan keuntungan.

  2. Stop loss yang terlalu tinggi dapat menyebabkan kerugian yang lebih besar. Saat ini stop loss adalah 3%, mungkin perlu disesuaikan menjadi 1-2% lebih masuk akal.

  3. Frekuensi perdagangan yang terlalu tinggi dapat menghasilkan keuntungan dengan terus membangun posisi, dan frekuensi pembukaan posisi harus dikendalikan secara tepat.

  4. Fiksasi 100 USD untuk setiap kali membuka posisi mungkin berisiko terlalu terkonsentrasi dan perlu dioptimalkan sebagai persentase dana.

Arah optimasi

Berdasarkan analisis di atas, strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Meningkatkan indikator penilaian tren, seperti MA, dan menghentikan perdagangan jika tren tidak jelas.

  2. Optimalkan Stop Loss Stop Ratio, untuk menyesuaikan stop loss menjadi 1-2% lebih masuk akal, stop loss dapat diatur sebagai stop loss floating.

  3. Peningkatan frekuensi pembukaan, misalnya pembukaan hanya 1-2 kali dalam waktu tertentu.

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

  5. Mengoptimalkan kombinasi parameter, seperti siklus RSI, zona overbought dan oversold.

  6. Meningkatkan kontrol posisi, tidak meningkatkan modal transaksi tunggal ketika meningkatkan modal awal.

Dengan mengoptimalkan beberapa poin di atas, Anda dapat secara efektif mengurangi risiko perdagangan dan meningkatkan stabilitas dan keandalan strategi.

Meringkaskan

Strategi ini secara umum sangat sederhana dan langsung, dengan menilai indikator RSI untuk mendapatkan keuntungan berbalik dalam jangka pendek. Keuntungan adalah sederhana dan efisien, tidak perlu diprediksi, logika perdagangan jelas, mudah dilacak dan diverifikasi. Namun, mungkin sulit untuk menghadapi situasi tren, ada risiko kerugian tertentu. Dengan memperkenalkan metode penilaian tren, pengoptimalan pengaturan parameter, kontrol posisi, dan lain-lain, Anda dapat meningkatkan stabilitas strategi dan kemampuan menghasilkan keuntungan.

Kode 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)