Dynamische Gewinnmitnahmestrategie mit gleitendem Durchschnitt


Erstellungsdatum: 2023-09-18 21:46:47 zuletzt geändert: 2023-09-18 21:46:47
Kopie: 3 Klicks: 606
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf einem beweglichen Durchschnitt, um die Richtung des Trends zu bestimmen, mit einem bestimmten Anteil an ATR-Stopps und in Verbindung mit ATR-dynamischen Positionsanpassungen. Das Ziel ist es, den Trend zu verfolgen, um zu profitieren, während das Risiko kontrolliert wird.

Grundsätze

Die Strategie verwendet einen einfachen Moving Average mit einer Länge von N, um die Richtung des Trends zu bestimmen. Wenn Sie einen langen SMA auf einem kurzfristigen SMA tragen, machen Sie mehr; Wenn Sie einen langen SMA unter einem kurzfristigen SMA tragen, machen Sie weniger.

Nach dem Eintritt wird die Strategie mit einem bestimmten Multiplikator des ATR als Stopp eingestellt, wenn die Long-Position den Einstiegspreis + ATR * Factor hält. Der Stopp wird ausgeführt, wenn der Preis den Stopp überschreitet.

Darüber hinaus wird die Strategie auf die Größe des ATR angepasst. Die Größe des ATR repräsentiert die Marktfluktuation, die Größe der Position ist im Gegensatz zur ATR. Je größer der ATR, desto kleiner die Position.

Vorteile

  1. Der Moving Average ist eine Art Trendspeicher, mit dem man die Richtung des Trends bestimmen kann.

  2. Die ATR-Stopp-Methode ist gewinnbringend und vermeidet die Umkehrung.

  3. Dynamische Positionsanpassungen, die das Risiko entsprechend der Schwankungen des Marktes steuern können.

  4. Die Stopp-Faktoren und Positionsparameter können angepasst werden.

  5. Die Kombination von Stop-Loss kann das Risiko weiter begrenzen.

Risiken und Lösungen

  1. Es gibt eine Verzögerung des Moving Averages, die zu einer Verzögerung des Eintritts führen kann. Sensible Parameter können getestet werden.

  2. Eine Änderung der ATR-Größe kann dazu führen, dass der Stopp zu klein oder zu groß wird. Die ATR-Gleichlinie kann hinzugefügt werden, um ihre Tendenz zu extrahieren.

  3. Bei starken Schwankungen kann die Position einen zu geringen Einfluss auf den Gewinn haben. Sie können eine Positionsgrenze festlegen.

  4. Das Risiko einer Vergrößerung der Verluste, wenn der Stop-Loss nicht festgelegt ist. Eine mobile Stop-Loss-Strategie kann hinzugefügt werden.

  5. Die Strategie kann nicht gut funktionieren, wenn die Auswahl der Indizes nicht angemessen ist, z. B. für Assets mit geringer Volatilität. Die Auswahl der Indizes mit höherer Volatilität sollte vorgenommen werden.

Optimierung

  1. Verschiedene Parameterkombinationen werden getestet, um die optimale Parameter zu finden.

  2. Optimierung der Positionsöffnungslogik, z. B. durch Filterung auf andere Kennzahlen.

  3. Die Studie untersucht dynamische Stop-Loss- und Stop-Loss-Strategien, um Stop-Loss-Strategien flexibler zu gestalten.

  4. Positionsmanagement in Verbindung mit Volatilitätsindikatoren.

  5. Die Einführung eines Wiedereintrittsmechanismus zur Verlängerung der Aufenthaltsdauer

Zusammenfassen

Die Strategie nutzt bewegliche Mittel, um Trends zu beurteilen, in ATR zu stoppen und Positionen dynamisch anzupassen. Der Vorteil ist, dass eine gewisse Trendverfolgung möglich ist, um das Risiko durch Parameter anzupassen. Es gibt jedoch Probleme wie Schwierigkeiten bei der Parameterwahl, Überschreitung der Stop-ups.

Strategiequellcode
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dongyun

//@version=4
strategy("利润目标止损的移动平均线", overlay=true)

period = input(80,'')
ptper = input(252,'')
ptfactor = input(12,'')
sizeper = input(20, '')

trend = 0.0
signal = 0
size = 1.0
investment = 100000
atrange = 0.0
ptrange = 0.0
stoph = 0.0
stopl = 0.0


if sizeper != 0
	atrange := atr(sizeper)

if atrange == 0 or sizeper == 0 
	size := 1
else
	size := investment/atrange * 0.1

trend := sma(close,period)


if signal != 1 and nz(trend[1]) < nz(trend[2]) and trend > nz(trend[1])
	strategy.entry('long',strategy.long, comment='open_long')
	signal := 1
else
    signal := nz(signal[1])
    
if signal != -1 and nz(trend[1]) > nz(trend[2]) and trend < nz(trend[1])
	strategy.entry('short',strategy.short, comment='open_short')
	signal := -1
else
    if signal == 0
        signal := nz(signal[1])

ptrange := atr(ptper)

if strategy.position_size > 0
	strategy.exit("exit_long", "long", qty = strategy.position_size, limit = close + ptfactor*ptrange , comment='trail_long') 
else
	if strategy.position_size < 0
		strategy.exit("exit_short", "short", qty = abs(strategy.position_size), limit = close - ptfactor*ptrange, comment='trail_short')