
Die Strategie wird als MADEFlex-Strategie bezeichnet. Die Strategie basiert auf einer flexiblen Quantifizierungsstrategie, die auf einem Moving Average Envelope mit einer durchschnittlichen realen Reichweite basiert. Die Strategie kombiniert die Moving Average Envelope-Indikatoren mit einer durchschnittlichen realen Reichweite und ermöglicht eine flexible und kontrollierbare Lösung für den Quantifizierungshandel.
Der Kern dieser Strategie ist der Moving Average Envelope (MADE) Indikator. Der MADE Indikator bildet einen Moving Average (EMA) durch die Multiplikation eines Index, der mit einem Prozentsatzfaktor verschoben wird. Wenn der Preis den Kurs überschreitet, erzeugt er ein Verkaufssignal. Wenn der Preis den Kurs überschreitet, erzeugt er ein Kaufsignal.
Insbesondere enthält der MADE-Indikator drei Parameter: Period Period, Uptrend pro Ab und Downtrend pro Bl. Der Period bestimmt die Dauer der EMA. Die Höhe der Uptrend-Distanz von der EMA wird durch einen Prozentsatzfaktor gesteuert. Der ATR-Stoppwert wird hauptsächlich durch den ATR-Period nATRPeriod und den ATR-MultiplikatornATRMultip festgelegt.
Letztendlich erzeugt man ein Kauf- und Verkaufssignal durch die Kombination von MADE-Indikatorsignal und ATR-Folge Stop-Loss-Bedingungen. Die Umkehrung kann durch den Reverse-Trading-Input-Schalter reverse realisiert werden.
Die MADEFlex-Strategie hat folgende Vorteile:
In Kombination mit einem Indikatorsignal und einer Dämpfungsmechanik ist es zuverlässiger. Die MADE-Indikatoren selbst sind anfällig für Fehlsignale. In Kombination mit ATR-Folge-Dämpfung kann ein Teil des Geräusches effektiv gefiltert werden.
Die Parameter sind vielfältig und flexibel zu steuern. Die Parameter für die MADE-Indikatoren und die ATR-Parameter können angepasst werden, um die Anzahl und Qualität des Signals zu steuern.
Unterstützt Reverse-Handeln. Reverse-Handeln mit Reverse-Schalter, um die Strategie zu nutzen.
Visualisierung der Stopp-Intuition. Durch die Zeichnung der Stop-Line wird die Stop-Effekt intuitiv beurteilt.
Die MADEFlex-Strategie birgt auch folgende Risiken:
Eine falsche MADE-Parameter-Angabe kann zu einer Vielzahl von Fehlsignalen führen. Es muss sorgfältig getestet werden, um die richtigen Parameter zu ermitteln.
ATR-Stopps, die zu locker sind, können eine Stopp-Möglichkeit verpassen. Es wird empfohlen, die entsprechende ATR-Multiplikation zu testen.
Umkehroperationen sind sehr riskant. Vor allem bei hoher Volatilität kann die Umkehroperation das Verlustrisiko erhöhen.
Das Fehlen einer Stop-Loss-Sicherung kann zu größeren Schäden führen. In extremen Fällen kann das Fehlen einer Stop-Loss-Sicherung zu größeren Schäden führen.
Die MADEFlex-Strategie kann in folgenden Richtungen optimiert werden:
Optimierung von MADE-Parametern zur Verbesserung der Signalqualität. Verschiedene Periodizitätstests und Prozentsatz-Parametern können verwendet werden, um zuverlässigere Kombinationen zu finden.
Optimierung der ATR-Stopp-Parameter für bessere Stopp-Effekte. ATR-Zyklen und ATR-Multiplikatoren können getestet werden, um die geeignetste Kombination zu bestimmen.
Zusätzliche Filterbedingungen, um Fehlsignale weiter zu reduzieren.
Ein zusätzlicher Stop-Out-Strategie, bei der ein Stop-Out-System ausgeführt wird, sobald die Gewinne ein bestimmtes Niveau erreicht haben.
Dynamische Optimierungsparameter in Kombination mit maschinellen Lernmethoden. Realzeitoptimierungsparameter mit Methoden wie Reinforcement Learning, um Strategien flexibler zu machen.
Die MADEFlex-Strategie kombiniert erfolgreich die Handelssignale des Moving Average Envelope Indicators mit der Methode der Average Real Range Tracking Stop Loss. Durch einstellbare Parameter wird eine flexible und kontrollierbare Lösung für den quantitativen Handel realisiert. Die Strategie ist zuverlässig, kontrollierbar und geeignet für die Nutzung und Optimierung von Benutzern mit einer bestimmten Quantitativbasis. Durch weitere Optimierung wird eine deutlichere Strategieperformance erwartet.
/*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)