Stratégie de suivi de tendance automatisée basée sur les points pivots et les retracements de Fibonacci


Date de création: 2024-01-05 11:34:17 Dernière modification: 2024-01-05 11:34:17
Copier: 0 Nombre de clics: 687
1
Suivre
1621
Abonnés

Stratégie de suivi de tendance automatisée basée sur les points pivots et les retracements de Fibonacci

Aperçu

La stratégie identifie automatiquement les bandes ABC des cours des actions en fonction des axes pivots et du taux de rétractation de Fibonacci et donne un signal de position longue ou courte. La stratégie utilise les axes pivots pour déterminer les bandes de cours des actions, puis calcule le taux de rétractation de Fibonacci entre les bandes ABC, générant un signal de transaction si certaines conditions sont remplies.

Principe de stratégie

  1. Calcul des hauts et des bas de l’axe des actions
  2. Déterminez si le prix a baissé depuis le sommet de la dernière vague ou s’il a augmenté depuis le bas de la dernière vague.
  3. Calculer le rapport de rétraction de Fibonacci entre la bande passante et la bande passante précédente
  4. Si les bandes de hausse et de baisse sont proportionnellement reculées dans la bonne plage, il est possible de déterminer la formation d’une bande ABC.
  5. Après confirmation de la bande ABC, le stop-loss est réglé sur le point C pour le plus et le stop-loss sur 1,5 fois les fluctuations; le stop-loss est réglé sur le point A pour le plus et le stop-loss sur 1,5 fois les fluctuations

Analyse des avantages

  1. Utilisez les axes pour déterminer les zones de résistance de support critique et améliorer la précision du signal
  2. L’application Fibonacci rétractation reconnaît les formes ABC et capture automatiquement les points de conversion de tendance
  3. Les stop-loss sont clairs et raisonnables pour éviter des pertes énormes

Analyse des risques

  1. Les pivots et les retraits de Fibonacci ne permettent pas de déterminer avec précision chaque fois qu’un changement de tendance se produit.
  2. Les points C et A peuvent être franchis, ce qui entraîne une augmentation des pertes.
  3. Paramètres à optimiser, tels que la portée du taux de rétractation de Fibonacci

Direction d’optimisation

  1. Il est possible de combiner plus d’indicateurs techniques pour aider à déterminer la forme ABC et améliorer la précision du signal.
  2. La portée du taux de rétractation Fibonacci peut être optimisée pour s’adapter à de nouvelles conditions de marché
  3. Modèles qui peuvent être formés pour déterminer l’ABC avec des méthodes d’apprentissage automatique

Résumer

La stratégie est basée sur le pivot pour déterminer les zones de résistance de soutien critique, et l’utilisation du taux de rétractation de Fibonacci pour identifier automatiquement la forme ABC, donner un signal de négociation de positions longues et courtes au point de basculement de la bande. La logique de la stratégie est claire et concise, les paramètres de stop-loss sont raisonnables et permettent de contrôler efficacement les risques.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-19 23:59:59
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © kerok3g

//@version=5
strategy("ABCD Strategy", shorttitle="ABCDS", overlay=true, commission_value=0.04)
calcdev(fprice, lprice, fbars, lbars) =>
    rise = lprice - fprice
    run = lbars - fbars
    avg = rise/run
    ((bar_index - lbars) * avg) + lprice

len = input(5)

ph = ta.pivothigh(len, len)
pl = ta.pivotlow(len, len)

var bool ishigh = false
ishigh := ishigh[1]

var float currph = 0.0
var int currphb = 0
currph := nz(currph)
currphb := nz(currphb)

var float oldph = 0.0
var int oldphb = 0
oldph := nz(oldph)
oldphb := nz(oldphb)

var float currpl = 0.0
var int currplb = 0
currpl := nz(currpl)
currplb := nz(currplb)

var float oldpl = 0.0
var int oldplb = 0
oldpl := nz(oldpl)
oldplb := nz(oldplb)

if (not na(ph))
    ishigh := true
    oldph := currph
    oldphb := currphb
    currph := ph
    currphb := bar_index[len]
else
    if (not na(pl))
        ishigh := false
        oldpl := currpl
        oldplb := currplb
        currpl := pl
        currplb := bar_index[len]

endHighPoint = calcdev(oldph, currph, oldphb, currphb)
endLowPoint = calcdev(oldpl, currpl, oldplb, currplb)

plotshape(ph, style=shape.triangledown, color=color.red, location=location.abovebar, offset=-len)
plotshape(pl, style=shape.triangleup, color=color.green, location=location.belowbar, offset=-len)

// var line lnhigher = na
// var line lnlower = na
// lnhigher := line.new(oldphb, oldph, bar_index, endHighPoint)
// lnlower := line.new(oldplb, oldpl, bar_index, endLowPoint)
// line.delete(lnhigher[1])
// line.delete(lnlower[1])

formlong = oldphb < oldplb and oldpl < currphb and currphb < currplb
longratio1 = (currph - oldpl) / (oldph - oldpl)
longratio2 = (currph - currpl) / (currph - oldpl)

formshort = oldplb < oldphb and oldphb < currplb and currplb < currphb
shortratio1 = (oldph - currpl) / (oldph - oldpl)
shortratio2 = (currph - currpl) / (oldph - currpl)

// prevent multiple entry for one pattern
var int signalid = 0
signalid := nz(signalid[1])

longCond = formlong and 
           longratio1 < 0.7 and 
           longratio1 > 0.5 and 
           longratio2 > 1.1 and 
           longratio2 < 1.35 and 
           close < oldph and 
           close > currpl and 
           signalid != oldplb
if (longCond)
    signalid := oldplb
    longsl = currpl - ta.tr
    longtp = ((close - longsl) * 1.5) + close
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=math.min(longtp, oldph), stop=longsl)

shortCond = formshort and 
             shortratio1 < 0.7 and 
             shortratio1 > 0.5 and 
             shortratio2 > 1.1 and 
             shortratio2 < 1.35 and 
             close > oldpl and 
             close < currph and 
             signalid != oldphb

if (shortCond)
    signalid := oldphb
    shortsl = currph + ta.tr
    shorttp = close - ((shortsl - close) * 1.5)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=math.max(shorttp, oldpl), stop=shortsl)