Strategie mit quantitativen Doppelindikatoren

Schriftsteller:ChaoZhang, Datum: 2023-12-29 16:29:21
Tags:

img

Übersicht

Diese Strategie ist eine Kombinationsstrategie, die auf dem doppelten EMA-Indikator und dem Bull Power-Indikator basiert.

Strategie Logik

Die Strategie besteht aus zwei Teilen:

  1. 2/20 EMA-Indikator. Dieser Indikator berechnet die 2-Tage- und 20-Tage-EMA. Er erzeugt Kaufsignale, wenn der Preis über die EMA geht, und Verkaufssignale, wenn der Preis unter die EMA geht.

  2. Dieser Indikator berechnet die Bullish/Bearish-Kraft basierend auf der Beziehung des aktuellen Bars zum vorherigen Bar. Er erzeugt Handelssignale, wenn die Bull/Bear-Kraft den Schwellenwert überschreitet.

Die beiden Teil-Signale müssen zur gleichen Zeit ausgelöst werden, um Positionen zu eröffnen. Zum Beispiel sind EMA Golden Cross und Bull Power positive offene Long-Positionen, während EMA Dead Cross und Bull Power negative offene Short-Positionen sind.

Analyse der Vorteile

  1. Kombination von Indikatoren, um gefälschte Signale zu filtern. Einziger Indikator ist anfällig für Einfluss von externen Faktoren, die gefälschte Signale erzeugen. Dual-Indikator-Kombination kann sich gegenseitig überprüfen und gefälschte Signale filtern, was die Signalqualität verbessert.
  2. Anpassungsfähige Parameter: Die Perioden der EMA und der Bull Power-Schwelle können an unterschiedliche Marktbedingungen angepasst werden.
  3. Die Strategie verwendet nur zwei gemeinsame Indikatoren mit einer einfachen und klaren Logik, die leicht zu verstehen und umzusetzen ist.

Risikoanalyse

  1. Indikatorfehlerrisiko: Trotz der Verwendung von Kombinationsindikatoren können extreme Marktbedingungen dennoch zu einem Indikatorfehler führen.
  2. Parameteroptimierungsrisiko. Unangemessene Parameter-Einstellungen können zu unzureichendem oder übermäßigem Handel führen, was die Strategieleistung untergräbt. Es sind ausreichende Tests erforderlich, um optimale Parameter zu finden.

Optimierungsrichtlinien

  1. Setzen Sie beweglichen oder Rückblick Stop-Loss, um Einzelhandel Verlust zu kontrollieren.
  2. Test verschiedene Parameterkombinationen, um die optimalen Parameter für eine bessere Leistung zu finden.
  3. Hinzufügen von Filterbedingungen: Hinzufügen von Bedingungen wie Handelsvolumen oder Volatilität, um bei der Eröffnung von Positionen abnormale Marktbedingungen zu filtern.

Schlussfolgerung

Die Strategie realisiert Handelsentscheidungen, indem sie doppelte EMA- und Bull Power-Indikatoren kombiniert. Im Vergleich zu Einzelindikatorstrategien eliminiert die Kombination gefälschte Signale effektiv, während sie anpassbare Parameter behält. Abschließend zeigt diese Strategie Einfachheit, Flexibilität und starke Praktikabilität als quantitative Handelsstrategie.


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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/07/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
//  Bull Power Indicator
//  To get more information please see "Bull And Bear Balance Indicator" 
//  by Vadim Gimelfarb. 
//
// 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


BP(SellLevel) =>
    pos = 0.0
    value = close < open ?  
             close[1] < open ?  math.max(high - close[1], close - low): math.max(high - open, close - low):
              close > open ? 
               close[1] > open ?  high - low : math.max(open - close[1], high - low) : 
                 high - close > close - low ? 
                  close[1] < open ? math.max(high - close[1], close - low) : high - open : 
                   high - close < close - low ? 
                     close[1] > open ?  high - low : math.max(open - close, high - low) : 
                      close[1] > open ? math.max(high - open, close - low) :
                       close[1] < open? math.max(open - close, high - low): high - low
    val2 = ta.sma(value, 15)                   
    pos :=  val2 > SellLevel ? 1 : -1
    pos

strategy(title='Combo 2/20 EMA & Bull Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Bull Power ═════●'
SellLevel = input.float(-15, step=0.01, 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)
prePosBP = BP(SellLevel)
iff_1 = posEMA20 == -1 and prePosBP == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBP == 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