Quantitativer Handel auf der Grundlage des gleitenden Durchschnitts und des ATR Trailing Stop

Schriftsteller:ChaoZhang, Datum: 2023-12-08 15:53:22
Tags:

img

Übersicht

Die Strategie trägt den Namen MADEFlex, was für Flexible Quantitative Trading Strategy Based on Moving Average Envelope and ATR Trailing Stop steht. Sie kombiniert den Moving Average Envelope Indikator und den ATR Trailing Stop Mechanismus, um eine flexible und kontrollierbare quantitative Handelslösung zu implementieren.

Grundsätze

Der Kern dieser Strategie ist der Moving Average Displaced Envelope (MADE) -Indikator. MADE bildet obere und untere Bands, indem er Prozentsatzfaktoren mit dem verdrängten exponentiellen gleitenden Durchschnitt (EMA) multipliziert. Verkaufssignale werden erzeugt, wenn die Preise über das obere Band brechen, und Kaufsignale werden erzeugt, wenn die Preise unter das untere Band brechen. Diese Strategie enthält den MADE-Indikator mit dem Trailing Stop-Mechanismus Average True Range (ATR). Der ATR Trailing Stop setzt Stop-Loss basierend auf mehreren Multiplikaten der ATR-Werte, wodurch eine flexible Verfolgung von Stop-Loss-Linien ermöglicht wird. Dies vermeidet unnötigen Stop-Loss und sperrt gleichzeitig bestehende Gewinne.

Der MADE-Indikator enthält 3 Parameter: Periode, Prozentsatz über perAb und Prozentsatz unter perBl. Der Periode-Parameter bestimmt die Periode der EMA. Die Abstand zwischen den oberen und unteren Bands von der EMA wird durch Prozentsatzfaktoren gesteuert. Der ATR-Stopp-Teil wird hauptsächlich durch die ATR-Periode nATRPeriod und ATR-Multiplikate nATRMultip festgelegt. Wenn der Preis die Stop-Loss-Linie des vorherigen Balkens überschreitet, wird die Stop-Loss-Linie auf den Preis minus den festen ATR-Verlust angepasst. Wenn der Preis unter die Stop-Loss-Linie des vorherigen Balkens fällt, wird die Stop-Loss-Linie auf den Preis plus den festen ATR-Verlust angepasst.

Schließlich werden Kauf- und Verkaufssignale erzeugt, indem die MADE-Indikatorsignale und die ATR-Trailing-Stop-Bedingungen kombiniert werden.

Analyse der Vorteile

Die MADEFlex-Strategie hat folgende Vorteile:

  1. MADE selbst neigt dazu, falsche Signale zu erzeugen.

  2. Die MADE- und ATR-Parameter können so eingestellt werden, dass die Signalmenge und -qualität gesteuert werden.

  3. Unterstützung des Reverse-Trading: Der Reverse-Trading bereichert Anwendungsszenarien.

  4. Intuitiv visualisierter Stopp, der die Stoppwirkung visuell anhand von gezeichneten Stopplinien beurteilt.

Risikoanalyse

Die MADEFlex-Strategie birgt außerdem folgende Risiken:

  1. Unzulängliche MADE-Parameter können zu viel falsches Signal erzeugen.

  2. Eine übermäßig lose ATR-Stoppverbindung kann Stoppmöglichkeiten verpassen. Geeignete ATR-Multiplikatoren müssen getestet werden.

  3. Hoheres Risiko beim Reverse-Trading. Besonders in Situationen mit hoher Volatilität kann der Reverse-Trading das Verlustrisiko erhöhen.

  4. In extremen Marktbedingungen kann das Fehlen eines Stop-Loss-Schutzes zu höheren Verlusten führen.

Optimierungsrichtlinien

Die MADEFlex-Strategie kann in folgenden Richtungen optimiert werden:

  1. Optimierung der MADE-Parameter zur Verbesserung der Signalqualität Verschiedene Perioden und Prozentsatzkombinationen können getestet werden, um zuverlässigere Parameter zu finden.

  2. Optimieren Sie die ATR-Stoppparameter für einen besseren Stopp-Effekt.

  3. Hinzufügen anderer Filter zur weiteren Verringerung falscher Signale, z. B. Kombination von Volatilitätsindikatoren für die Filterung.

  4. Hinzufügen Sie einen Profit-taking-Mechanismus, um bei bestimmten Gewinnniveaus auszusteigen.

  5. Verwenden Sie maschinelle Lernmethoden zur dynamischen Optimierung von Parametern, z. B. Verstärkungslernen.

Schlussfolgerung

Die MADEFlex-Strategie kombiniert erfolgreich die Handelssignale des Moving Average Envelope-Indikators und die ATR-Trailing-Stop-Methode. Durch anpassbare Parameter implementiert sie eine flexible und kontrollierbare quantitative Handelslösung. Die Strategie hat eine relativ hohe Zuverlässigkeit und eine starke Steuerungsfähigkeit. Sie eignet sich für Benutzer mit einer gewissen quantitativen Basis zur Verwendung und Optimierung. Mit weiteren Optimierungen kann mit einer signifikanteren Strategieleistung gerechnet werden.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated 
// by multiplying percentage factors with their displaced expotential 
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and 
// quality of the signals. If a previous high goes above the envelope 
// a sell signal is generated. Conversely, if the previous low goes below 
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)

nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')

longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)

xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
     close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
     close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false

iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1 
    if longAllowed and ATRLong
        strategy.entry('Long', strategy.long)
    else
        if ATRLong or strategy.position_size > 0
            strategy.close_all()
if possig == -1 
    if shortAllowed and ATRShort
        strategy.entry('Short', strategy.short)
    else    
        if ATRShort or strategy.position_size < 0
            strategy.close_all()
if possig == 0
    strategy.close_all()
    
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)



Mehr