Stratégie de négociation basée sur les moyennes mobiles Hull et WT Cross

Auteur:ChaoZhang est là., Date: 2023-09-26 20h32
Les étiquettes:

Résumé

Cette stratégie combine principalement les signaux croisés Hull Moving Average et WT pour tirer parti des avantages de chaque indicateur pour un jugement plus précis de la tendance et un calendrier d'entrée.

La logique de la stratégie

La stratégie est constituée des signaux croisés Hull Moving Average et WT.

La partie de la moyenne mobile de Hull calcule les MAs à court et à long terme de Hull et remplit la couleur pour déterminer la direction de la tendance.

La valeur de l'équipement doit être supérieure ou égale à la valeur de l'équipement.

Le nombre total d'équipages à bord du navire est déterminé en fonction de l'échantillon de véhicules.

Lorsque la courte MA traverse la longue MA, c'est un signal haussier, sinon un signal baissier.

La partie WT calcule les lignes WT et observe leurs intersections pour déterminer les entrées.

Le taux d'élimination est calculé sur la base de l'indice de l'élimination de l'élimination.

Le taux de change de l'indice de change est le taux de change de l'indice de change.

Le nombre total d'heures de travail est le nombre de jours de travail.

Lorsque TCI est l'indice composite de tendance, reflétant l'écart du prix par rapport à l'EMA; WT1 est l'EMA de TCI, WT2 est l'ASM de WT1, m est généralement 4. Le croisement de WT1 sur WT2 indique un signal haussier, tandis que le croisement de WT1 sous WT2 indique un signal baissier.

En combinant le jugement de tendance de Hull MA et les signaux de croisement WT, nous pouvons entrer sur le marché dans la bonne direction.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Hull MA capte les variations de prix plus rapidement en modifiant le calcul et filtre efficacement le bruit du marché pour un jugement fiable de la tendance.

  2. WT utilise la fluctuation des prix au sein du canal pour capturer rapidement les points tournants et générer des signaux de trading relativement précis.

  3. La combinaison prend en compte à la fois la tendance et le croisement pour un meilleur contrôle des risques lorsque la tendance s'aligne.

  4. Les paramètres Hull MA et WT sont personnalisables pour un ajustement et une optimisation en fonction des caractéristiques des symboles et des préférences de négociation.

  5. Les signaux MA et WT de coque peuvent être utilisés seuls ou ensemble pour la validation de la tendance et de la validation du croisement.

  6. Le stop loss et le take profit peuvent être réglés de manière à contrôler efficacement les risques commerciaux uniques.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. Les prix de Hull MA et de WT s'améliorent dans une certaine mesure, ce qui peut entraîner un retard des signaux d'entrée.

  2. La WT peut générer de faux signaux de divergence haussière/baissière sans tendance claire.

  3. Des paramètres mal réglés peuvent avoir une incidence sur les performances des transactions et nécessiter une optimisation continue.

  4. Le stop loss peut être déclenché fréquemment lors de consolidations de tendance, provoquant une certaine perte.

Les risques peuvent être traités et optimisés comme suit:

  1. Ajustez les paramètres MA et WT de la coque pour trouver l'équilibre optimal.

  2. Ajouter des mécanismes de validation de tendance pour éviter les faux signaux WT sans tendance confirmée.

  3. Optimiser les paramètres par le backtesting et le trading de démonstration, et définir des plages de stop loss raisonnables.

  4. Réduire la taille de la position ou cesser de négocier lorsque la tendance n'est pas claire.

Directions d'optimisation

La stratégie peut être encore optimisée dans les domaines suivants:

  1. Testez différentes moyennes mobiles en combinaison avec WT, afin de trouver un meilleur équilibre, par exemple KAMA, TEMA, etc.

  2. Ajoutez d'autres indicateurs tels que les oscillateurs, les bandes de Bollinger pour améliorer la précision des décisions.

  3. Optimiser les paramètres par le backtesting et le trading de démonstration.

  4. Optimiser les stratégies de stop-loss, par exemple le stop trailing, le stop basé sur la volatilité, le passage de près à loin, etc., afin de réduire les déclenchements indésirables.

  5. Optimiser les stratégies de dimensionnement des positions, réduire la taille et la fréquence des tendances peu claires afin de réduire les risques.

  6. Introduire l'apprentissage automatique et d'autres techniques avancées pour des décisions commerciales plus intelligentes et des paramètres adaptatifs.

Résumé

Cette stratégie combine les forces de l'aplatissement de la MA de Hull et de l'intersection de la WT pour le jugement et la validation de la tendance. Le trading avec une direction confirmée aide à contrôler les risques. Des améliorations supplémentaires peuvent être apportées à l'optimisation des paramètres, aux stratégies de stop loss, au dimensionnement des positions, etc. L'intégration d'autres indicateurs et de techniques intelligentes sont également des directions d'optimisation futures.


/*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 ///


Plus de