Diese Pine-Skript-Strategie implementiert einen täglichen Dollar-Kosten-Durchschnittsansatz auf der TradingView-Plattform und enthält EMA-Touchsignale, um Einstiegspunkte zu bestimmen.
Die Strategie hat folgende Hauptmerkmale:
Durchschnittswert der täglichen Dollarkosten
EMA für Eingangssignale
Dynamischer Stop-Loss
Grenze für die Handelszahl
Insbesondere investiert die Strategie jeden Tag einen festen Betrag und berechnet die zu kaufenden Aktien anhand des Schlusskurses. Wenn der Schlusskurs über einen der 5-, 10-, 20-Tage-EMA usw. geht, wird ein Kaufsignal ausgelöst. Sobald die kumulierte Handelszahl die 300-Grenze erreicht hat, werden keine weiteren Käufe mehr stattfinden. Darüber hinaus werden alle Positionen geklärt, wenn der Preis unter dem 20-Tage-SMA schließt oder das vorgegebene Ausgangsdatum erreicht. Das Skript zeichnet auch die EMAs für die visuelle Analyse auf dem Preisdiagramm ab.
Zu den Vorteilen dieser Strategie gehören:
Diversifizierung der Risiken
EMA-Kombination verhindert Rückgänge
Dynamische Stop-Loss-Kontrollen für Verluste
Handelsgrenzkontrollen Risiken
Intuitive EMA-Visualisierung
Sehr anpassungsfähig
Die Strategie birgt außerdem einige Risiken:
Systemische Risiken bestehen noch
Festbetrag der Investition
EMAs können nicht auf extreme Bewegungen reagieren
Gewinnepotenzial
Ein Stop-Loss-Platz erfordert Sorgfalt
Weitere Optimierungen:
Dynamischer täglicher Anlagebetrag
Zusätzliche Eintrittssignale
Exponentielle gleitende Durchschnitte
Dynamische Positionsgrenze
Nachfolgender Stopverlust
Zusammenfassend lässt sich sagen, dass diese von der EMA kombinierte tägliche DCA-Strategie das Konzept langfristiger periodischer Investitionen umfasst und Risiken über mehrere kleine Einträge im Vergleich zu großen Einmalkäufen verteilt. Die EMAs helfen, kurzfristige Pullback-Risiken bis zu einem gewissen Grad zu vermeiden, während der Stop-Loss den maximalen Verlust kontrolliert. Dennoch müssen Schwarzschwanenrisiken und die Einschränkungen der festen Investitionsgröße beachtet werden. Diese Aspekte liefern zukünftige Verbesserungsrichtungen durch Parameter-Tuning und Indikatorkombinationen für den Aufbau effizienter, aber stabiler Quant-Strategien.
/*backtest start: 2024-01-08 00:00:00 end: 2024-01-15 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Daily DCA Strategy with Touching EMAs", overlay=true, pyramiding=10000) // Customizable Parameters daily_investment = input(50000, title="Daily Investment") start_year = input(2022, title="Start Year") start_month = input(1, title="Start Month") start_day = input(1, title="Start Day") end_year = input(2023, title="End Year") end_month = input(12, title="End Month") end_day = input(1, title="End Day") trade_count_limit = input(10000, title="Pyramiding Limit") enable_sell = input(true, title="Enable Sell") start_date = timestamp(start_year, start_month, start_day) var int trade_count = 0 // Calculate the number of shares to buy based on the current closing price shares_to_buy = daily_investment / close // Check if a new day has started and after the start date isNewDay = dayofmonth != dayofmonth[1] and time >= start_date // Buy conditions based on EMA crossovers ema5_cross_above = crossover(close, ema(close, 5)) ema10_cross_above = crossover(close, ema(close, 10)) ema20_cross_above = crossover(close, ema(close, 20)) ema50_cross_above = crossover(close, ema(close, 50)) ema100_cross_above = crossover(close, ema(close, 100)) ema200_cross_above = crossover(close, ema(close, 200)) if isNewDay and (ema5_cross_above or ema10_cross_above or ema20_cross_above or ema50_cross_above or ema100_cross_above or ema200_cross_above) and trade_count < trade_count_limit strategy.entry("Buy", strategy.long, qty=shares_to_buy) trade_count := trade_count + 1 // Dynamic sell conditions (optional) sell_condition = true if enable_sell and sell_condition strategy.close_all() // EMA Ribbon for visualization plot(ema(close, 5), color=color.red, title="EMA 5") plot(ema(close, 10), color=color.orange, title="EMA 10") plot(ema(close, 20), color=color.yellow, title="EMA 20") plot(ema(close, 50), color=color.green, title="EMA 50") plot(ema(close, 100), color=color.blue, title="EMA 100") plot(ema(close, 200), color=color.purple, title="EMA 200")