Chiến lược Đường trung bình động và Chỉ số sức mạnh tương đối


Ngày tạo: 2023-11-28 14:07:46 sửa đổi lần cuối: 2023-11-28 14:07:46
sao chép: 0 Số nhấp chuột: 659
1
tập trung vào
1617
Người theo dõi

Chiến lược Đường trung bình động và Chỉ số sức mạnh tương đối

Tổng quan

Chiến lược Moving Average Relative Strength Index là một chiến lược giao dịch định lượng sử dụng cả đường trung bình di chuyển và đường trung bình tương đối mạnh làm tín hiệu giao dịch. Chiến lược này tạo ra tín hiệu giao dịch để nắm bắt cơ hội trong xu hướng thị trường bằng cách so sánh giá với đường trung bình di chuyển và giá trị của đường trung bình tương đối mạnh.

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

Chiến lược này dựa trên hai chỉ số:

  1. Trung bình di chuyển đơn giản (SMA): phản ánh xu hướng trung bình của giá cả.
  2. Chỉ số tương đối yếu (RSI): phản ánh sự yếu kém mạnh mẽ của giá.

Chiến lược của chúng tôi là:

Khi đường chỉ số RSI thấp hơn đường trung bình di chuyển là khu vực bán tháo, được coi là cổ phiếu được đánh giá thấp, tạo ra tín hiệu mua; khi đường chỉ số RSI cao hơn đường trung bình di chuyển là khu vực mua quá mức, được coi là cổ phiếu được đánh giá cao, tạo ra tín hiệu bán.

Nói cách khác, đường trung bình di chuyển phản ánh giá trị công bằng của cổ phiếu ở một mức độ nhất định, và chỉ số RSI đại diện cho tình trạng mạnh và yếu của cổ phiếu hiện tại.

Cụ thể, chiến lược này tạo ra tín hiệu giao dịch thông qua các bước sau:

  1. Tính toán giá trị RSI của một cổ phiếu và đường trung bình di chuyển đơn giản
  2. So sánh các chỉ số RSI với đường trung bình di chuyển
  3. Khi RSI đi qua đường trung bình di chuyển, nó tạo ra một tín hiệu bán
  4. Một tín hiệu mua được tạo ra khi chỉ số RSI đi qua đường trung bình di chuyển
  5. Thiết lập điểm dừng và di chuyển dừng để kiểm soát rủi ro

Lợi thế chiến lược

Chiến lược này kết hợp sự phán đoán xu hướng của trung bình di chuyển và phán đoán mua bán quá mức của chỉ số RSI, sử dụng lợi thế tổng hợp của các chỉ số khác nhau để đánh giá hiệu quả điểm biến đổi của thị trường.

Những ưu điểm chính là:

  1. Trung bình di chuyển có thể chỉ ra xu hướng giá một cách hiệu quả
  2. Chỉ số RSI có thể phản ánh quá mua quá bán
  3. Kết hợp hai chỉ số để đánh giá chính xác hơn về điểm biến động của thị trường
  4. Bạn có thể đặt điểm dừng để kiểm soát rủi ro

Rủi ro chiến lược

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

  1. Có khả năng chỉ số tạo ra tín hiệu sai có thể dẫn đến tổn thất không cần thiết
  2. Trong trường hợp xảy ra biến động mạnh, lệnh dừng có thể bị phá vỡ, gây ra tổn thất lớn.
  3. Thiết lập tham số không đúng cũng ảnh hưởng đến hiệu suất của chính sách

Để kiểm soát rủi ro, bạn có thể tối ưu hóa bằng cách:

  1. Điều chỉnh các tham số của đường trung bình di chuyển và RSI để tín hiệu chỉ số đáng tin cậy hơn
  2. Giảm điểm dừng một cách thích hợp để tránh kích hoạt quá thường xuyên
  3. Sử dụng phương pháp dừng di động như dừng DYNAMIC để làm cho dừng trở nên linh hoạt hơn

Hướng tối ưu hóa chiến lược

Chiến lược này có thể được tối ưu hóa hơn nữa trong các lĩnh vực như:

  1. Kiểm tra các tổ hợp tham số của các chu kỳ khác nhau để tìm tham số tốt nhất
  2. Thêm các bộ lọc cho các chỉ số khác, chẳng hạn như chỉ số giao dịch, để tăng độ tin cậy của tín hiệu
  3. Tối ưu hóa chiến lược dừng lỗ, làm cho dừng lỗ năng động và hợp lý hơn
  4. Xây dựng cơ chế tối ưu hóa tham số thích ứng kết hợp với các công nghệ như học sâu
  5. Thêm mô-đun quản lý vị trí, điều chỉnh vị trí theo thị trường

Bằng cách tối ưu hóa tham số, tối ưu hóa chỉ số và tối ưu hóa quản lý rủi ro, bạn có thể liên tục nâng cao tính ổn định và khả năng lợi nhuận của chiến lược.

Tóm tắt

Chiến lược trung bình di chuyển và các chỉ số tương đối mạnh mẽ sử dụng phán đoán xu hướng giá cả và phán đoán quá mua quá bán để đánh giá hiệu quả các điểm biến động của thị trường và nắm bắt cơ hội đảo ngược. Chiến lược này đơn giản, thực tế, có thể kiểm soát rủi ro, là một chiến lược giao dịch định lượng thực tế. Bằng cách tối ưu hóa liên tục, có thể đạt được hiệu quả tuyệt vời hơn.

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

//@version=2

strategy(title = "RSI versus SMA", shorttitle = "RSI vs SMA", overlay = false, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)

// Revision:        1
// Author:          @JayRogers
//
// *** USE AT YOUR OWN RISK ***
// - Nothing is perfect, and all decisions by you are on your own head. And stuff.
//
// Description:
//  - It's RSI versus a Simple Moving Average.. Not sure it really needs much more description.
//  - Should not repaint - Automatically offsets by 1 bar if anything other than "open" selected as RSI source.

// === INPUTS ===
// rsi
rsiSource   = input(defval = open, title = "RSI Source")
rsiLength   = input(defval = 8, title = "RSI Length", minval = 1)
// sma
maLength    = input(defval = 34, title = "MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = false, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// delay for direction change actions
switchDelay(exp, len) =>
    average = len >= 2 ? sum(exp, len) / len : exp[1]
    up      = exp > average
    down    = exp < average
    state   = up ? true : down ? false : up[1]
// === /BASE FUNCTIONS ===

// === SERIES and VAR ===
// rsi
shunt = rsiSource == open ? 0 : 1
rsiUp = rma(max(change(rsiSource[shunt]), 0), rsiLength)
rsiDown = rma(-min(change(rsiSource[shunt]), 0), rsiLength)
rsi = (rsiDown == 0 ? 100 : rsiUp == 0 ? 0 : 100 - (100 / (1 + rsiUp / rsiDown))) - 50 // shifted 50 points to make 0 median
// sma of rsi
rsiMa   = sma(rsi, maLength)
// self explanatory..
tradeDirection = tradeInvert ? 0 <= rsiMa ? true : false : 0 >= rsiMa ? true : false
// === /SERIES ===

// === PLOTTING ===
barcolor(color = tradeDirection ? green : red, title = "Bar Colours")
// hlines
medianLine  = hline(0, title = 'Median', color = #996600,  linewidth = 1)
limitUp     = hline(25, title = 'Limit Up', color = silver,  linewidth = 1)
limitDown   = hline(-25, title = 'Limit Down', color = silver,  linewidth = 1)
// rsi and ma
rsiLine     = plot(rsi, title = 'RSI', color = purple, linewidth = 2, style = line, transp = 50)
areaLine    = plot(rsiMa, title = 'Area MA', color = silver, linewidth = 1, style = area, transp = 70)
// === /PLOTTING ===

goLong() => not tradeDirection[1] and tradeDirection
killLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Buy", long = true, when = goLong())
strategy.close(id = "Buy", when = killLong())

goShort() => tradeDirection[1] and not tradeDirection
killShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Sell", long = false, when = goShort())
strategy.close(id = "Sell", when = killShort())

if (useStop)
    strategy.exit("XSL", from_entry = "Buy", loss = slPoints)
    strategy.exit("XSS", from_entry = "Sell", loss = slPoints)
// if we're using the trailing stop
if (useTS and useTSO) // with offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints, trail_offset = tslOffset)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints, trail_offset = tslOffset)
if (useTS and not useTSO) // without offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints)