Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch thích nghi EMA kép và sức mạnh tương đối

Tác giả:ChaoZhang, Ngày: 2024-12-04 15:29:05
Tags:EMARSIRS

img

Tổng quan

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

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

Chiến lược sử dụng một cơ chế xác nhận tín hiệu đa:

  1. Các tín hiệu nhập cảnh yêu cầu các điều kiện sau:
    • EMA13 vượt trên EMA21 hoặc giá vượt trên EMA13
    • RSI trên 60
    • Sức mạnh tương đối tích cực (RS)
  2. Các điều kiện xuất cảnh bao gồm:
    • Giá giảm dưới đường EMA21
    • RSI dưới 50
    • RS trở thành âm
  3. Điều kiện nhập cảnh trở lại:
    • Giá vượt trên EMA13 và EMA13 vượt trên EMA21
    • RS vẫn dương tính
    • Hoặc giá phá vỡ trên mức cao tuần trước

Ưu điểm chiến lược

  1. Xác nhận nhiều tín hiệu làm giảm rủi ro đột phá sai
  2. Tích hợp phân tích sức mạnh tương đối có hiệu quả lọc những người có hiệu suất tốt
  3. Dùng cơ chế điều chỉnh khung thời gian thích nghi
  4. Hệ thống kiểm soát rủi ro toàn diện
  5. Cơ chế nhập cảnh thông minh
  6. Hiển thị tình trạng giao dịch trong thời gian thực

Rủi ro chiến lược

  1. Khả năng giao dịch thường xuyên trong thị trường hỗn loạn
  2. Nhiều chỉ số có thể dẫn đến tín hiệu chậm
  3. Các ngưỡng RSI cố định có thể không phù hợp với tất cả các điều kiện thị trường
  4. Tính toán RS phụ thuộc vào độ chính xác của chỉ số tham chiếu
  5. Giá dừng lỗ cao 52 tuần có thể quá lỏng lẻo

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

  1. Đưa ra các ngưỡng RSI thích nghi
  2. Tối ưu hóa logic điều kiện tái nhập
  3. Thêm kích thước phân tích khối lượng
  4. Cải thiện các cơ chế thu lợi nhuận và dừng lỗ
  5. Thực hiện các bộ lọc biến động
  6. Tối ưu hóa thời gian tính toán sức mạnh tương đối

Tóm lại

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 sức mạnh tương đối. Cơ chế xác nhận tín hiệu nhiều và hệ thống kiểm soát rủi ro làm cho nó rất thực tế. Thông qua các hướng tối ưu hóa được đề xuất, có chỗ để cải thiện hơn nữa. Việc thực hiện thành công đòi hỏi các nhà giao dịch phải có sự hiểu biết sâu sắc về thị trường và thực hiện điều chỉnh tham số thích hợp dựa trên các đặc điểm cụ thể của công cụ giao dịch.


/*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)


Có liên quan

Thêm nữa