Stratégie de stop suiveur de la dynamique des prix


Date de création: 2023-11-27 11:45:04 Dernière modification: 2023-11-27 11:45:04
Copier: 0 Nombre de clics: 627
1
Suivre
1617
Abonnés

Stratégie de stop suiveur de la dynamique des prix

Aperçu

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.

Principe de stratégie

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.

Analyse des forces stratégiques

  1. 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.

  2. Il est possible de suivre avec souplesse la distance de stop-loss, de réduire le risque et de bloquer les bénéfices.

  3. 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é.

  4. 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.

  5. Le processus de calcul est simple, efficace, facile à comprendre et à mettre en œuvre.

Analyse stratégique des risques

  1. Les doubles jugements de dynamique peuvent donner lieu à des signaux inverses et nécessitent une combinaison de filtres de tendance.

  2. Le réglage de la distance d’arrêt excessive peut causer des pertes significatives.

  3. Le niveau d’activation est trop élevé et vous risquez de manquer une occasion de stop loss.

  4. 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.

Orientation de l’optimisation de la stratégie

  1. Il s’agit d’un indicateur de la structure du marché qui permet d’identifier les tendances à la hausse et d’éviter les inversions.

  2. 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.

  3. Optimiser les paramètres et tester les performances avec différentes distances d’arrêt et niveaux d’activation.

  4. Prenez en compte le suivi dynamique des arrêts de perte, qui s’ajustent automatiquement en fonction de la volatilité du marché.

  5. Il est possible de régler un arrêt partiel ou un arrêt mobile pour une meilleure maîtrise des risques.

Résumer

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.

Code source 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)