
Il s’agit d’une stratégie de trading quantitatif combinant la théorie de la fraction de Bill Williams et l’indicateur ZZ. Cette stratégie permet de juger de la tendance du marché en calculant la fraction de Williams et de tracer des lignes de résistance de soutien en combinaison avec l’indicateur ZZ pour découvrir des points de rupture potentiels, permettant ainsi de suivre la tendance des transactions.
La stratégie commence par calculer la fraction de Williams pour déterminer si le moment est en hausse ou en baisse. Si c’est une fraction de hausse, elle est considérée comme étant en hausse; si c’est une fraction de baisse, elle est considérée comme étant en baisse.
Ensuite, tracez les lignes de support et de résistance de l’indicateur ZZ en fonction du point de rupture. Si le prix franchit la ligne de résistance correspondant à la rupture de la rupture de la rupture de la rupture, faites plus; Si le prix franchit la ligne de soutien correspondant à la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture de la rupture.
Grâce à cette combinaison, il est possible de suivre la tendance et de la capturer en temps opportun lorsque la tendance change.
Cette stratégie combine l’utilisation de deux méthodes d’analyse technique différentes, la fraction de Williams et l’indicateur ZZ, pour découvrir plus d’opportunités de trading.
Il permet de juger en temps opportun les changements de tendance du marché et de définir de bonnes conditions de stop-loss, ce qui aide à saisir la direction des principales tendances. En outre, l’indicateur ZZ peut filtrer certaines fausses percées et éviter des pertes inutiles.
Dans l’ensemble, cette stratégie prend en compte à la fois le jugement des tendances et le choix des points d’entrée spécifiques, en équilibrant les risques et les bénéfices.
Le plus grand risque de cette stratégie réside dans le fait que le jugement de déformation et l’indicateur ZZ peuvent émettre de faux signaux de négociation, entraînant des pertes inutiles. Par exemple, après la rupture de la ligne de résistance, le prix peut rapidement revenir en arrière et ne pas continuer à monter.
De plus, le calcul de la fraction peut être erroné en raison d’un mauvais réglage de la période de temps. Si la période de temps est trop courte, la probabilité de fausse rupture augmente.
Pour réduire ces risques, il est possible d’ajuster de manière appropriée les paramètres de calcul de la déformation, ou de réduire les signaux erronés en ajoutant des conditions de filtrage. De plus, il est possible de définir une plus grande marge d’arrêt pour contrôler les pertes individuelles.
Cette stratégie peut être optimisée par les éléments suivants:
L’ajout de filtres sur les indicateurs de dynamique, tels que le MACD ou les indicateurs de la bande de Bryn, peut éviter certaines fausses percées.
Optimiser les paramètres de fractionnement, ajuster le calcul des hauts et des bas, réduire les cycles de temps pour obtenir des jugements de tendance plus précis.
Augmenter l’exactitude des algorithmes d’apprentissage automatique pour déterminer les tendances, en utilisant le jugement de l’IA pour éviter les limites imposées par l’homme.
L’ajout d’un mécanisme d’adaptation aux arrêts de perte permettant d’ajuster le seuil de perte en fonction de la volatilité du marché.
L’utilisation d’algorithmes d’apprentissage en profondeur pour optimiser les paramètres globaux.
Cette stratégie, grâce à une combinaison ingénieuse de la théorie des fractions de Williams et de l’indicateur ZZ, permet de juger et de capturer en temps opportun les changements de tendance du marché. Elle maintient un taux de victoire élevé et est susceptible d’obtenir des gains supplémentaires stables à long terme.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title = "robotrading ZZ-8 fractals", shorttitle = "ZZ-8", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = true, title = "Short")
filterBW = input(false, title="filter Bill Williams Fractals")
showll = input(true, title = "Show levels")
showff = input(true, title = "Show fractals (repaint!)")
showdd = input(true, title = "Show dots (repaint!)")
showbg = input(false, title = "Show background")
showlb = input(false, title = "Show drawdown")
startTime = input(defval = timestamp("01 Jan 2000 00:00 +0000"), title = "Start Time", type = input.time, inline = "time1")
finalTime = input(defval = timestamp("31 Dec 2099 23:59 +0000"), title = "Final Time", type = input.time, inline = "time1")
//Variables
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true
//Fractals
isRegularFractal(mode) =>
ret = mode == 1 ? high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and high[1] > high[0] : mode == -1 ? low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0] : false
isBWFractal(mode) =>
ret = mode == 1 ? high[4] < high[2] and high[3] <= high[2] and high[2] >= high[1] and high[2] > high[0] : mode == -1 ? low[4] > low[2] and low[3] >= low[2] and low[2] <= low[1] and low[2] < low[0] : false
filteredtopf = filterBW ? isRegularFractal(1) : isBWFractal(1)
filteredbotf = filterBW ? isRegularFractal(-1) : isBWFractal(-1)
//Triangles
plotshape(filteredtopf and showff, title='Filtered Top Fractals', style=shape.triangledown, location=location.abovebar, color= color.red, offset=-2)
plotshape(filteredbotf and showff, title='Filtered Bottom Fractals', style=shape.triangleup, location=location.belowbar, color= color.lime, offset=-2)
//Levels
hh = 0.0
ll = 0.0
hh := filteredtopf ? high[2] : hh[1]
ll := filteredbotf ? low[2] : ll[1]
//Trend
trend = 0
trend := high >= hh[1] ? 1 : low <= ll[1] ? -1 : trend[1]
//Lines
hcol = showll and hh == hh[1] and close < hh ? color.lime : na
lcol = showll and ll == ll[1] and close > ll ? color.red : na
plot(hh, color = hcol)
plot(ll, color = lcol)
//Dots
// var line hline = na
// if hh != hh[1] and showdd
// hline := line.new(bar_index - 0, hh[0], bar_index - 2, hh[0], xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.lime, width = 1)
// var line lline = na
// if ll != ll[1] and showdd
// lline := line.new(bar_index - 0, ll[0] - syminfo.mintick, bar_index - 2, ll[0] - syminfo.mintick, xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.red, width = 1)
//Background
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)
//Orders
if hh > 0 and needlong
strategy.entry("Long", strategy.long, na, stop = hh, when = needlong and truetime)
strategy.exit("Exit Long", "Long", stop = ll, when = needshort == false)
if ll > 0 and startTime
strategy.entry("Short", strategy.short, na, stop = ll, when = needshort and truetime)
strategy.exit("Exit Short", "Short", stop = hh, when = needlong == false)
if time > finalTime
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")
if showlb
//Drawdown
max = 0.0
max := max(strategy.equity, nz(max[1]))
dd = (strategy.equity / max - 1) * 100
min = 100.0
min := min(dd, nz(min[1]))
//Max loss size
equity := strategy.position_size != strategy.position_size[1] ? strategy.equity : equity[1]
loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
maxloss := min(nz(maxloss[1]), loss)
//Label
min := round(min * 100) / 100
maxloss := round(maxloss * 100) / 100
labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
var label la = na
label.delete(la)
tc = min > -100 ? color.white : color.red
osx = timenow + round(change(time)*50)
osy = highest(100)
la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)