Stratégie de trading d'inversion de la moyenne mobile double


Date de création: 2023-10-16 15:50:35 Dernière modification: 2023-10-16 15:50:35
Copier: 1 Nombre de clics: 671
1
Suivre
1617
Abonnés

Stratégie de trading d’inversion de la moyenne mobile double

Aperçu

La stratégie de négociation de l’inversion de la bi-médianité consiste à calculer une moyenne mobile simple pour deux périodes distinctes, à court et à long terme, et à générer un signal de négociation en fonction de la relation entre le prix et la moyenne mobile. Lorsque vous traversez la moyenne à court terme, faites plus; lorsque vous traversez la moyenne à long terme en dessous de la moyenne à court terme, faites moins.

Principe de stratégie

La stratégie utilise des paramètres d’entrée pour définir des moyennes mobiles simples de deux longueurs de cycle différentes. Les courts cycles sont appelés les lignes rapides et les longs cycles sont appelés les lignes lentes. Les lignes rapides répondent aux variations de prix plus rapidement, capturant les tendances à court terme.

Plus précisément, la stratégie calcule deux moyennes via la fonction sma () et attribue le résultat de calcul à xSMA () et à la ligne rapide. La stratégie utilise le prix de clôture pour calculer la moyenne. Lorsque le prix de clôture est au-dessus de xSMA, faites plus; lorsque le prix de clôture est en dessous de xSMA, faites moins. La stratégie définit également une limite de plage de temps de négociation, qui n’émet un signal de négociation que dans la plage de temps indiquée.

Pour chaque transaction, un point d’arrêt-perte est défini, et l’arrêt-perte est immédiatement effectué lorsque le point d’arrêt-perte est atteint. En même temps, la stratégie affiche la relation du prix à la ligne lente sur la ligne K avec la fonction barcolor: la ligne K est verte lorsque vous faites une position plus élevée; la ligne K est rouge lorsque vous faites une position vide; la ligne K est bleue lorsque vous êtes en position nulle.

Analyse des avantages

  • Utilisation d’un système bi-homogène pour suivre efficacement les tendances et éviter d’être induit en erreur par le bruit du marché à court terme
  • L’utilisation d’une combinaison linéaire rapide et lente améliore la qualité des signaux de transaction
  • La mise en place d’un stop loss permet de maîtriser le risque d’une seule transaction.
  • Limiter le temps de transaction pour éviter les fluctuations massives des événements majeurs
  • Marquer les signaux de transaction sur la ligne K pour former une aide visuelle et améliorer l’intuition

Analyse des risques

  • Les systèmes à double ligne sont plus susceptibles de générer de faux signaux et la fréquence des transactions entraîne une pression sur les coûts de transaction.
  • Les paramètres d’alignement doivent être réglés de manière raisonnable, sans quoi il n’y aura pas de bon effet de lissage ou trop de problèmes de temps d’attente
  • Le système linéaire moyen est en retard et risque de manquer un point de basculement
  • Le point d’arrêt fixe peut être trop arbitraire et ne peut pas être ajusté dynamiquement
  • La période de négociation limitée peut laisser passer des opportunités de négociation pour d’autres périodes

Il est possible de réduire le risque en ajustant les paramètres de la moyenne, en optimisant les stratégies de stop-loss, en supprimant les contraintes de temps ou en définissant des périodes de négociation plus raisonnables. Il est également possible d’envisager la combinaison d’autres indicateurs comme conditions de filtrage pour éviter trop de faux signaux.

Direction d’optimisation

  • On peut tester des combinaisons de différentes périodes homogènes pour trouver le paramètre optimal.
  • On peut envisager de remplacer le stop loss par un suivi dynamique, par exemple avec un ATR
  • D’autres indicateurs peuvent être introduits comme MACD, KD, etc. comme signaux de filtrage
  • L’optimisation de la période de négociation permet de saisir plus d’opportunités de négociation
  • Il est possible d’associer des stratégies de percée à la recherche de signaux de percée près de la ligne d’équilibre.
  • Un mécanisme de sortie dynamique peut être mis en place pour arrêter activement les pertes lorsque les prix entrent dans la fourchette

Résumer

L’optimisation des paramètres, l’introduction d’indicateurs auxiliaires, etc., peuvent être améliorées pour rendre la stratégie plus stable et fiable. Si elle est utilisée, la stratégie peut générer des marges de profit stables et doit être entièrement testée et optimisée.

Code source de la stratégie
/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0

strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
    strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
    strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0) 
    strategy.close_all()

if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)