Chiến lược thích ứng lai giữa đường trung bình động kép và sức mạnh tương đối

EMA RSI RS
Ngày tạo: 2024-12-04 15:29:05 sửa đổi lần cuối: 2024-12-04 15:29:05
sao chép: 0 Số nhấp chuột: 414
1
tập trung vào
1617
Người theo dõi

Chiến lược thích ứng lai giữa đường trung bình động kép và sức mạnh tương đối

Tổng quan

Chiến lược này là một hệ thống giao dịch tổng hợp kết hợp với hệ thống hai đường trung bình, phân tích các chỉ số tương đối mạnh (RSI) và tương đối mạnh (RS). Chiến lược này thực hiện các cơ chế quyết định giao dịch đa chiều bằng cách xác nhận xu hướng thông qua sự xác nhận chéo của đường trung bình di chuyển của chỉ số (EMA) vào ngày 13 và 21, đồng thời xác nhận tín hiệu giao dịch kết hợp RSI và giá trị RS của chỉ số cơ sở. Chiến lược này cũng bao gồm cơ chế kiểm soát rủi ro và phán đoán dựa trên điều kiện nhập lại dựa trên 52 tuần.

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

Chiến lược này sử dụng nhiều cơ chế xác nhận tín hiệu:

  1. Tín hiệu nhập cảnh phải đáp ứng các điều kiện sau:
    • EMA13 mặc EMA21 hoặc giá cao hơn EMA13
    • RSI lớn hơn 60
    • Cường độ tương đối ((RS) là giá trị chính
  2. Điều kiện rút lui bao gồm:
    • Giá giảm xuống EMA21
    • RSI dưới 50
    • RS chuyển sang âm
  3. Điều kiện tái nhập học:
    • Giá trên mặc EMA13 và EMA13 lớn hơn EMA21
    • RS giữ nguyên
    • Hoặc giá đã vượt qua mức cao nhất trong tuần qua.

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

  1. Cơ chế xác nhận tín hiệu đa dạng làm giảm nguy cơ đột nhập giả
  2. Kết hợp phân tích cường độ tương đối, lọc hiệu quả các giống mạnh
  3. Cơ chế điều chỉnh chu kỳ thời gian thích ứng
  4. Có hệ thống kiểm soát rủi ro tốt
  5. Cơ chế tái nhập học thông minh
  6. Cung cấp trực quan hóa tình trạng giao dịch trong thời gian thực

Rủi ro chiến lược

  1. Thị trường chấn động có thể dẫn đến giao dịch thường xuyên
  2. Dựa vào nhiều chỉ số có thể gây ra sự chậm trễ tín hiệu
  3. Mức RSI cố định có thể không phù hợp với tất cả các tình huống thị trường
  4. Tính chính xác của chỉ số dựa trên tính toán cường độ tương đối
  5. 52 tuần cao điểm dừng lỗ có thể quá nhẹ

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

  1. Tiếp theo, bạn có thể sử dụng các chỉ số RSI khác nhau.
  2. Tối ưu hóa logic phán đoán về điều kiện tái nhập học
  3. Tăng chiều phân tích khối lượng giao dịch
  4. Cải thiện cơ chế dừng lỗ và dừng lãi
  5. Thêm bộ lọc tỷ lệ dao động
  6. Tối ưu hóa chu kỳ tính toán cường độ tương đối

Tóm tắt

Chiến lược này xây dựng một hệ thống giao dịch toàn diện bằng cách kết hợp phân tích kỹ thuật và phân tích cường độ tương đối. Cơ chế xác nhận tín hiệu đa dạng và hệ thống kiểm soát rủi ro của nó làm cho nó có tính thực tiễn mạnh mẽ.

Mã nguồn chiến lược
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-03 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA 13 & 21 Entry Exit", overlay=true)

// Define the EMAs
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)

// Define the RSI
rsi = ta.rsi(close, 14)

// Calculate the closing price relative to Nifty 50
//nifty50 = request.security("NSE:NIFTY", timeframe.period, close)
//closeRelative = close / nifty50

// Define a base period (e.g., 123) and adjust it based on the timeframe
//basePeriod = 123

// Calculate the effective period based on the timeframe
//effectivePeriod = basePeriod * (timeframe.isintraday ? (60 / timeframe.multiplier) : 1)

// Calculate the EMA
//rs = ta.ema(closeRelative, effectivePeriod)

// Define the Relative Strength with respect to NIFTY 50
nifty50 = request.security("swap", "D", close)
rs = ta.ema(close / nifty50, 55 )

// Define the previous 2-week low and last week's high
twoWeekLow = ta.lowest(low, 10)  // 10 trading days roughly equal to 2 weeks
lastWeekHigh = ta.highest(high, 5)  // 5 trading days roughly equal to 1 week
fiftytwoWeekhigh = ta.highest(high, 52*5) // 252 tradingdays roughly equal to 52 week.

// Long condition: EMA 21 crossing above EMA 55, price above EMA 21, RSI > 50, and RS > 0
longCondition = ta.crossover(ema13, ema21) or close > ema13 and rsi > 60 and rs > 0

// Exit condition: Price closing below EMA 55 or below the previous 2-week low
exitCondition = close < ema21 or rsi < 50 or rs < 0 //or close < fiftytwoWeekhigh*0.80

// Re-entry condition: Price crossing above EMA 21 after an exit, EMA 21 > EMA 55, and RS > 1
reEntryCondition = ta.crossover(close, ema13) and ema13 > ema21 and rs > 0

// Re-entry condition if trailing stop loss is hit: Price crossing above last week's high
reEntryAfterSL = ta.crossover(close, lastWeekHigh)

// Plot the EMAs
plot(ema13 ,color=color.green, title="EMA 13",linewidth = 2)
plot(ema21, color=color.red, title="EMA 21",linewidth = 2)


// Plot buy and sell signals
plotshape(series=longCondition, location=location.abovebar, color=color.rgb(50, 243, 130), style=shape.flag, title="Buy Signal")
plotshape(series=exitCondition, location=location.belowbar, color=color.red, style=shape.xcross, title="Sell Signal")
plotshape(series=reEntryCondition or reEntryAfterSL, location=location.belowbar, color=color.blue, style=shape.labelup, title="Re-entry Signal")
//plotshape(series = fiftytwoWeekhigh,location=location.abovebar, color=color.blue,style=shape.flag, title="52WH")

// Plot background color for RS > 0
//bgcolor(rs > 0 ? color.new(color.green, 90) : na, title="RS Positive Background")
// Plot the previous 2-week low and last week's high
// plot(twoWeekLow, color=color.orange, title="2-Week Low")
// plot(lastWeekHigh, color=color.purple, title="Last Week High")

// Strategy logic
if (longCondition or reEntryCondition or reEntryAfterSL)
    strategy.entry("Long", strategy.long)

if (exitCondition)
    strategy.close("Long")

 // Calculate Stop Loss (SL) and Profit
var float entryPrice = na
var float stopLoss = na
var float profit = na

if (strategy.opentrades > 0)
    entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
    stopLoss := fiftytwoWeekhigh * 0.80
    profit := (close - entryPrice) / entryPrice * 100

// Display the strategy table
var table strategyTable = table.new(position.top_right, 4, 2, border_width = 1)

// Make the table movable
tableX = input.int(0, title="Table X Position")
tableY = input.int(0, title="Table Y Position")

// Add size options for the table
tableSize = input.string("small", title="Table Size", options=["tiny", "small", "large"])

// Adjust table size based on user input
tableWidth = tableSize == "tiny" ? 2 : tableSize == "small" ? 4 : 6
tableHeight = tableSize == "tiny" ? 1 : tableSize == "small" ? 2 : 3

// Create the table with the specified size
//table = table.new(position.top_right, tableWidth, tableHeight, border_width = 1)

// Position the table based on user input
// table.cell(strategyTable, tableX, tableY, "Entry Price",  bgcolor=#18eef9)
// table.cell(strategyTable, tableX, tableY + 1, str.tostring(entryPrice, format.mintick), bgcolor=#18eef9)
// table.cell(strategyTable, tableX + 1, tableY, "Stop Loss (20%)", bgcolor=color.red)
// table.cell(strategyTable, tableX + 1, tableY + 1, str.tostring(stopLoss, format.mintick), bgcolor=color.red)
// table.cell(strategyTable, tableX + 2, tableY, "Profit (%)", bgcolor=color.green)
// table.cell(strategyTable, tableX + 2, tableY + 1, str.tostring(profit, format.percent), bgcolor=color.green)