Stratégie de suivi des tendances pour les moyennes mobiles

Auteur:ChaoZhang est là., Date: 2024-01-29 16h52:46
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie simple basée sur la moyenne mobile qui fonctionne bien avec différentes paires de pièces. Il trace le prix d'ouverture et le prix de clôture de la moyenne mobile, et décide d'entrer dans une position longue ou de la quitter en fonction du fait que les deux lignes se sont croisées. L'idée est qu'il entre dans une position lorsque le prix de clôture moyen augmente, ce qui peut indiquer une dynamique haussière des prix.

La logique de la stratégie

Cette stratégie sélectionne d'abord le type de moyenne mobile, y compris EMA, SMA, RMA, WMA et VWMA. Ensuite, elle définit la période de rétrospective pour la moyenne mobile, généralement entre 10 et 250 barres. Différentes combinaisons de type de moyenne mobile et de période de rétrospective peuvent produire des résultats très différents pour différentes paires de pièces.

La logique de négociation spécifique est la suivante:

  1. Calculer la moyenne mobile du prix d'ouverture et du prix de clôture;
  2. Comparer les valeurs moyennes mobiles entre prix de clôture et prix d'ouverture;
  3. Entrer dans une position longue si la moyenne mobile du prix de clôture dépasse la moyenne mobile du prix d'ouverture;
  4. Fermer la position longue si la moyenne mobile du prix de clôture dépasse la moyenne mobile du prix d'ouverture.

L'entrée dans la position est considérée comme un signe de mouvement des prix à la hausse, tandis que la sortie est considérée comme un mouvement des prix à la baisse.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. paramètres flexibles pouvant être optimisés pour différentes paires de pièces afin d'obtenir une meilleure spécificité;
  2. Une logique simple, facile à comprendre et à mettre en œuvre;
  3. Des rendements très élevés pouvant être obtenus pour certaines paires de pièces, généralement une bonne stabilité;
  4. Une grande personnalisation dans l'affichage de différents indicateurs.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Pour certaines paires de pièces et certains paramètres, les rendements et la stabilité peuvent être faibles;
  2. Ne peut pas bien réagir aux fluctuations de prix à court terme, mauvaise performance pour les pièces à forte volatilité;
  3. Le choix de la période de rétrospective moyenne mobile n'est pas suffisamment scientifique, un peu subjectif.

Solution et optimisation:

  1. Utiliser des délais plus longs comme 12H, 1D pour réduire les transactions inutiles et améliorer la stabilité;
  2. Ajouter des fonctions d'optimisation des paramètres pour tester automatiquement différentes combinaisons de paramètres pour obtenir les meilleurs paramètres;
  3. Ajouter une sélection adaptative de la période de rétrospective de la moyenne mobile pour permettre au système de décider automatiquement de la période optimale.

Conclusion

En résumé, il s'agit d'une stratégie simple utilisant des indicateurs de moyenne mobile pour déterminer la tendance des prix et les points d'inflexion. Il peut obtenir de très bons résultats en ajustant les paramètres, et est une stratégie de suivi de tendance efficace qui mérite d'être améliorée et appliquée.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

Plus de