
Chiến lược này dựa trên chỉ số tương đối mạnh (RSI) để đánh giá quá mua quá bán, thiết lập vị trí đảo ngược khi RSI đạt đến khu vực quá mua quá bán, nhằm mục đích giảm mua quá bán. Chiến lược này đơn giản và hiệu quả, thu lợi nhuận bằng cách nắm bắt hiện tượng quá mua quá bán ngắn hạn của thị trường.
Chiến lược này chỉ sử dụng chỉ số RSI như một tín hiệu để tạo vị trí. Khi RSI vượt qua mức thấp nhất được thiết lập (bằng mặc định 20) và khi RSI vượt qua mức cao nhất được thiết lập (bằng mặc định 80), chiến lược này được thiết lập để tạm dừng giao dịch sau khi mất 24 đường K.
Cụ thể, chiến lược của chúng tôi có những logic cốt lõi như sau:
Có thể thấy rằng chiến lược này rất đơn giản và cơ học, hầu như không có chỗ cho các tham số tối ưu hóa. Nó sử dụng các đặc điểm toán học của chỉ số RSI để thu được lợi nhuận quay ngược khi đặt vị trí ở khu vực quá mua quá bán.
Lợi thế lớn nhất của chiến lược này là nó đơn giản và hiệu quả.
Ngoài ra, chiến lược cũng đặt tỷ lệ dừng lỗ để khóa lợi nhuận và kiểm soát rủi ro, và cơ chế tạm dừng giao dịch để giảm tần suất giao dịch. Điều này cho phép chiến lược đạt được lợi nhuận ổn định với rủi ro tối thiểu.
Những rủi ro chính trong chiến lược này là:
Khi xu hướng rất mạnh, RSI có thể ở trong vùng quá mua hoặc quá bán trong một thời gian dài và không có nhiều cơ hội đảo ngược, chiến lược này sẽ khó kiếm được lợi nhuận.
Cài đặt dừng lỗ quá lớn có thể dẫn đến sự gia tăng lỗ. Hiện tại, dừng lỗ là 3%, có thể cần điều chỉnh đến 1-2% là hợp lý hơn.
Tần suất giao dịch quá cao có thể tạo ra lợi nhuận khi tiếp tục xây dựng vị trí, nên kiểm soát tần suất mở vị trí.
Việc cố định 100 USD cho mỗi lần mở đầu tư có thể gây ra rủi ro quá mức, cần được tối ưu hóa thành tỷ lệ phần trăm vốn.
Theo phân tích trên, chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Thêm các chỉ số định hướng, như MA, tạm dừng giao dịch khi xu hướng không rõ ràng.
Tối ưu hóa tỷ lệ dừng lỗ, điều chỉnh dừng lỗ 1-2% hợp lý hơn, dừng lỗ có thể được đặt thành dừng nổi.
Tăng giới hạn tần suất mở kho, ví dụ như chỉ được phép mở kho 1-2 lần trong một khoảng thời gian nhất định.
Thay đổi số tiền cố định 100 đô la thành phần của số tiền, chẳng hạn như 1%.
Tối ưu hóa các tham số kết hợp, chẳng hạn như chu kỳ RSI, khu vực quá mua quá bán.
Tăng kiểm soát vị trí, không tăng vốn giao dịch đơn lẻ khi tăng vốn ban đầu.
Bằng cách tối ưu hóa các điểm trên, bạn có thể giảm rủi ro giao dịch và tăng sự ổn định và độ tin cậy của chiến lược.
Chiến lược này nói chung là rất đơn giản, trực tiếp, thông qua các chỉ số RSI đánh giá mua bán quá mức để có được lợi nhuận ngắn hạn. Ưu điểm là đơn giản và hiệu quả, không cần dự đoán, logic giao dịch rõ ràng, dễ dàng truy xuất và xác minh. Tuy nhiên, có thể khó đối phó với tình hình xu hướng, có một số rủi ro mất mát.
/*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)