Cette stratégie consiste principalement à combiner les signaux croisés des moyennes mobiles de Hull et des indicateurs WT afin de tirer parti des avantages des indicateurs respectifs et de prendre des décisions plus précises en matière de jugement des tendances et de sélection des moments d’entrée.
La stratégie est principalement composée de signaux croisés de la moyenne mobile de Hull et de l’indicateur WT.
La partie moyenne mobile de Hull, qui permet de juger de la direction de la tendance en calculant les MA de Hull à court et à long terme, et en les remplissant de couleurs. La formule de calcul est:
Hull MA à court terme = WMA*WMA(n/2) - WMA(n), sqrt(n))
Hull MA à long terme = WMA dans le WMA dans le n/3)*3 - WMA(n/2), n/2)
La WMA est une moyenne mobile pondérée. Elle est un signal de hausse ou de baisse lorsqu’elle traverse une ligne à court terme ou à long terme.
La section des WT indique que l’entrée est déterminée par le calcul de la ligne moyenne plurielle de l’indicateur WT et par l’observation de l’intersection de la ligne moyenne. La formule de calcul est la suivante:
TCI = (Close - EMA(Close,n1)) / (k * STD(Close - EMA(Close,n1),n1))
WT1 = EMA(TCI,n2)
WT2 = SMA(WT1,m)
Le TCI est l’indice composite de tendance, qui reflète l’écart entre le prix et l’EMA de la ligne médiane du canal. WT1 est la valeur de l’EMA de TCI, WT2 est la valeur de la SMA de WT1, et m est généralement de 4.
Le jugement de tendance combiné de la Hull MA et le signal croisé de l’indicateur WT peuvent entrer en jeu à condition que la direction de la tendance soit correcte.
Cette stratégie utilise les avantages des indicateurs Hull MA et WT et présente les avantages suivants:
Hull MA modifie la méthode de calcul des moyennes mobiles pour capturer plus rapidement les tendances des changements de prix et filtrer efficacement le bruit du marché pour déterminer les tendances avec précision et fiabilité.
L’indicateur WT utilise les fluctuations de prix dans le canal pour capturer rapidement les points de basculement et émettre des signaux de négociation plus précis.
L’utilisation combinée de ces deux méthodes permet de prendre en compte à la fois le jugement de la tendance et les signaux croisés, tout en contrôlant les risques liés à la force de la tendance.
Les paramètres de lissage Hull MA et les paramètres de l’indicateur WT sont personnalisables et peuvent être adaptés et optimisés en fonction des caractéristiques des différentes variétés et des préférences de négociation.
Les signaux de croisement des indicateurs Hull MA ou WT peuvent être utilisés pour le trading seul ou en combinaison avec le suivi des tendances et la vérification croisée.
Il est possible de définir des stratégies de stop loss et de stop loss pour contrôler efficacement le risque d’une seule transaction.
Les principaux risques de cette stratégie sont les suivants:
Les indicateurs Hull MA et WT ont un certain degré de brouillage sur les prix, ce qui peut entraîner un léger retard, ce qui rend l’heure d’entrée insuffisamment précise.
L’indicateur WT est susceptible de produire des faux signaux comme des baisses de plusieurs têtes et des baisses de tête creuse, ce qui augmente le risque de négociation s’il n’est pas associé à un jugement de tendance.
Une mauvaise configuration des paramètres peut également avoir un impact sur les résultats de la transaction, ce qui nécessite un test et une optimisation constants en fonction des caractéristiques de la variété.
Les stop-losses peuvent être déclenchés fréquemment pendant les fluctuations de tendance, entraînant des pertes pour le trader.
La réponse au risque peut être optimisée et améliorée par:
Ajustez les paramètres Hull MA et WT pour trouver le meilleur équilibre. Vous pouvez également tester d’autres indicateurs en combinaison avec Hull MA.
Augmenter les mécanismes de jugement des tendances pour éviter que l’indicateur WT ne donne de faux signaux lorsqu’il n’y a pas de tendance claire
Utilisez le backtest et les simulations de trading pour déterminer les meilleurs paramètres et définir un stop loss raisonnable.
Si la tendance est incertaine, réduire la taille de la position ou ne pas négocier temporairement.
Cette stratégie peut être optimisée dans les directions suivantes:
Testez différentes combinaisons de moyennes mobiles et d’indicateurs WT pour trouver de meilleurs points d’équilibre.
L’ajout d’autres indicateurs de jugement, tels que les indices de choc, les bandes de Bollinger, etc., améliore la précision de la prise de décision.
Optimiser les paramètres, en recherchant les meilleures combinaisons de paramètres grâce à la rétroanalyse et à la simulation. Des programmes d’optimisation des paramètres peuvent être créés pour rechercher rapidement les paramètres optimaux.
Optimiser les stratégies de stop-loss, telles que l’utilisation de stop-loss mobile, stop-loss oscillant, stop-loss proche et éloigné, etc., pour réduire la probabilité que le stop-loss soit déclenché.
Optimiser les stratégies de gestion des positions, réduire activement la fréquence des transactions et la taille des positions en cas de tendances incertaines, réduire les risques.
L’ajout de technologies avancées telles que l’apprentissage automatique pour une prise de décision plus intelligente et une adaptation des paramètres.
La stratégie intègre les caractéristiques croisées des indicateurs Hull MA Smooth Moving Average et WT, ainsi que les avantages du jugement de la tendance et de la vérification croisée. La négociation peut être effectuée en assurant la bonne direction, ce qui permet de contrôler efficacement le risque. La stabilité et l’efficacité de la stratégie peuvent être encore améliorées par des paramètres optimisés, des stratégies de stop-loss et de gestion de la position.
/*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 ///