Stratégie de suivi des cassures de prix hautes et basses


Date de création: 2023-12-22 12:59:43 Dernière modification: 2023-12-22 12:59:43
Copier: 1 Nombre de clics: 606
1
Suivre
1623
Abonnés

Stratégie de suivi des cassures de prix hautes et basses

Aperçu

Une stratégie de suivi de la tendance qui suit les hauts ou les bas du prix avant de franchir la ligne K. Elle utilise les moyennes mobiles pour déterminer la direction de la tendance, l’entrée au point de rupture, puis un arrêt ou un arrêt de suivi pour verrouiller les bénéfices.

Principe de stratégie

La stratégie est basée sur les critères suivants pour décider d’ouvrir ou de fermer une position:

  1. Pour déterminer si la ligne K est en hausse ou en baisse, on juge la ligne K en rouge ou en vert.
  2. Détermine si la ligne K actuelle dépasse le sommet ou le bas d’une ligne K précédente
  3. Utilisez les moyennes mobiles rapides et les moyennes mobiles lentes pour déterminer la direction de la tendance
  4. Lorsque la ligne K supérieure franchit le sommet de la ligne K inférieure, faites plus; lorsque la ligne K inférieure franchit le bas de la ligne K supérieure, faites moins
  5. Les conditions de plafonnement sont le stop loss ou le suivi du stop loss; il est également possible de configurer un stop loss immédiat en cas d’apparition d’une ligne K inversée.

Cette stratégie est combinée avec un second jugement de la ligne K inversée pour filtrer les fausses percées et assurer la fiabilité du signal de percée.

Analyse des avantages

  • La stratégie est claire et les opérations de percée sont faciles à maîtriser
  • La combinaison de deux moyennes mobiles assure le bon jugement des grandes tendances
  • La traçabilité des arrêts de perte aide à verrouiller plus de bénéfices
  • Le mécanisme de la ligne K inversée aide à éviter les chasses à l’envers

Analyse des risques

  • Un échec à la percée pourrait entraîner des pertes d’opérations en ligne ultra-courte
  • Le risque de fausse percée est plus élevé en cas de secousse.
  • Les moyennes mobiles doubles peuvent être en retard et entraîner des erreurs de jugement

Mesures de contrôle des risques :

  1. Choisissez un indice ou un index majeur pour éviter les risques élevés liés aux actions individuelles
  2. Optimiser les paramètres de la moyenne mobile pour améliorer la précision des jugements
  3. Augmentation appropriée du seuil de stop-loss pour assurer la maîtrise des pertes individuelles

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Test de différentes combinaisons de paramètres de la moyenne mobile
  2. Tests d’ajout d’autres indicateurs pour un jugement combiné
  3. Paramètres d’optimisation des points d’ouverture et de clôture
  4. Augmentation des règles de sélection quantitative et sélection des échantillons de qualité
  5. Optimisation de l’adaptation paramétrique combinée à des algorithmes d’apprentissage automatique

Résumer

La stratégie de rupture des hauts et des bas est une stratégie de suivi de la tendance plus mature dans l’ensemble, qui peut capturer un certain degré de tendance avec le jugement d’assistance des moyennes mobiles. Les mécanismes de stop loss et de suivi de stop loss aident également à bloquer les bénéfices. Par le test et l’optimisation continus, le paramétrage et l’efficacité de la stratégie peuvent être rendus plus excellents.

Code source de la stratégie
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity)

useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy')
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy')

fastMALength = input(5 , 'Fast MA length', group = 'Trend strength')
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength')

slowMALength = input(10, 'Slow MA length', group = 'Trend strength')
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength')

ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength')

useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy')
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength')

longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings')
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings')

fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength)
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength)

FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters')
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters')
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters')
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters')
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters')
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters')
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>time>=start and time<=finish?true:false
afterStartDate = time >= start and time<=finish?true:false
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters')

trailStopMA = ta.ema(close, trailStopMALength)

isGreenCandle = close > open
isRedCandle = close < open
isBrokenHigh = close > open[1]
isPriorCandleRed = close[1] < open[1]
isPriorPriorCandleRed = close[2] < open[2]
isPriorPriorCandleGreen = close[2] > open[2]
isPriorCandleGreen = close[1] > open[1]
isBrokenLow = close < open[1]

isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow

isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false

longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA)
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition

shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA)
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition

if (longOpenCondition)
    strategy.entry("Long Entry", strategy.long)

if (longCloseCondition)
    strategy.close('Long Entry', 'Long Exit')

if (shortOpenCondition)
    strategy.entry("Short Entry", strategy.long)

if (shortCloseCondition)
    strategy.close('Short Entry', 'Short Exit')

if (closeTradesEOD and hour >= 14 and minute >= 30)
    strategy.close_all("EOD")

plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red)
plot(fastMA)
plot(ignoreSlowMA ? na : slowMA, linewidth = 4)