Les ressources ont été chargées... Je charge...

Stratégie d'inversion pivot avec sortie pivot

Auteur:ChaoZhang est là., Date: 2024-04-30 à 15h57
Les étiquettes:

img

Résumé

Cette stratégie utilise des points pivot pour identifier les points d'inversion du marché et prendre des décisions de trading en fonction de ceux-ci. Lorsqu'un Pivot High est formé dans les 4 dernières bougies à gauche, la stratégie entre dans une position longue; lorsqu'un Pivot Low est formé dans les 4 dernières bougies à gauche, la stratégie entre dans une position courte. Le stop loss est défini à une taille de tick (syminfo.mintick) au-dessus ou en dessous du prix d'entrée. Il existe deux conditions de sortie: 1) sortie lorsque le prochain point pivot opposé apparaît; 2) sortie lorsque la perte flottante atteint 30%.

Principes de stratégie

  1. Utilisez les fonctions ta.pivothigh (() et ta.pivotlow (()) pour calculer le Pivot High (swh) et le Pivot Low (swl) dans la plage de 4 bougies à gauche et de 2 bougies à droite.
  2. Lorsqu'il existe un Pivot High (swh_cond), mettre à jour le prix le plus élevé (hprice), et lorsque le haut actuel est supérieur au haut précédent, activer la condition d'entrée longue (le).
  3. Lorsque la condition d'entrée longue (le) est remplie, entrer une position longue à une taille de tick (syminfo.mintick) au-dessus du Pivot High.
  4. De même, lorsqu'un Pivot Low existe (swl_cond), mettre à jour le prix le plus bas (lprice), et lorsque le bas actuel est inférieur au bas précédent, activer la condition d'entrée courte (se).
  5. Lorsque la condition d'entrée courte (se) est remplie, entrez une position courte à une taille de tick (syminfo.mintick) en dessous du bas de pivot.
  6. Dans la fonction exitAtNextPivot(), si vous maintenez une position longue, définissez le stop loss à une taille de tick inférieure au Pivot Low suivant; si vous maintenez une position short, définissez le stop loss à une taille de tick supérieure au Pivot High suivant.
  7. Dans la fonction exitIfProfitLessThirtyPercent(), calculer le pourcentage de profit et de perte pour les positions longues et courtes et fermer la position si la perte est supérieure à 30%.

Les avantages de la stratégie

  1. Les points pivots peuvent bien refléter les niveaux de support et de résistance sur le marché et constituent un indicateur d'analyse technique couramment utilisé avec une certaine reconnaissance du marché.
  2. L'entrée à la rupture des points pivots peut saisir les opportunités d'inversion du marché.
  3. Deux conditions de sortie sont fixées, l'une basée sur le point de pivot opposé suivant pour la sortie technique, et l'autre basée sur le pourcentage de perte pour la sortie de contrôle des risques, ce qui peut contrôler le retrait de la stratégie dans une certaine mesure.

Risques stratégiques

  1. L'indicateur Pivot Point lui-même présente un certain retard et des problèmes de signal fréquents, et peut ne pas bien fonctionner sur un marché fluctuant.
  2. Les paramètres de calcul fixes de 4 bougies et de 2 bougies peuvent ne pas être applicables à toutes les conditions du marché, faute d'une certaine adaptabilité et de souplesse.
  3. Le stop loss est fixé à proximité du prix d'entrée (une taille de tick), qui peut être abandonné lors de fortes fluctuations du marché.
  4. Le réglage de l'arrêt des pertes de 30% peut être trop lâche, avec une grande amplitude de retrait.

Directions d'optimisation de la stratégie

  1. Essayez d'utiliser d'autres types d'indicateurs de points pivots, tels que les points pivots facteurs, les points pivots pondérés, etc., pour améliorer la sensibilité et la rapidité des indicateurs.
  2. Le nombre de bougies gauche et droite peut être utilisé comme paramètres d'entrée, et les valeurs optimales peuvent être trouvées grâce à l'optimisation des paramètres.
  3. La position de stop loss peut être optimisée pour ATR ou pourcentage de stop loss.
  4. La condition d'arrêt des pertes de 30% peut être resserrée pour réduire le retrait de la stratégie.
  5. D'autres conditions de filtrage, telles que le filtrage de tendance et le filtrage de volatilité, peuvent être superposées sur la base de l'éclatement du point pivot afin d'améliorer la qualité du signal.

Résumé

Cette stratégie construit un système de négociation bidirectionnel basé sur l'indicateur de point pivot, capturant les opportunités d'inversion du marché en allant long au Pivot Highs et court au Pivot Lows. La stratégie a une certaine base théorique et une certaine valeur pratique, mais en raison des limitations de l'indicateur de point pivot lui-même, la stratégie peut faire face à certains risques et défis dans le fonctionnement réel.


/*backtest
start: 2023-04-24 00:00:00
end: 2024-04-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pivot Reversal Strategy with Pivot Exit", overlay=true)

leftBars = input(4)
rightBars = input(2)

var float dailyEquity = na

// Reset equity to $10,000 at the beginning of each day
isNewDay = ta.change(time("D")) != 0
if (isNewDay)
    dailyEquity := 10000

// Calculate pivot highs and lows
swh = ta.pivothigh(leftBars, rightBars)
swl = ta.pivotlow(leftBars, rightBars)

// Define long entry condition
swh_cond = not na(swh)
hprice = 0.0
hprice := swh_cond ? swh : hprice[1]
le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

// Enter long position if long entry condition is met
if (le)
    strategy.entry("PivRevLE", strategy.long, comment="EnterLong", stop=hprice + syminfo.mintick)

// Define short entry condition
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Enter short position if short entry condition is met
if (se)
    strategy.entry("PivRevSE", strategy.short, comment="EnterShort", stop=lprice - syminfo.mintick)

// Exit condition: Exit at the next pivot point
exitAtNextPivot() =>
    if strategy.opentrades > 0
        if strategy.position_size > 0
            // Exiting long position at next pivot low
            if not na(swl)
                strategy.exit("ExitLong", "PivRevLE", stop=swl - syminfo.mintick)
        else
            // Exiting short position at next pivot high
            if not na(swh)
                strategy.exit("ExitShort", "PivRevSE", stop=swh + syminfo.mintick)

// Call exitAtNextPivot function
exitAtNextPivot()

// Exit condition: Exit if profit is less than 30%
exitIfProfitLessThanThirtyPercent() =>
    if strategy.opentrades > 0
        if strategy.position_size > 0
            // Calculate profit percentage for long position
            profit_percentage_long = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
            // Exiting long position if profit is less than 30%
            if profit_percentage_long < -30
                strategy.close("PivRevLE")
        else
            // Calculate profit percentage for short position
            profit_percentage_short = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
            // Exiting short position if profit is less than 30%
            if profit_percentage_short < -30
                strategy.close("PivRevSE")

// Call exitIfProfitLessThanThirtyPercent function
exitIfProfitLessThanThirtyPercent()


Plus de