Quantitative Handelsstrategie auf der Grundlage der doppelten EMA und des Preisvolatilitätsindex

Schriftsteller:ChaoZhang, Datum: 18.12.2023
Tags:

img

Übersicht

Diese Strategie wird Moving Average Indicator and Price Volatility Combination Strategy genannt. Sie kombiniert den doppelten exponentiellen gleitenden Durchschnitt (DEMA) und den Preisvolatilitätsindex, um ein umfassendes Handelssignal zu erzeugen.

Grundsätze

Die Strategie besteht aus zwei Teilen:

  1. Dieser Indikator berechnet die 20-Tage- und 2-Tage-exponentiellen gleitenden Durchschnitte. Er erzeugt Handelssignale, wenn der Preis die 2-Tage-Linie von oben oder die 20-Tage-Linie von unten durchbricht.

  2. (Höchster Preis - Niedrigster Preis) / Schließpreis Volatilitätsindex. Dieser Index spiegelt den Kursschwankungsbereich innerhalb einer Periode wider. Hier berechnen wir den 16-tägigen einfachen gleitenden Durchschnitt des Volatilitätsindex über die letzten 20 Bars. Wenn die Volatilität der aktuellen Bar höher oder niedriger als dieser Durchschnittswert ist, generiert er Handelssignale.

Wenn DEMA und der Volatilitätsindex gleichzeitig Signale geben, werden die endgültigen Long- oder Short-Handelsaufträge generiert.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Durch die Kombination mehrerer Indikatoren können falsche Signale reduziert und die Signalzuverlässigkeit verbessert werden.

  2. Die 20-Tage-Linie kann mittelfristige bis langfristige Trends effektiv identifizieren, und die 2-Tage-Linie kann kurzfristige Schwankungen erfassen, wodurch die Kombination an unterschiedliche Marktumgebungen angepasst wird.

  3. Der Volatilitätsindex kann die Marktvolatilität und Handelschancen wirksam widerspiegeln.

  4. Durch die Anpassung der Parameter kann es sich an verschiedene Produkte und Zyklusmärkte anpassen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Bei niedrigen Volatilitätstrends kann der Volatilitätsindex falsche Signale erzeugen.

  2. Bei schnellen Einwegmärkten können doppelte EMAs zurückbleiben, wenn die Parameter angemessen verkürzt oder mit anderen Indikatoren kombiniert werden.

  3. Die zunehmende Komplexität mehrerer Indikatoren erhöht auch das Risiko einer Überoptimierung.

Optimierungsrichtlinien

Die Strategie kann auch in folgenden Aspekten optimiert werden:

  1. Durch das Hinzufügen von Stop-Loss-Mechanismen kann der Pro-Order-Verlust wirksam kontrolliert werden.

  2. Optimierung der Parameter für verschiedene Produkte und Zyklen zur Verbesserung der Anpassungsfähigkeit.

  3. Erhöhung der Liquiditäts- und Volatilitätsindikatoren zur Verbesserung der Signalqualität.

  4. Hinzufügen von Algorithmen für maschinelles Lernen zur Erreichung dynamischer Parameter und Gewichtsanpassung.

Schlussfolgerung

Durch die Kombination von doppelten EMAs und Volatilitätsindizes kann diese Strategie sowohl in Trend- als auch in volatilen Märkten eine gute Handelsleistung erzielen. Es gibt auch bestimmte Risiken, die eine weitere Optimierung und Verbesserung erfordern.


/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/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
//  This histogram displays (high-low)/close
//  Can be applied to any time frame.
//
//
// 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


HLCH(input_barsback,input_percentorprice,input_smalength) =>
    pos = 0.0
    xPrice = (high-low)/close
    xPriceHL = (high-low)
    xPrice1 = input_percentorprice ? xPrice * 100: xPriceHL
    xPrice1SMA = ta.sma(math.abs(xPrice1), input_smalength)
    pos := xPrice1SMA[input_barsback] > math.abs(xPrice1) ? 1 :
    	     xPrice1SMA[input_barsback] < math.abs(xPrice1) ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & (H-L)/C Histogram', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ (H-L)/C Histogram  ═════●'
input_barsback = input(20, title="Look Back", group=I2)
input_percentorprice = input(false, title="% change", group=I2)
input_smalength = input(16, title="SMA Length", 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)
prePosHLCH = HLCH(input_barsback,input_percentorprice,input_smalength)
iff_1 = posEMA20 == -1 and prePosHLCH == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosHLCH == 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