Ein leistungsfähiges System, das Umkehr- und Trendstrategie kombiniert

Schriftsteller:ChaoZhang, Datum: 2023-10-27 16:22:08
Tags:

img

Übersicht

Das Double Dip Reversal Breakout System kombiniert Elemente von Umkehr- und Trendfolgestrategien im quantitativen Handel. Es erzeugt Kaufsignale, indem es aufeinanderfolgende Down-Tage im Vergleich zu vorherigen Schlusskosten erkennt und Verkaufssignale erzeugt, wenn der Preis über die gleitende Durchschnittslinie T3 überschreitet, was profitable Trades ermöglicht und gleichzeitig Risiken verwaltet.

Wie es funktioniert

Das System besteht aus zwei Komponenten:

  1. 123 Die Umkehrung

Es beobachtet die Schlusskursänderungen in den vergangenen N Tagen. Wenn der heutige Schlusskurs höher ist als der gestrige und der gestrige niedriger als der vorherige Tag, signalisiert es zwei aufeinanderfolgende Down-Tage und löst ein Kaufsignal aus. Es verwendet auch den STOCH-Indikator - wenn die heutige STOCH-Schnelllinie niedriger als die langsame Linie ist, bestätigt es die Gültigkeit des Kaufsignals.

  1. Der gleitende T3-Durchschnitt

Die T3-Linie wird anhand von exponentiellen gleitenden Durchschnitten mit einer speziellen Formel berechnet. Durch die Anpassung der Parameter steuert sie die Empfindlichkeit des gleitenden Durchschnitts gegenüber Preisänderungen. Ein Verkaufssignal wird erzeugt, wenn der Preis über die T3-Linie geht.

Das System kombiniert die beiden oben genannten Signale und erzeugt nur dann tatsächliche Handelssignale, wenn das 123 Reversal Buy Signal und das T3 Sell Signal zusammen auftreten.

Analyse der Vorteile

  • Wirksam bei der Umkehrung der Grundfischerei und bei Gegentrend-Rebellen
  • Der gleitende Durchschnitt hilft, Gewinne zu erzielen und Risiken zu managen
  • Der Doppelsignalmechanismus verbessert die Signalwirksamkeit und verringert Falschsignale
  • Kombiniert die Stärken von Trend- und Umkehrstrategien
  • Anpassbare Parameter ermöglichen Flexibilität für verschiedene Marktbedingungen

Risikoanalyse

  • Umkehrsignale können falsch sein, was zu Verlustgeschäften führt
  • Eine unsachgemäße Einstellung der Parameter kann zu einem Überhandel führen und die Kosten erhöhen.
  • Verkaufssignale aus gleitenden Durchschnitten können vorzeitig aus profitablen Trends austreten
  • Risiken wie die Stop-Loss-Jagd bleiben während volatiler Märkte bestehen
  • Die Parameter müssen für verschiedene Instrumente optimiert werden

Um den Risiken entgegenzuwirken, können folgende Maßnahmen ergriffen werden:

  1. Anpassung der Umkehrparameter zur Verbesserung der Signalgültigkeit
  2. Anpassung der gleitenden Durchschnittsparameter zur Verlängerung der Haltedauer
  3. Hinzufügen von Stop-Loss zum Begrenzungsverlust
  4. Optimierung der Parameter für verschiedene Instrumente

Möglichkeiten zur Verbesserung

Die Strategie kann in mehreren Aspekten verbessert werden:

  1. Hinzufügen von Filtern zur Sicherstellung der Signalgültigkeit

    Zusätzliche Indikatoren wie Volumen-Breakouts können als Filter hinzugefügt werden, um falsche Trades zu vermeiden.

  2. Anpassung der Parameter an sich ändernde Märkte

    Es kann auch dynamisches Parameter-Tuning verwendet werden.

  3. Einbeziehung von maschinellem Lernen für die adaptive Optimierung

    Sammeln Sie große historische Datensätze, trainieren Sie ML-Modelle, um optimale Ein-/Ausgangspunkte vorherzusagen, und optimieren Sie die Parameter dynamisch.

  4. Optimierung der Parameter für verschiedene Instrumente

    Die Instrumente haben unterschiedliche Eigenschaften, daher unterscheiden sich auch ihre optimalen Parameter.

Schlussfolgerung

Das Double Dip Reversal Breakout System kombiniert synergistisch Trendverfolgung und Umkehrhandel. Es ermöglicht den Kauf bei Tiefstständen nach Einbrüchen und die Gewinnsicherung von Trends mithilfe eines gleitenden Durchschnitts. Die effektive Kombination von Umkehr- und Trendsignalen nutzt Umkehrchancen, während sie Gewinne erzielt. Trotz einiger Risiken kann die Strategie durch Parameteroptimierung, Hinzufügen von Filtern usw. verbessert werden, um verschiedenen Marktbedingungen gerecht zu werden.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 16/09/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The  
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This indicator plots the moving average described in the January, 1998 issue
// of S&C, p.57, "Smoothing Techniques for More Accurate Signals", by Tim Tillson.
// This indicator plots T3 moving average presented in Figure 4 in the article.
// T3 indicator is a moving average which is calculated according to formula:
//     T3(n) = GD(GD(GD(n))),
// where GD - generalized DEMA (Double EMA) and calculating according to this:
//     GD(n,v) = EMA(n) * (1+v)-EMA(EMA(n)) * v,
// where "v" is volume factor, which determines how hot the moving average’s response
// to linear trends will be. The author advises to use v=0.7.
// When v = 0, GD = EMA, and when v = 1, GD = DEMA. In between, GD is a less aggressive
// version of DEMA. By using a value for v less than1, trader cure the multiple DEMA
// overshoot problem but at the cost of accepting some additional phase delay.
// In filter theory terminology, T3 is a six-pole nonlinear Kalman filter. Kalman
// filters are ones that use the error — in this case, (time series - EMA(n)) — 
// to correct themselves. In the realm of technical analysis, these are called adaptive
// moving averages; they track the time series more aggres-sively when it is making large
// moves. Tim Tillson is a software project manager at Hewlett-Packard, with degrees in
// mathematics and computer science. He has privately traded options and equities for 15 years.  
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


T3A(Length, b) =>
    pos = 0.0
    xPrice = close
    xe1 = ema(xPrice, Length)
    xe2 = ema(xe1, Length)
    xe3 = ema(xe2, Length)
    xe4 = ema(xe3, Length)
    xe5 = ema(xe4, Length)
    xe6 = ema(xe5, Length)
    c1 = -b*b*b
    c2 = 3*b*b+3*b*b*b
    c3 = -6*b*b-3*b-3*b*b*b
    c4 = 1+3*b+b*b*b+3*b*b
    nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
    pos:= iff(nT3Average > close, -1,
           iff(nT3Average < close, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & T3 Averages", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- T3 Averages ----")
LengthT3 = input(5, minval=1)
b = input(0.7, minval=0.01,step=0.01) 
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posT3A = T3A(LengthT3, b)
pos = iff(posReversal123 == 1 and posT3A == 1 , 1,
	   iff(posReversal123 == -1 and posT3A == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
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