Die Ressourcen sind geladen. Beförderung...

Dual EMA und Adaptive Handelsstrategie für die relative Stärke

Schriftsteller:ChaoZhang, Datum: 2024-12-04 15:29:05
Tags:EMARSIRS

img

Übersicht

Diese Strategie ist ein umfassendes Handelssystem, das ein duales EMA-System, einen Relative Strength Index (RSI) und eine Relative Strength (RS) -Analyse kombiniert. Die Strategie bestätigt Trends durch die Überschneidung von 13-Tage- und 21-Tage-Exponential Moving Averages (EMA), während RSI- und RS-Werte im Verhältnis zu einem Benchmark-Index zur Signalbestätigung verwendet werden.

Strategieprinzipien

Die Strategie verwendet einen Mehrsignalbestätigungsmechanismus:

  1. Eintrittssignale müssen folgende Bedingungen erfüllen:
    • EMA13 überschreitet EMA21 oder Preis über EMA13
    • RSI über 60
    • Positive relative Festigkeit (RS)
  2. Zu den Bedingungen für die Ausreise gehören:
    • Der Preis fällt unter die EMA21
    • RSI unter 50
    • RS wird negativ.
  3. Bedingungen für die Wiedereinreise:
    • Preiskreuzungen über die EMA13 und die EMA13 über die EMA21
    • RS bleibt positiv
    • Oder die Preise brechen über das letzte Wochenhoch.

Strategische Vorteile

  1. Mehrfache Signalbestätigung verringert das Risiko eines falschen Ausbruchs
  2. Die Integration der Relative-Strength-Analyse filtert die Leistungsträger effektiv
  3. Anpassung des zeitlichen Rahmens
  4. Umfassendes Risikokontrollsystem
  5. Intelligenter Wiedereintrittsmechanismus
  6. Echtzeit-Visualisierung des Handelsstatus

Strategische Risiken

  1. Möglicher häufiger Handel auf unruhigen Märkten
  2. Mehrere Indikatoren können zu verzögerten Signalen führen
  3. Festgelegte RSI-Schwellenwerte entsprechen möglicherweise nicht allen Marktbedingungen
  4. Die Berechnung des RS hängt von der Genauigkeit des Referenzindex ab
  5. 52-Wochen-Hoch-Stop-Loss könnte zu locker sein

Strategieoptimierungsrichtlinien

  1. Einführung anpassungsfähiger RSI-Schwellenwerte
  2. Optimierung der Logik der Wiedereintrittsbedingungen
  3. Hinzufügung der Größenordnung der Volumenanalyse
  4. Verbesserung der Mechanismen zur Gewinngewinnung und zum Stop-Loss
  5. Einführung von Volatilitätsfiltern
  6. Optimierung der Berechnungszeiten für die relative Festigkeit

Zusammenfassung

Die Strategie baut ein umfassendes Handelssystem auf, indem sie technische Analyse und Relative Strength Analysis kombiniert. Der mehrfache Signalbestätigungsmechanismus und das Risikokontrollsystem machen es sehr praktisch. Durch die vorgeschlagenen Optimierungsrichtungen gibt es Raum für weitere Verbesserungen. Eine erfolgreiche Umsetzung erfordert, dass Händler ein tiefes Verständnis des Marktes haben und geeignete Parameteranpassungen basierend auf spezifischen Handelsinstrumenten vornehmen.


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


Verwandt

Mehr