
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.
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:
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.
Strategi ini adalah mudah dan berkesan.
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.
Risiko utama dari strategi ini adalah:
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.
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.
Frekuensi dagangan yang terlalu tinggi mudah mendapat keuntungan selepas terus membina kedudukan, frekuensi pembukaan kedudukan harus dikawal dengan sewajarnya.
Fiks setiap kali anda membuka akaun dengan modal $ 100 mungkin berisiko terlalu tertumpu dan perlu dioptimumkan sebagai peratusan dana.
Berdasarkan analisis di atas, strategi ini boleh dioptimumkan dalam beberapa aspek:
Tambah indikator trend seperti MA dan hentikan dagangan jika trend tidak jelas.
Optimumkan peratusan hentian hentian, penyesuaian hentian hentian menjadi 1-2% lebih munasabah, hentian hentian boleh diset sebagai hentian hentian.
Tingkatkan had frekuensi pembukaan, seperti hanya dibenarkan untuk membuka 1 hingga 2 kali dalam masa tertentu.
Ubah modal tetap $ 100 menjadi peratusan dana, seperti 1%
Mengoptimumkan kombinasi parameter seperti kitaran RSI, kawasan overbought dan oversold.
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.
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.
/*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)