Chiến lược giao dịch định lượng mua thấp và bán cao trong ngắn hạn dựa trên đường trung bình động RSI


Ngày tạo: 2023-12-01 16:59:26 sửa đổi lần cuối: 2023-12-01 16:59:26
sao chép: 0 Số nhấp chuột: 703
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch định lượng mua thấp và bán cao trong ngắn hạn dựa trên đường trung bình động RSI

Tổng quan

Chiến lược này xác định điểm mua và bán thông qua giao điểm của chỉ số RSI với đường trung bình của nó, thuộc chiến lược giao dịch ngắn. Chiến lược sẽ mua khi chỉ số RSI thấp hơn đường trung bình của nó và bán khi cao hơn đường trung bình của nó, thuộc chiến lược mua bán cao điển hình.

Nguyên tắc chiến lược

  1. Tính RSI với đường K dài 40
  2. Tính trung bình đường MA của chỉ số RSI với chiều dài chu kỳ là 10 đường K
  3. Sản xuất tín hiệu mua khi chỉ số RSI thấp hơn đường trung bình của nó nhân với hệ số ((1 - khoảng mua / 100)
  4. Tín hiệu bán được tạo ra khi chỉ số RSI cao hơn đường trung bình của nó nhân với hệ số ((1 + khoảng mua / 100)
  5. Khoảng cách bán và mua mặc định là 5, cho thấy tín hiệu phát ra khi khoảng cách từ đường trung bình là 5 phần trăm
  6. Cụ thể, khi RSI ở trên đường trung bình và trên mức 50.

Phân tích lợi thế

Đây là một chiến lược đảo ngược xu hướng điển hình, sử dụng tính năng mua bán quá mức của chỉ số RSI để xác định thời gian mua bán. Chiến lược này có một số lợi thế:

  1. Sử dụng chỉ số RSI để đánh giá cấu trúc thị trường, chỉ số tự nó có độ tin cậy cao hơn
  2. Bộ lọc thống nhất giúp tránh các giao dịch không cần thiết và tăng sự ổn định
  3. Các tham số khoảng cách bán và mua có thể điều chỉnh tần suất giao dịch
  4. Mã đơn giản, dễ hiểu, logic rõ ràng.

Nói chung, đây là một chiến lược giao dịch ngắn gọn đơn giản và thực tế.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro cần lưu ý:

  1. RSI có thể phát ra tín hiệu sai, cần chú ý đến hình dạng đường cong của chỉ số
  2. Việc thiết lập khoảng cách bán và mua không đúng cách có thể dẫn đến quá nhiều giao dịch hoặc bỏ lỡ cơ hội.
  3. Tỷ lệ giao dịch cao, cần xem xét tác động của chi phí giao dịch
  4. Dựa trên chỉ số duy nhất, dễ bị ảnh hưởng bởi bất thường thị trường

Những rủi ro này có thể được giảm bớt bằng cách tối ưu hóa tham số, thêm các điều kiện lọc.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:

  1. Thêm thêm các chỉ số lọc, chẳng hạn như chỉ số khối lượng giao dịch, để đảm bảo chỉ tạo tín hiệu ở điểm biến hướng
  2. Tham gia chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ
  3. Tối ưu hóa khoảng cách giao dịch, cân bằng tần suất giao dịch và lợi nhuận
  4. Sử dụng thuật toán học máy để tự động tìm các tham số ưu tiên
  5. Thêm mô hình tổng hợp, kết hợp kết quả từ nhiều chiến lược con

Có thể cải thiện đáng kể hiệu suất chiến lược thông qua các phương tiện như kết hợp nhiều chỉ số, quản lý lỗ hổng và tối ưu hóa tham số.

Tóm tắt

Chiến lược này nói chung là một chiến lược giao dịch đường ngắn rất điển hình và thực tế. Nó sử dụng các chỉ số RSI để đánh giá thời gian mua và bán, sau đó được hỗ trợ bằng bộ lọc đồng bằng. Lập luận của chiến lược đơn giản và rõ ràng, điều chỉnh tham số linh hoạt, dễ thực hiện.

Mã nguồn chiến lược
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)