
Cette stratégie utilise des paramètres de dynamique de prix pour fixer des gains et des pertes de suivi bidirectionnel à long et à court terme. La stratégie est combinée à un niveau d’activation qui ne commence à suivre les pertes que lorsque les gains sont atteints.
Calculer la dynamique de 12 cycles du prix, puis calculer la dynamique de 1 cycle de la dynamique. Lorsque la dynamique rapide (la dynamique de 1 cycle de la dynamique des prix) est supérieure à 0 faire plus, inférieure à 0 faire moins.
Réglez la distance de suivi de la perte et le niveau d’activation de la perte de suivi. La distance de suivi de la perte de suivi consiste à ajuster la perte de suivi à la distance indiquée lorsque le prix se dirige vers un nouveau sommet ou un nouveau bas. L’activation de la perte de suivi de suivi signifie que la perte de suivi ne doit pas commencer avant d’avoir atteint un certain taux de profit.
La stratégie consiste à bloquer les bénéfices en suivant les prix les plus élevés ou les plus bas, et à émettre un signal de reprise lorsque le prix dépasse la distance de stop-loss définie.
L’utilisation de la double dynamique permet de déterminer avec précision la direction de la tendance des prix, de réduire le nombre de transactions et d’éviter les coups.
Il est possible de suivre avec souplesse la distance de stop-loss, de réduire le risque et de bloquer les bénéfices.
Il est possible de définir un niveau d’activation de suivi de stop-loss et d’activer le mécanisme de stop-loss uniquement après avoir atteint un certain niveau de profit, afin d’éviter un stop-loss prématuré.
Il est possible de régler simultanément le niveau d’arrêt des têtes multiples et des têtes vides, ce qui permet de contrôler le risque.
Le processus de calcul est simple, efficace, facile à comprendre et à mettre en œuvre.
Les doubles jugements de dynamique peuvent donner lieu à des signaux inverses et nécessitent une combinaison de filtres de tendance.
Le réglage de la distance d’arrêt excessive peut causer des pertes significatives.
Le niveau d’activation est trop élevé et vous risquez de manquer une occasion de stop loss.
Plus de tests et d’optimisations de paramètres sont nécessaires pour trouver le point d’arrêt optimal.
Il est possible de réduire les faux signaux par le jugement des tendances et l’optimisation des paramètres. Les contrats et paramètres de différentes variétés peuvent être testés pour trouver la configuration optimale.
Il s’agit d’un indicateur de la structure du marché qui permet d’identifier les tendances à la hausse et d’éviter les inversions.
L’ajout d’autres conditions de synchronisation, telles que la variation du volume des transactions, la rupture de la contraction, etc., améliore la précision du signal.
Optimiser les paramètres et tester les performances avec différentes distances d’arrêt et niveaux d’activation.
Prenez en compte le suivi dynamique des arrêts de perte, qui s’ajustent automatiquement en fonction de la volatilité du marché.
Il est possible de régler un arrêt partiel ou un arrêt mobile pour une meilleure maîtrise des risques.
La structure globale de la stratégie est claire, les tendances des prix sont jugées à l’aide d’indicateurs de double dynamique, des arrêts de suivi flexibles sont définis pour verrouiller les bénéfices et les risques de transaction peuvent être efficacement contrôlés. La stratégie est facile à comprendre et à mettre en œuvre, et il existe un espace d’optimisation, l’ajout de plus d’indicateurs techniques et de tests de paramètres peut améliorer encore la performance de la stratégie.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trailing Stop Snippet", overlay=true)
length = input(12)
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)
tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na
in_long = strategy.position_size > 0
in_short = strategy.position_size < 0
var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0
if in_long
if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if not tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if in_short
if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
if not tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na
if (mom0 > 0 and mom1 > 0)
strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
strategy.cancel("MomSE")
tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
strategy.close_all()
if not strategy.opentrades
array.clear(ts_)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)