Stratégie de cassure de la double moyenne mobile


Date de création: 2023-12-11 15:21:58 Dernière modification: 2023-12-11 15:21:58
Copier: 0 Nombre de clics: 637
1
Suivre
1621
Abonnés

Stratégie de cassure de la double moyenne mobile

Aperçu

La stratégie de rupture de double équilibre est une stratégie de suivi de la tendance basée sur la croisée de moyennes mobiles à deux périodes différentes comme signal d’achat et de vente. La stratégie utilise les moyennes rapides et les moyennes lentes comme point d’entrée de la transaction, après la croisée, pour déterminer la direction de la tendance et établir une position surélevée ou vide correspondante.

Principe de stratégie

La stratégie utilise deux moyennes mobiles: une M.A. rapide et une M.A. lente. Les cycles de M.A. rapide sont généralement définis comme des cycles plus courts (comme les périodes de 15) pour capturer les variations de prix à court terme; les cycles de M.A. lente sont généralement définis comme des cycles plus longs (comme les périodes de 21) pour déterminer la direction des principales tendances. Le signal de négociation de la stratégie provient du croisement de deux M.A.: un signal d’achat lorsque le M.A. rapide traverse la M.A. lente au-dessus d’un M.A. rapide et un signal de vente lorsque le M.A. lente traverse le M.A. rapide en dessous.

La durée pendant laquelle la stratégie capture les tendances peut être ajustée en définissant différents ensembles de cycles MA. Les ensembles de MA plus courts peuvent capturer les occasions de variation de prix sur des périodes plus courtes; les ensembles de MA plus longs peuvent filtrer les oscillations et capturer uniquement les tendances au niveau des lignes plus longues.

La stratégie comprend également des modules de gestion des risques: stop-loss, stop-loss, stop-loss mobile. Cela limite le maximum de pertes pour une seule transaction et aide à protéger les gains globaux.

Avantages stratégiques

Les avantages d’une stratégie à double sens sont les suivants:

  1. Les concepts sont simples, faciles à comprendre et à mettre en œuvre.
  2. Il est possible de capturer des tendances de différentes durées en ajustant le cycle de l’AM pour s’adapter à différents environnements de marché.
  3. La plupart de ces transactions ont été effectuées par des sociétés de courtage.
  4. Le risque est effectivement maîtrisé grâce à l’arrêt des pertes.
  5. Il est facile à optimiser et permet d’ajuster les cycles de MA, les paramètres de gestion des risques, etc. pour améliorer encore l’efficacité.

Analyse des risques

La stratégie de la double ligne d’équilibre comporte également des risques, principalement concentrés sur les aspects suivants:

  1. Les signaux de croisement de MA peuvent être trop fréquents pendant la phase d’équilibrage de l’oscillation, ce qui pose le problème d’une fréquence de négociation trop élevée.
  2. Il y a un retard entre les deux lignes, qui peut manquer le point de basculement et ne pas arrêter la perte à temps.
  3. L’incapacité à filtrer efficacement les fausses incursions, qui peuvent entraîner des pertes inutiles;
  4. La MA elle-même est lente à réagir aux prix et n’arrive pas à suivre complètement les variations de prix.

Ces risques peuvent être améliorés et optimisés par l’ajustement des paramètres MA, l’ajout de conditions de filtrage et l’optimisation de la logique de stop-loss.

Direction d’optimisation

La stratégie de la double ligne d’équilibre peut être optimisée dans les domaines suivants:

  1. Ajouter des filtres tels que le volume de transaction ou les indicateurs de fluctuation pour éviter de construire fréquemment des emplacements pendant les secousses et les fausses percées;
  2. Les cycles et les combinaisons de MA peuvent être diversifiés pour s’adapter aux caractéristiques des différents cycles et variétés;
  3. Il est possible de tester différents types d’AM, tels que les AME, les AML, etc., en choisissant la forme d’AM la plus sensible à la réaction des prix;
  4. L’ajout d’algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres MA et les paramètres hyper, tels que l’amplitude d’arrêt;
  5. Il est possible de tester différentes méthodes de stop, comme le stop de saut, le stop de suivi, le stop moyen, etc.

Grâce à ces optimisations et améliorations, il est possible d’améliorer considérablement le taux de réussite, le taux de rendement et le taux de retour sur risque de la stratégie.

Résumer

La stratégie de rupture en ligne est une stratégie de suivi de tendance qui est facile à mettre en œuvre et à optimiser dans l’ensemble. Elle présente des avantages tels que la simplicité d’utilisation, la flexibilité et la maîtrise des risques, ce qui la rend idéale comme stratégie d’entrée pour les transactions quantitatives.

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

//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)

maFastSource   = input(defval = ohlc4, title = "Fast MA Source")
maFastLength   = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource   = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit   = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
startYear       = input(defval = 2018, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() =>
    inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    timeOk = time > inputTime ? true : false
    r = (useTimeLimit and timeOk) or not useTimeLimit

maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)

fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)

aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

if( startTimeOk() )
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    //strategy.close( id = "Long", when = exitLong )
    
    enterShort = tradeDirection[1] and not tradeDirection
    exitShort = not tradeDirection[1] and tradeDirection
    strategy.entry( id = "Short", long = false, when = enterShort )
    //strategy.close( id = "Short", when = exitShort )
    
    strategy.exit("Exit Long", from_entry = "Long",  profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
    strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)