리소스 로딩... 로딩...

이중 EMA 및 상대적 강도 적응 거래 전략

저자:차오장, 날짜: 2024-12-04 15:29:05
태그:EMARSIRS

img

전반적인 설명

이 전략은 이중 EMA 시스템, 상대적 강도 지수 (RSI) 및 상대적 강도 (RS) 분석을 결합한 포괄적인 거래 시스템이다. 이 전략은 신호 확인을 위해 벤치마크 지수와 관련하여 RSI 및 RS 값을 활용하면서 13 일 및 21 일 지수 지수 이동 평균 (EMA) 의 크로스오버를 통해 트렌드를 확인하고 다차원적 거래 결정 메커니즘을 구현합니다. 또한 52 주 최고 수준 및 재입구 조건 판단에 기반한 위험 통제 메커니즘을 포함합니다.

전략 원칙

이 전략은 여러 신호 확인 메커니즘을 사용합니다.

  1. 입구 신호는 다음 조건이 필요합니다.
    • EMA13가 EMA21보다 높거나 EMA13보다 높은 가격
    • RSI 60 이상
    • 양성 상대 강도 (RS)
  2. 출입 조건은 다음과 같습니다.
    • 가격은 EMA21 아래로 떨어집니다.
    • 50 이하의 RSI
    • RS는 음으로 변합니다.
  3. 재입국 조건:
    • EMA13 위와 EMA21 위의 가격 교차
    • RS는 여전히 긍정적입니다.
    • 아니면 지난 주 최고치보다 가격이 떨어질 수도 있습니다.

전략적 장점

  1. 복수 신호 확인은 거짓 유출 위험을 줄여줍니다.
  2. 상대적 강도 분석을 통합하여 강력한 성능을 효과적으로 필터링합니다.
  3. 적응 시간 프레임 조정 메커니즘을 채택
  4. 포괄적 인 위험 관리 시스템
  5. 지능적인 재입구 메커니즘
  6. 실시간 거래 상태 시각화

전략 위험

  1. 불안한 시장에서 잠재적인 빈번한 거래
  2. 여러 가지 지표로 인해 신호가 뒤떨어질 수 있습니다.
  3. 고정된 RSI 문턱은 모든 시장 조건에 적합하지 않을 수 있습니다.
  4. RS 계산은 벤치마크 지수의 정확도에 달려 있습니다.
  5. 52주 높은 스톱 로스는 너무 느슨할 수 있습니다.

전략 최적화 방향

  1. 적응성 RSI의 임계치 도입
  2. 재입구 조건 논리의 최적화
  3. 부피 분석 차원의 추가
  4. 이윤 취득 및 스톱 로스 메커니즘 강화
  5. 변동성 필터의 구현
  6. 상대 강도 계산 기간의 최적화

요약

이 전략은 기술적 분석과 상대적 강도 분석을 결합하여 포괄적인 거래 시스템을 구축합니다. 여러 신호 확인 메커니즘과 위험 제어 시스템이 매우 실용적입니다. 제안된 최적화 방향에 의해 추가 개선의 여지가 있습니다. 성공적인 구현은 거래자가 시장을 깊이 이해하고 특정 거래 도구 특성에 따라 적절한 매개 변수 조정을 수행해야합니다.


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


관련

더 많은