Diese Strategie verwendet 2 Indikatoren, um Handelssignale zu generieren: 2/20 Exponential Moving Average und Average True Range Reversal.
Die Strategie besteht aus zwei Teilen:
2/20 Exponential Moving Average. Es berechnet die 20-Tage-EMA und erzeugt Signale, wenn der Preis die EMA nach oben oder unten überschreitet.
Durchschnittlicher True Range Reversal Indicator. Er berechnet das Stop-Loss-Niveau basierend auf ATR und erzeugt Signale, wenn der Preis durch das Stop-Loss-Niveau bricht. Hier wird 3.5 x ATR als Stop-Niveau verwendet.
Die Strategie kombiniert die Signale von beiden. Es geht kurz, wenn 2/20 EMA ein langes Signal gibt, während ATR-Umkehrung ein kurzes Signal gibt. Es geht lang, wenn entgegengesetzte Signale generiert werden.
Die Strategie kombiniert Trends und Umkehrungen, um Umkehrungen zu erfassen.
2/20 EMA identifiziert mittelfristigen Trend, vermeidet Marktlärm.
Die ATR-Umkehrung erfasst kurzfristige Umkehrungen und Chancen.
Durch die Kombination der Signale wird eine Trendwende im Voraus erfasst und die Rentabilität verbessert.
Ein angemessener ATR-Stoppverlust ermöglicht eine gewisse Risikokontrolle.
Der individuell anpassbare ATR-Multiplikator passt sich an verschiedene Produkte an.
Die Umkehroption passt sich den unterschiedlichen Marktbedingungen an.
Die Risiken sind:
2/20 EMA ist langsam und kann kurzfristige Chancen verpassen.
Ein breiterer Stoppverlust ist erforderlich.
Ein einziges Signal ist unzuverlässig, wir brauchen mehr Filter.
Vorsicht, wenn du überträgst.
Für die Anpassung des Produkts sind Parameter-Tuning und Backtest erforderlich.
Eine strenge Kapitalverwaltung ist erforderlich, um das Risiko pro Handel zu kontrollieren.
Die Strategie kann verbessert werden durch:
EMA-Parameter für die beste Kombination.
Optimierung des ATR-Multiplikators für einen besseren Stop-Loss.
Zusätzliche Filterbedingungen wie Volumen und Volatilität.
Hinzufügen eines Kapitalmanagementmodells für die dynamische Positionsgröße.
Hinzufügen anderer Stop-Loss-Strategien wie Chandelier Exit.
Prüfung von Parametern für verschiedene Produkte.
Hinzufügen von maschinellen Lernmodellen für bessere Leistung.
Ich kombiniere mehrere Unterstrategien für mehr Alpha.
Die Strategie kombiniert zwei Hauptideen und hat einen gewissen Vorteil, wenn es darum geht, Umkehrungen zu erfassen. Aber eine unangemessene Parameterwahl kann auch Risiken mit sich bringen. Weitere Verbesserungen der Stop-Loss-Strategie und das Hinzufügen von Filtern können die Stabilität und Rentabilität verbessern.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 05/04/2022 // This is combo strategies for get a cumulative signal. // // First strategy // This indicator plots 2/20 exponential moving average. For the Mov // Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met. // // Second strategy // Average True Range Trailing Stops Strategy, by Sylvain Vervoort // The related article is copyrighted material from Stocks & Commodities Jun 2009 // Please, use it only for learning or paper trading. Do not for real trading. // // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// EMA20(Length) => pos = 0.0 xPrice = close xXA = ta.ema(xPrice, Length) nHH = math.max(high, high[1]) nLL = math.min(low, low[1]) nXS = nLL > xXA or nHH < xXA ? nLL : nHH iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0) pos := nXS > close[1] ? -1 : iff_1 pos ATRR(nATRPeriod,nATRMultip) => pos = 0.0 xATR = ta.atr(nATRPeriod) nLoss = nATRMultip * xATR 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 pos:= close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos strategy(title='Combo 2/20 EMA & Average True Range Reversed', shorttitle='Combo', overlay=true) var I1 = '●═════ 2/20 EMA ═════●' Length = input.int(14, minval=1, group=I1) var I2 = '●═════ Average True Range Reversed ═════●' nATRPeriod = input.int(5, group=I2) nATRMultip = input.float(3.5, group=I2) var misc = '●═════ MISC ═════●' reverse = input.bool(false, title='Trade reverse', group=misc) var timePeriodHeader = '●═════ Time Start ═════●' d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader) m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader) y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader) StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false posEMA20 = EMA20(Length) prePosATRR = ATRR(nATRPeriod,nATRMultip) iff_1 = posEMA20 == -1 and prePosATRR == -1 and StartTrade ? -1 : 0 pos = posEMA20 == 1 and prePosATRR == 1 and StartTrade ? 1 : iff_1 iff_2 = reverse and pos == -1 ? 1 : pos possig = reverse and pos == 1 ? -1 : iff_2 if possig == 1 strategy.entry('Long', strategy.long) if possig == -1 strategy.entry('Short', strategy.short) if possig == 0 strategy.close_all() barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)