Strategie zur Umkehrung des doppelten gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2023-11-03 16:51:18
Tags:

img

Übersicht

Diese Strategie verwendet 2 Indikatoren, um Handelssignale zu generieren: 2/20 Exponential Moving Average und Average True Range Reversal.

Grundsätze

Die Strategie besteht aus zwei Teilen:

  1. 2/20 Exponential Moving Average. Es berechnet die 20-Tage-EMA und erzeugt Signale, wenn der Preis die EMA nach oben oder unten überschreitet.

  2. 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.

Analyse der Vorteile

Die Strategie kombiniert Trends und Umkehrungen, um Umkehrungen zu erfassen.

  1. 2/20 EMA identifiziert mittelfristigen Trend, vermeidet Marktlärm.

  2. Die ATR-Umkehrung erfasst kurzfristige Umkehrungen und Chancen.

  3. Durch die Kombination der Signale wird eine Trendwende im Voraus erfasst und die Rentabilität verbessert.

  4. Ein angemessener ATR-Stoppverlust ermöglicht eine gewisse Risikokontrolle.

  5. Der individuell anpassbare ATR-Multiplikator passt sich an verschiedene Produkte an.

  6. Die Umkehroption passt sich den unterschiedlichen Marktbedingungen an.

Risikoanalyse

Die Risiken sind:

  1. 2/20 EMA ist langsam und kann kurzfristige Chancen verpassen.

  2. Ein breiterer Stoppverlust ist erforderlich.

  3. Ein einziges Signal ist unzuverlässig, wir brauchen mehr Filter.

  4. Vorsicht, wenn du überträgst.

  5. Für die Anpassung des Produkts sind Parameter-Tuning und Backtest erforderlich.

  6. Eine strenge Kapitalverwaltung ist erforderlich, um das Risiko pro Handel zu kontrollieren.

Optimierungsrichtlinien

Die Strategie kann verbessert werden durch:

  1. EMA-Parameter für die beste Kombination.

  2. Optimierung des ATR-Multiplikators für einen besseren Stop-Loss.

  3. Zusätzliche Filterbedingungen wie Volumen und Volatilität.

  4. Hinzufügen eines Kapitalmanagementmodells für die dynamische Positionsgröße.

  5. Hinzufügen anderer Stop-Loss-Strategien wie Chandelier Exit.

  6. Prüfung von Parametern für verschiedene Produkte.

  7. Hinzufügen von maschinellen Lernmodellen für bessere Leistung.

  8. Ich kombiniere mehrere Unterstrategien für mehr Alpha.

Schlussfolgerung

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)

Mehr