Stratégie d'inversion de l'élan

Auteur:ChaoZhang est là., Date: 2023-11-13 10h02 et 25h
Les étiquettes:

img

Résumé

Cette stratégie vise à détecter la variation en pourcentage du prix des actions dans une certaine période de temps et à générer des signaux de trading lorsqu'un seuil est dépassé.

La logique de la stratégie

  1. Le paramètre d'entrée x représente le nombre de périodes de chandelier à vérifier, avec une valeur par défaut de 5 pour les bougies de 5 minutes.

  2. Calculer la variation en pourcentage du prix de clôture actuel par rapport au prix de clôture il y a x périodes, enregistré comme trueChange1 et trueChange2.

  3. Les paramètres d'entrée percentChangePos et percentChangeNeg représentent le changement en pourcentage de seuil, avec des valeurs par défaut de 0,4% et -0,4%.

  4. Lorsque trueChange1 est supérieur à percentChangePos, un signal d'achat est généré.

  5. Ajoutez des couleurs de texte et de fond pour l'état d'achat et de vente.

  6. Définissez les règles d'entrée et de sortie en fonction des signaux.

  7. Configurer les alertes et les dessins.

Les avantages

  1. Utilisez la variation en pourcentage plutôt que la variation absolue des prix, adaptée aux différents stocks.

  2. Définir des seuils de pourcentage positifs et négatifs pour identifier les écarts de Bollinger Bands.

  3. Période de détection réglable pour identifier les changements de tendance dans différents délais.

  4. Des alertes configurables pour capter les signaux importants.

  5. Une logique simple et directe, facile à comprendre et à utiliser.

  6. Capter les revers à court terme sur le marché ouvert.

Les risques

  1. La variation en pourcentage ne détermine pas l'orientation de la tendance et peut générer des signaux trompeurs.

  2. Les paramètres par défaut peuvent ne pas convenir à tous les stocks, un réglage spécifique est nécessaire.

  3. Aucun stop loss en place, incapable de limiter les pertes.

  4. Des signaux fréquents, des coûts de négociation potentiellement élevés.

  5. Incapable de déterminer la structure du marché, sujette à des échecs sur différents marchés.

Les solutions:

  1. Combinez avec des indicateurs de tendance comme la régression linéaire pour déterminer la tendance globale.

  2. Optimiser les paramètres en fonction des caractéristiques des stocks.

  3. Mettre en œuvre un stop loss approprié.

  4. Filtrez les signaux pour éviter une survente.

  5. Évaluez la structure du marché à partir de délais plus longs pour éviter les problèmes commerciaux.

Améliorations

  1. Ajoutez des mécanismes de stop-loss comme le stop-loss de suivi pour limiter les pertes.

  2. Ajoutez des conditions de filtrage comme le volume, les moyennes mobiles pour éviter les coups de fouet.

  3. Optimiser les règles d'entrée et de sortie avec des indicateurs comme le MACD.

  4. Utilisez l'apprentissage automatique pour optimiser les paramètres.

  5. Incorporer une analyse de la structure du marché pour éviter les problèmes.

  6. Paramètres définis dynamiquement en fonction de la volatilité et de la liquidité.

  7. Combinez avec une analyse de la période plus longue pour déterminer la tendance globale.

Résumé

Cette stratégie génère des transactions en comparant le pourcentage de changement de prix aux seuils prédéfinis, ce qui en fait une stratégie d'inversion moyenne à court terme. Les avantages résident dans sa simplicité, sa flexibilité et sa capacité à capturer les mouvements soudains du marché.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// created by Oliver
strategy("Percentage Change strategy w/BG color", overlay=true, scale=scale.none, precision=2)

x = input(5, title = 'x candles difference', minval = 1)
trueChange1 = (close - close[x]) / close[x] * 100
percentChangePos = input(0.4, title="Percent Change")

//if (percentChange > trueChange) then Signal  

plotChar1 = if percentChangePos > trueChange1
    false
else
    true

plotchar(series=plotChar1, char='🥶', color=color.green, location=location.top, size = size.tiny )

trueChange2 = (close - close[x]) / close[x] * 100
percentChangeNeg = input(-0.4, title="Percent Change")

plotChar2 = if percentChangeNeg < trueChange2
    false
else
    true
plotchar(series=plotChar2, char='🥵', color=color.red, location=location.top, size = size.tiny)

//------------------------------------------------------------------------
UpColor() => percentChangePos < trueChange1
DownColor() => percentChangeNeg > trueChange2

//Up = percentChangePos < trueChange1
//Down = percentChangeNeg > trueChange2


col = percentChangePos < trueChange1 ? color.lime : percentChangeNeg > trueChange2 ? color.red : color.white
//--------
condColor = percentChangePos < trueChange1 ? color.new(color.lime,50) : percentChangeNeg > trueChange2 ? color.new(color.red,50) : na
//c_lineColor = condUp ? color.new(color.green, 97) : condDn ? color.new(color.maroon, 97) : na
//barcolor(Up ? color.blue : Down ? color.yellow : color.gray, transp=70)

//Background Highlights
//bgcolor(condColor, transp=70)


//---------

barcolor(UpColor() ? color.lime: DownColor() ? color.red : na)
bgcolor(UpColor() ? color.lime: DownColor() ? color.red : na)

//------------------------------------------------------------------------

buy = percentChangePos < trueChange1
sell = percentChangeNeg > trueChange2


//------------------------------------------------------------------------
/////////////// Alerts /////////////// 
alertcondition(buy, title='buy', message='Buy')
alertcondition(sell, title='sell', message='Sell')

//-------------------------------------------------

if (buy)
    strategy.entry("My Long Entry Id", strategy.long)

if (sell)
    strategy.entry("My Short Entry Id", strategy.short)


/////////////////// Plotting //////////////////////// 
plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)


Plus de