SMA Crossover Long-Short Strategie


Erstellungsdatum: 2024-04-01 11:11:02 zuletzt geändert: 2024-04-01 11:11:02
Kopie: 0 Klicks: 605
1
konzentrieren Sie sich auf
1617
Anhänger

SMA Crossover Long-Short Strategie

Überblick

Die Strategie basiert auf einem einfachen Moving Average (SMA) Crossover. Sie verwendet zwei unterschiedliche Perioden von SMAs, um ein Handelssignal zu erzeugen. Wenn ein schneller SMA einen langsamen SMA von unten durchläuft, wird ein Mehrkopfsignal erzeugt. Wenn ein schneller SMA einen langsamen SMA von oben durchläuft, wird ein Hohlkopfsignal erzeugt.

Strategieprinzip

Das Kernprinzip der Strategie besteht darin, ein Handelssignal aus dem Kreuzung von SMA zu erzeugen. SMA ist ein Trend-Tracking-Indikator, der die Gesamtrichtung der Preise durch den Durchschnitt der Schlusskosten in der vergangenen Zeit bestimmt. Durch die Verwendung von zwei unterschiedlichen SMA-Zyklen kann die Strategie die Veränderung der Markttrends erfassen. Wenn ein schneller SMA einen Aufwärtstrend durchschreitet, zeigt dies, dass ein Aufwärtstrend möglicherweise entsteht, so dass die Strategie in die Mehrheit geht.

Die Strategie verwendet das Konzept der Kompensation, um die Positionsgröße zu verwalten. Sie berechnet die Positionsgröße basierend auf dem aktuellen Kontostand und dem kumulierten Gewinn. Dies bedeutet, dass die Strategie die Positionsgröße entsprechend erhöht, um das Gewinnpotenzial zu maximieren, wenn der Kontostand wächst. Durch die dynamische Anpassung der Positionsgröße kann die Strategie die Vorteile des Kontostands optimal nutzen.

Strategische Vorteile

  1. Einfach und leicht zu verstehen: Die Strategie basiert auf SMA-Kreuzungen und ist eine einfache und leicht verständliche Trendverfolgungsstrategie. Sie erfordert keine komplizierten Marktzeitungen oder subjektive Urteile und macht die Strategie einfach zu implementieren und zu verwalten.

  2. Trend-Tracking: Durch die Verwendung von SMA-Kreuzungen kann die Strategie die Markttrends effektiv erfassen. Sie kann im Aufwärtstrend mehrere Geschäfte tätigen und im Abwärtstrend ungeschäftlich handeln, um das Gewinnpotenzial zu maximieren.

  3. Dynamisches Positionsmanagement: Die Strategie verwendet das Konzept der Rendite, um die Positionsgröße zu verwalten. Durch die Anpassung der Positionsgröße an die Dynamik der Kontostände und der kumulierten Gewinne kann die Strategie die Vorteile des Kontos voll nutzen und die Profitabilität verbessern.

  4. Anpassungsfähigkeit: Die Strategie kann auf verschiedene Märkte und Anlageklassen wie Aktien, Devisen, Waren usw. angewendet werden. Ihre Einfachheit und Anpassungsfähigkeit machen sie zu einer universellen Handelsstrategie.

Strategisches Risiko

  1. Marktrisiko: Die Strategie hängt von der Beständigkeit der Markttrends ab. In Fällen von Marktschwankungen oder Trendwende kann die Strategie Verluste erleiden.

  2. Parameterrisiko: Die Strategie kann abhängig von der Wahl des Zyklus des SMAs funktionieren. Verschiedene Kombinationen von Zyklen können zu unterschiedlichen Ergebnissen führen. Die falsche Parameterwahl kann zu einer schlechten Strategie oder zu verpassten Handelsmöglichkeiten führen.

  3. Übertrieben: Häufige SMA-Kreuzungen können zu übertriebenen Transaktionen führen, die die Transaktionskosten und die Gleitpunkte erhöhen und somit die Gesamtperformance der Strategie beeinträchtigen.

  4. Wiederholungsrisiko: Während Wiederholungsrisiko die Profitabilität einer Strategie erhöht, erhöht es auch das Risiko von Verlusten. In der Folge von Verlusten kann der Kontostand schnell schrumpfen, was die Wiederherstellung der Strategie einschränkt.

Richtung der Strategieoptimierung

  1. Parameteroptimierung: Optimierung der SMA-Zyklen, um die optimale Kombination von Parametern zu finden, um die Performance der Strategie zu verbessern. Die Rückverfolgung kann mit historischen Daten durchgeführt werden, und Optimierungsalgorithmen wie die Gittersuche oder genetische Algorithmen können verwendet werden, um die optimalen Parameter zu finden.

  2. Risikomanagement: Einführung von Risikomanagement-Maßnahmen wie Stop-Loss- und Stop-Stops, um die Verluste bei einzelnen Geschäften zu begrenzen und die Gewinne zu schützen. Stop-Loss- und Stop-Stopp-Levels können entsprechend der dynamischen Marktschwankungen angepasst werden, um sich an unterschiedliche Marktbedingungen anzupassen.

  3. Trendfilter: Außerhalb der SMA-Kreuzung werden andere Trendbestätigungsindikatoren wie MACD oder ADX eingeführt, um falsche Signale zu filtern und die Signalqualität zu verbessern. Der Handel wird nur durchgeführt, wenn mehrere Indikatoren gleichzeitig einen Trend bestätigen, um die Zuverlässigkeit der Strategie zu erhöhen.

  4. Optimierung der Positionsverwaltung: Positionsverwaltungsregeln zur Optimierung von Gewinn- und Verluststrategien, wie die Einführung von Risikokontrollen, die die Risikogruppe für einzelne Geschäfte begrenzen. Es kann in Erwägung gezogen werden, die Positionsgröße für jeden Handel mit der Kelly-Formel oder einem festen Risikoprozentsatz zu bestimmen, um Risiko und Rendite auszugleichen.

Zusammenfassen

Die Strategie ist eine SMA-basierte Trend-Tracking-Strategie, die das Konzept der Recurrence verwendet, um die Positionsgröße zu verwalten. Ihre Vorteile liegen in ihrer Einfachheit und Komplexität, ihrer Trend-Tracking-Fähigkeit und ihrer dynamischen Positionsverwaltung und Anpassungsfähigkeit. Sie steht jedoch auch vor Herausforderungen wie Marktrisiken, Parameterrisiken, Überhandelungs- und Recurrence-Risiken.

Strategiequellcode
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Umesh SMA Crossover Strategy", overlay=true)

// Input parameters
fast_length = input.int(9, title="Fast SMA Length")
slow_length = input.int(21, title="Slow SMA Length")

// Calculate SMAs
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)

// Plot SMAs
plot(fast_sma, color=color.blue, title="Fast SMA")
plot(slow_sma, color=color.red, title="Slow SMA")

// Strategy logic
longCondition = ta.crossover(fast_sma, slow_sma)
shortCondition = ta.crossunder(fast_sma, slow_sma)

// Initialize cumulative profit with netprofit
var float cumulative_profit = na
if (na(cumulative_profit))
    cumulative_profit := strategy.netprofit

// // Initialize starting balance
// var float starting_balance = na
// if (na(starting_balance))
//     starting_balance := strategy.equity

// Initialize starting balance
var float starting_balance = na
if (na(starting_balance))
    starting_balance := 100000.0 // Initial balance

// Calculate profit or gains
if (strategy.opentrades != 0)
    cumulative_profit := strategy.netprofit + (strategy.equity - starting_balance)

// Calculate position size based on current balance and cumulative profit
//position_size = 100000 
position_size = starting_balance + cumulative_profit

// Entry conditions
if (longCondition)
    strategy.entry("Long", strategy.long, qty = position_size / close)
if (shortCondition)
    strategy.entry("Short", strategy.short, qty = position_size / close)

// // Entry conditions
// if (longCondition)
//     strategy.entry("Long", strategy.long, qty = 100000 / close)
// if (shortCondition)
//     strategy.entry("Short", strategy.short, qty = 100000 / close)


// Plot strategy.equity 
plot(strategy.equity, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = strategy.equity, text = str.tostring(strategy.equity), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)
// Plot cumulative profit
plot(cumulative_profit, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = cumulative_profit, text = str.tostring(cumulative_profit), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)

// Plot cumulative profit
plot(position_size, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = position_size, text = str.tostring(position_size), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)