
La stratégie de double rupture de tendance utilise un ensemble d’indicateurs techniques, principalement des lignes de tendance, des intersections de lignes moyennes et des ruptures de chaînes de prix, afin d’identifier les changements de tendance du marché et de saisir les opportunités de renversement de tendance. La stratégie, combinant le suivi de la tendance et les signaux de rupture, est relativement stable pour les positions d’entrée et de sortie, mais il existe également un certain risque de fausse rupture.
La stratégie utilise d’abord les hauts de l’axe central et les bas de l’axe central pour diviser les tendances de la pluralité des airs, indiquant une inversion de tendance potentielle lorsque les prix franchissent la ligne de tendance. La pente est calculée en utilisant la méthode ATR, ce qui la rend plus proche de la fluctuation réelle.
Cette stratégie utilise la courte ligne de 5 jours et la longue ligne de 34 jours pour construire une stratégie de croisement de la moyenne lente. La moyenne courte est utilisée comme signal d’achat et la moyenne longue comme signal de vente. La moyenne rapide est utilisée pour capturer les tendances à court terme et la moyenne lente pour suivre les tendances à long terme.
La stratégie a également mis en place un canal de prix de 5 jours, permettant de briser les achats en amont et les ventes en aval, et de capturer les ruptures de prix à court terme. La combinaison de la moyenne rapide et lente détermine la fiabilité de la rupture.
Les signaux de ces trois indicateurs techniques sont utilisés dans cette stratégie pour créer un mécanisme de double jugement robuste et éviter les erreurs de trading.
L’intégration de plusieurs indicateurs techniques a permis de juger que les signaux étaient plus solides et réduisaient les pertes causées par les fausses percées.
Les courbes rapides et les courbes de prix permettent de saisir en temps opportun les changements de tendance des prix à court terme. Les courbes rapides et les courbes de tendance suivent les tendances à long terme et sont plus stables à l’entrée et à la sortie des marchés.
La structure du code est claire, les paramètres de l’indicateur sont ajustables et peuvent être ajustés et optimisés pour différents cycles et variétés.
La combinaison d’un jugement de tendance et d’un signal de rupture permet de tirer profit d’une activité plus agressive dans un marché haussier tendance; la fréquence des signaux de rupture est réduite dans le rangement, ce qui permet d’éviter de fortes secousses.
Il existe un certain risque de fausse rupture, en particulier dans les scénarios de liquidation de la volatilité des prix, susceptible de causer des pertes.
Le croisement de la ligne moyenne est un signal de retard, et si la tendance est fortement inversée, il existe un risque de poursuite de l’achat à la hausse ou de la vente à la baisse.
L’intégration de multiples indicateurs techniques nécessite beaucoup de tests et de calculs lors de l’optimisation des paramètres, ce qui prend du temps.
Le risque de fausse rupture peut être filtré par l’ajout d’indicateurs de volume de transactions, tels que l’augmentation du volume de transactions lors d’une rupture, ou le prix de clôture d’une ligne K qui n’a pas atteint le haut ou le bas précédent.
Il est possible de définir des conditions de filtrage pour les indicateurs de surachat et de survente, par exemple le RSI, afin d’éviter les surachats, ou de définir une ligne de stop-loss pour accélérer les pertes.
Pour les problèmes d’optimisation des paramètres, des méthodes d’apprentissage automatique peuvent être utilisées pour rechercher l’optimisation, en recherchant la combinaison optimale de paramètres dans un grand nombre de données historiques.
L’ajout d’un indicateur de volume de transaction ou d’un indicateur de survente pour juger de la fiabilité de la tendance et de la mise en place de conditions de filtrage strictes pour éviter les pertes dues à une fausse rupture.
Pour les différentes variétés de transactions, ajuster les paramètres de la moyenne et les paramètres de la chaîne de prix pour les rendre plus adaptés aux caractéristiques de la variété.
Augmentation des stratégies de stop loss et maîtrise des pertes individuelles par le biais de stop loss mobile, stop loss fixe et autres.
Utilisez une méthode d’adaptation, réduisez la fréquence d’ouverture des positions lorsque le marché entre dans une phase de rattrapage de la secousse; augmentez la fréquence des transactions lorsque la tendance est évidente.
L’apprentissage en profondeur permet de former des modèles pour déterminer les points de vente et de vente, d’accompagner ou de remplacer les indicateurs techniques traditionnels, et de généraliser la capacité de l’apprentissage en profondeur pour trouver des stratégies de négociation plus efficaces.
Cette stratégie intègre plusieurs indicateurs techniques couramment utilisés pour former un système de double jugement, permettant d’identifier efficacement les changements de tendance et d’afficher une bonne stabilité dans le retesting. Cependant, il convient également de prêter attention à certains risques de faux rebond, optimisés par l’ajout de conditions de filtrage, de stratégies de stop loss, d’ajustement de paramètres et d’utilisation de méthodes d’apprentissage automatique.
/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FinanceUpPvtLtd
//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)
// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')
var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
'Atr' => ta.atr(length_tl) / length_tl * mult_tl
'Stdev' => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl
// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
// uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
// uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
// dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
// dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))
plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)
plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)
alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')
// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")
// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")