Handelsstrategie auf der Grundlage von Hull Moving Average und WT Cross

Schriftsteller:ChaoZhang, Datum: 2023-09-26 20:00:32
Tags:

Übersicht

Diese Strategie kombiniert hauptsächlich die Kreuzsignale Hull Moving Average und WT, um die Vorteile jedes Indikators für eine genauere Beurteilung des Trends und den Zeitpunkt des Eintritts zu nutzen.

Strategie Logik

Die Strategie besteht aus den Kreuzsignalen Hull Moving Average und WT.

Der Teil Hull Moving Average berechnet kurz- und langfristige Hull MAs und füllt Farbe aus, um die Trendrichtung zu bestimmen.

Kurzer Rumpf MA = WMA(2*WMA(n/2) - WMA(n), sqrt(n))

Die in Anhang I der Verordnung (EG) Nr. 2111/2005 vorgesehenen Maßnahmen werden in Anhang I der Verordnung (EG) Nr. 2111/2005 festgelegt.

Wenn der kurze MA den langen MA überschreitet, ist dies ein bullisches Signal, andernfalls ein bärisches Signal.

Der WT-Teil berechnet die WT-Linien und beobachtet ihre Kreuzungen, um Einträge zu ermitteln.

TCI = (Schließen - EMA(Schließen,n1)) / (k * STD(Schließen - EMA(Schließen,n1),n1))

WT1 = EMA ((TCI,n2)

WT2 = SMA(WT1,m)

Wo TCI der Trend Composite Index ist, der die Abweichung des Preises von der EMA widerspiegelt; WT1 ist die EMA von TCI, WT2 ist der SMA von WT1, m ist in der Regel 4. Das Kreuzung von WT1 über WT2 zeigt ein bullisches Signal an, während das Kreuzung von WT1 unter WT2 ein bärisches Signal anzeigt.

Durch die Kombination der Hull MA-Trendbeurteilung und der WT-Kreuzungssignale können wir den Markt in die richtige Richtung betreten.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Hull MA erfasst Preisänderungen schneller, indem sie die Berechnung anpasst, und filtert Marktlärm effektiv aus, um zuverlässige Trendbeurteilung zu erzielen.

  2. WT nutzt die Kursschwankungen innerhalb des Kanals, um Wendepunkte schnell zu erfassen und relativ genaue Handelssignale zu erzeugen.

  3. Die Kombination berücksichtigt sowohl den Trend als auch die Kreuzung, um die Risiken besser zu kontrollieren, wenn sich der Trend ausrichtet.

  4. Die Hull-MA- und WT-Parameter können anhand der Symbolmerkmale und der Handelspräferenzen angepasst und optimiert werden.

  5. Hull-MA- und WT-Signale können einzeln oder zusammen sowohl für die Trendverfolgung als auch für die Kreuzungsvalidierung verwendet werden.

  6. Stop-Loss und Take-Profit können so eingestellt werden, dass die Risiken im Einzelhandel wirksam kontrolliert werden.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Sowohl Hull MA als auch WT ebnen die Preise bis zu einem gewissen Grad aus, was zu verzögerten Einstiegssignalen führen kann.

  2. WT kann ohne einen klaren Trend falsche Aufwärts-/Bären-Divergenzsignale erzeugen.

  3. Unangemessene Parameter-Einstellungen können sich auf die Handelsleistung auswirken und eine kontinuierliche Optimierung erfordern.

  4. Bei Trendkonsolidierungen kann häufig ein Stop-Loss ausgelöst werden, wodurch ein gewisser Verlust entsteht.

Die Risiken können wie folgt angegangen und optimiert werden:

  1. Anpassen der Hull-MA und WT-Parameter, um das optimale Gleichgewicht zu finden.

  2. Hinzufügen von Trendvalidierungsmechanismen, um falsche WT-Signale ohne bestätigten Trend zu vermeiden.

  3. Optimierung der Parameter durch Backtesting und Demo-Handel und Festlegung angemessener Stop-Loss-Bereiche.

  4. Verringern Sie die Positionsgröße oder stoppen Sie den Handel, wenn der Trend unklar ist.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten weiter optimiert werden:

  1. Versuche verschiedene gleitende Durchschnitte in Kombination mit WT, um ein besseres Gleichgewicht zu finden, z. B. KAMA, TEMA usw.

  2. Hinzu kommen weitere Indikatoren wie Oszillatoren, Bollinger Bands, um die Entscheidungsgenauigkeit zu verbessern.

  3. Optimieren von Parametern durch Backtesting und Demo-Trading.

  4. Optimieren Sie Stop-Loss-Strategien, z. B. Trailing-Stop, Volatilitätsbasierter Stop, Bewegung von nah nach fern usw., um unerwünschte Auslösungen zu reduzieren.

  5. Optimierung von Positionsgrößenstrategien, Verringerung von Größen und Häufigkeit unklarer Trends zur Verringerung von Risiken.

  6. Einführung von maschinellem Lernen und weiteren fortschrittlichen Techniken für intelligentere Handelsentscheidungen und adaptive Parameter.

Zusammenfassung

Diese Strategie kombiniert die Stärken von Hull MA-Gleichung und WT-Kreuzung sowohl für Trendbeurteilung als auch für Validierung. Der Handel mit bestätigter Richtung hilft Risiken zu kontrollieren. Weitere Verbesserungen können bei Parameteroptimierung, Stop-Loss-Strategien, Positionsgrößen usw. vorgenommen werden. Die Integration anderer Indikatoren und intelligenter Techniken sind auch zukünftige Optimierungsrichtungen. Insgesamt ist dies ein praktischer Trend nach Strategie mit Einfachheit, Zuverlässigkeit und Leichtigkeit der Optimierung.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// WT CROSS @author [© LazyBear]
// © pigsq
// @version=5

strategy("Kahlman HullMA / WT Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100)

_1 = input(false, '───────── SP/TP SETTINGS ─────────')

stoploss1 = input(title='Stop Loss On/Off?', defval=true)
stoploss = input.float(5, "Stop Loss", minval = 1, step = 1)/100
takeprofit1 = input(title='Take Profit On/Off?', defval=true)
takeprofit = input.float(10, "Take Profit", minval = 1, step = 1)/100

_2 = input(false, '──────── WT CROSS SETTINGS ────────')

wtcross = input(title='WT Cross On/Off?', defval=true)
wtcross2 = input(title='Change WT Cross Method ( If WT Cross ON )', defval=false)

/// WT CROSS ///

n1 = input(10, 'Channel Length')
n2 = input(21, 'Average Length')

ap = hlc3
esa = ta.ema(ap, n1)
r = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * r)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

/// WT CROSS ///

/// HULL TREND WITH KAHLMAN ///

_3 = input(false, '──────── HULLMA SETTINGS ────────')

srchull = input(hl2, 'Source')
lengthhull = input(24, 'Lookback')
gain = input(10000, 'Gain')
kh = input(true, 'Use Kahlman')

hma(_srchull, _lengthhull) =>
    ta.wma((2 * ta.wma(_srchull, _lengthhull / 2)) - ta.wma(_srchull, _lengthhull), math.round(math.sqrt(_lengthhull)))

hma3(_srchull, _lengthhull) =>
    p = lengthhull / 2
    ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1], x) + dk * math.sqrt(g / 10000 * 2)
    velo = 0.0
    velo := nz(velo[1], 0) + g / 10000 * dk
    kf := smooth + velo
    kf

a = kh ? kahlman(hma(srchull, lengthhull), gain) : hma(srchull, lengthhull)
b = kh ? kahlman(hma3(srchull, lengthhull), gain) : hma3(srchull, lengthhull)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1hma = plot(a, color=c, linewidth=1, title='Long Plot', transp=75)
p2hma = plot(b, color=c, linewidth=1, title='Short Plot', transp=75)
fill(p1hma, p2hma, color=c, title='Fill', transp=55)

/// HULL TREND WITH KAHLMAN ///

/// DATE ///

_4 = input(false, '───────── DATE SETTINGS ─────────')

FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=999, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false

/// DATE ///

/// LONG/SHORT CONDITION ///

longCondition = crossup and ta.crossover(wt1,wt2)
longCondition1 = crossup
longCondition2 = crossup and wt1 > wt2

if (wtcross == true ? longCondition : wtcross == false ? longCondition1:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
else if (wtcross2 == true ? longCondition2 : wtcross2 == false ? longCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
    
shortCondition = crossdn and ta.crossunder(wt1,wt2)
shortCondition1 = crossdn
shortCondition2 = crossdn and wt1 < wt2

if (wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na)
    strategy.entry("SHORT", strategy.short, when=window(), comment="Enter Short")
else if (wtcross2 == true ? shortCondition2 : wtcross2 == false ? shortCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Short")

/// LONG/SHORT CONDITION ///

/// CLOSE STRATEGY ///

strategy.close("LONG", when=wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na, comment = "Close Long")
strategy.close("SHORT", when=wtcross == true ? longCondition : wtcross == false ? longCondition1:na, comment = "Close Short")

/// EXIT STRATEGY ///

strategy.exit("LONG", when=strategy.position_size > 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 - stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 + takeprofit):na, comment="Exit Long")
strategy.exit("SHORT", when=strategy.position_size < 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 + stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 - takeprofit):na, comment ="Exit Short")

/// LONG SL/TP LINE ///

plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 - stoploss) : na, title='Long Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeprofit) : na, title='Long Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// LONG SL/TP LINE ///

/// SHORT SL/TP LINE ///

plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 + stoploss) : na, title='Short Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeprofit) : na, title='Short Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// SHORT SL/TP LINE ///


Mehr