Dynamische Durchschnittspreisverfolgungsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-29 15:28:53
Tags:

img

Übersicht

Die Hauptidee dieser Strategie ist, dass, wenn der Aktienkurs auf einen bestimmten Prozentsatz sinkt, Positionen allmählich erhöht werden können, um die durchschnittlichen Kosten der Holding-Position zu senken.

Strategieprinzip

Wenn der Aktienkurs erstmals über den 20-tägigen einfachen gleitenden Durchschnitt steigt, gehen Sie lang, um eine Position zu eröffnen. Wenn die Aktie dann um den festgelegten Zielverlustprozentsatz, z. B. 10% fällt, fügen Sie die Position zu einem bestimmten Prozentsatz, z. B. 50% der aktuellen Position, hinzu. Dies senkt die durchschnittlichen Kosten der Halteposition. Wenn der Aktienkurs den festgelegten Gewinnpunkt erreicht, z. B. 10% über den durchschnittlichen Haltepreis, schließen Sie alle Positionen, um Gewinn zu erzielen.

Insbesondere setzt die Strategiefunktion Parameter wie die Erlaubnis von bis zu 4 zusätzlichen Käufen, wobei die Positionsgröße als Prozentsatz des Eigenkapitals und die anfängliche Positionsgröße bei 10% des Eigenkapitals festgelegt wird. Sie erhält die 20-tägige einfache gleitende Durchschnittslinie. Wenn der Schlusskurs über diesen Durchschnitt liegt und es keine aktuelle Position gibt, eröffnet sie eine Long-Position. Sie berechnet dann den schwimmenden Gewinn/Verlustprozentsatz der Position. Wenn sie den Zielverlustprozentsatz erreicht, setzt sie die Pyramide am Ziel zusätzlichen Kaufprozentsatz fort, bis sich die Aktie erholt, um das Gewinnziel zu erreichen.

Analyse der Vorteile

Der größte Vorteil dieser Art von Strategie besteht darin, dass bei ungünstigen Marktbedingungen die durchschnittlichen Kosten der Holding-Position durch Pyramide-Zusatzkäufe reduziert werden können. Dies ermöglicht es, größere Gewinne zu erzielen, wenn sich die Marktbedingungen verbessern, wodurch der "Lose less, earn more" Effekt erreicht wird. Im Vergleich zu einfachen Stop-Losses kann diese Strategie Marktbewegungen besser erfassen, anstatt gezwungen zu werden, Verluste zu stoppen, wenn die Preise weiter fallen.

Gleichzeitig erlaubt die Strategie mehrere zusätzliche Einkäufe, wobei die zeitlichen Unterschiede bei Marktumkehrungen maximal genutzt werden, um Positionen schrittweise anzupassen.

Risikoanalyse

Wenn die Preise weiterhin sinken, besteht natürlich auch die Gefahr, dass diese Strategie erhebliche Verluste verursacht. Vor allem auf Bärenmärkten kann das Ausmaß der Preissenkungen unsere Vorstellung weit übersteigen. Daher müssen Anteil und Anzahl der zusätzlichen Einkäufe vernünftigerweise festgelegt werden, um das Risiko innerhalb eines akzeptablen Bereichs zu kontrollieren.

Gleichzeitig müssen wir uns bewusst sein, dass, wenn alle Anleger eine solche Strategie anwenden, wenn viele Anleger ihr Verlustprozentsatzziel erreichen, es zu einem kollektiven Szenario kommen könnte, bei dem die Positionen erhöht werden. Dies würde die Preise nach oben treiben und einen irrationalen kurzfristigen Aufschwung hervorrufen. Wenn wir die Situation nicht richtig bewerten, könnten wir den Markttrend falsch beurteilen und unsere Position weiter erhöhen. Das Ergebnis wären noch größere Verluste, wenn die Preise wieder sinken.

Optimierungsrichtlinien

Diese Strategie kann auf verschiedene Weise optimiert werden:

  1. Dynamische Anpassung des zusätzlichen Einkaufsprozentsatzes, der in Echtzeit anhand der Marktbedingungen angepasst werden kann.

  2. Verwenden Sie quantitative Indikatoren, z. B. überwachen Sie Volumenanstiege, um Umkehrsignale zu bestätigen und falsche Signale zu vermeiden.

  3. Verwenden Sie nach zusätzlichen Käufen ein progressives Stop-Loss-System, um sicherzustellen, dass die Verluste innerhalb eines bestimmten Bereichs gehalten werden.

Zusammenfassung

Die dynamische Durchschnittspreisverfolgungsstrategie nutzt den Durchschnittspreiseffekt, indem sie Positionen durch zusätzliche Einkäufe anpasst. Unter der Voraussetzung, dass sie über ausreichende Kapitalunterstützung verfügt, kann sie bei Preisumkehr effektiv überdurchschnittliche Renditen erzielen. Der Schlüssel besteht darin, den Zeitpunkt und die Proportionen richtig zu beurteilen, um Risiken in akzeptablen Grenzen zu halten. Wenn dies angemessen angewendet wird, kann dies eine sehr effektive Methode im quantitativen Handel sein.


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

//@version=3

// ########################################################################## // 
//
// This scipt is intended to demonstrate how pyramiding can be used to average
// down a position.
//
// We will buy when a stock closes above its 20 day MA and Average down if
// the trade does not go in our favor. We will hold until a profit is made. 
// (which could mean we hold forever)
//
// ########################################################################## //

strategy("Average Down", overlay=true )

// Date Ranges
from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
from_day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
from_year  = input(defval = 2010, title = "From Year")
to_month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
to_day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = true
// Strategy Inputs
target_perc = input(-10, title='Target Loss to Average Down (%)', maxval=0)/100
take_profit = input(10, title='Target Take Profit', minval=0)/100
target_qty  = input(50, title='% Of Current Holdings to Buy', minval=0)/100 
sma_period  = input(20, title='SMA Period') 

// Get our SMA, this will be used for our first entry 
ma = sma(close,sma_period)

// Calculate our key levels
pnl = (close - strategy.position_avg_price) / strategy.position_avg_price
take_profit_level = strategy.position_avg_price * (1 + take_profit)

// First Position
first_long = crossover(close, ma) and strategy.position_size == 0 and window
if (first_long)
    strategy.entry("Long", strategy.long)

// Average Down!
if (pnl <= target_perc)
    qty = floor(strategy.position_size * target_qty)
    strategy.entry("Long", strategy.long, qty=qty)

// Take Profit!
strategy.exit("Take Profit", "Long", limit=take_profit_level)

// Plotting
plot(ma, color=blue, linewidth=2, title='SMA')
plot(strategy.position_avg_price, style=linebr, color=red, title='Average Price')

Mehr