Stratégie de trading avec indicateur de moyenne mobile


Date de création: 2023-12-06 17:10:00 Dernière modification: 2023-12-06 17:10:00
Copier: 0 Nombre de clics: 605
1
Suivre
1619
Abonnés

Stratégie de trading avec indicateur de moyenne mobile

Aperçu de la stratégie

Cette stratégie consiste à générer des signaux de négociation à partir de plusieurs indicateurs de moyennes mobiles. La stratégie se concentre sur les moyennes mobiles à court, moyen et long terme pour déterminer la direction de la tendance et générer des signaux de négociation en fonction de leur intersection.

Nom de la stratégie

Stratégie de croisement de la moyenne mobile multiple

Principe de stratégie

La stratégie utilise simultanément des moyennes mobiles de 3 périodes différentes, comprenant les lignes de 7 jours, 13 jours et 21 jours. Sa logique de négociation est basée sur les points suivants:

  1. Un signal de multiplication est généré lorsque la ligne 7 à court terme traverse la ligne 13 à moyen terme et que la ligne 21 à long terme est en tendance haussière;
  2. Un signal de couverture est généré lorsque la ligne à court terme de 7 jours passe sous la ligne à moyen terme de 13 jours et que la ligne à long terme de 21 jours est en baisse.

En combinant les moyennes mobiles de différentes périodes, on peut mieux juger de la tendance du marché et éviter les erreurs de trading.

Avantages stratégiques

  1. L’utilisation d’un ensemble de moyennes mobiles permet de juger plus précisément des mouvements du marché et d’éviter d’être induit en erreur par les fausses percées ou les fluctuations à court terme du marché.
  2. Les signaux ne sont générés que lorsque la tendance est claire, ce qui permet de réduire le nombre de transactions inutiles et donc de réduire les coûts de transaction.
  3. La configuration des paramètres est flexible et permet d’ajuster la périodicité des moyennes mobiles en fonction des préférences personnelles, en fonction des variétés et des conditions du marché.

Risque stratégique

  1. Dans un marché en phase de choc, les signaux erronés peuvent être fréquents.
  2. Les moyennes mobiles sont utilisées comme indicateur de tendance et ne permettent pas de déterminer avec précision le point de basculement.
  3. Les moyennes mobiles croisées retardent la reconnaissance des tendances et risquent de manquer une partie des bénéfices.
  4. Le risque peut être réduit en introduisant des signaux de validation d’autres indicateurs techniques et en optimisant les paramètres de la moyenne mobile.

Orientation de l’optimisation de la stratégie

  1. Considérez l’introduction d’indicateurs de volatilité pour évaluer l’intensité de la tendance et évitez de négocier dans un marché en crise.
  2. Essayez d’utiliser des techniques quantitatives telles que l’apprentissage automatique pour optimiser automatiquement les paramètres des moyennes mobiles.
  3. Augmenter les stratégies de coupe-perte et les arrêter en temps opportun lorsque les pertes augmentent.
  4. Envisagez de réduire les points de glissement en utilisant des quotes-parts lors de la croisée des moyennes mobiles.

Résumer

Cette stratégie, combinant des moyennes mobiles sur trois périodes de temps courtes et longues, en fonction de leur relation croisée avec les tendances du marché, est une stratégie de suivi de tendance relativement stable et efficace. L’optimisation des paramètres de l’indicateur, du mécanisme de stop-loss et du mode de commande permet d’améliorer encore la victoire et la rentabilité de la stratégie.

Code source de la stratégie
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © Crypto-Oli

//@version=4
strategy("CryptOli 3 MAs long/short Backtest", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=true)

// this is an educational Script - basicly its very simple - you can see how minimal changes impact results, thats why i posted it
// Credits to Quantnomad to publish tons of free educational script
// this Script is based on https://www.tradingview.com/script/0NgUadGr-Ultimate-MA-Cross-Indicator/ Quantnomads Ultimate MA Indicator 
// HA - Option for calcucaltion based on HA-Candles (very famous recently)
// Source Input - Option (Candletype for calculation, close, ohlc4 ect.) --- there are huge differences --- try it by your own

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2015, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2030, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate

////////////////////////////////////////////////////////////////////////////////

h = input(false, title = "Signals from Heikin Ashi Candles")

ma_type      = input(title = "MA Type",         type = input.string,  defval = "SMMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
src = input(ohlc4)

short_ma_len = input(title = "Short MA Length", type = input.integer, defval = 7,     minval = 1)
short_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
middle_ma_len  = input(title = "Middle MA Length",  type = input.integer, defval = 13,    minval = 2)
middle_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
long_ma_len  = input(title = "Long MA Length",  type = input.integer, defval = 21,    minval = 2)
long_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close


tick_round(x) => 
    round(x / syminfo.mintick) * syminfo.mintick

// Set initial values to 0
short_ma = 0.0
middle_ma = 0.0
long_ma  = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma := sma(short_ma_src, short_ma_len)
    middle_ma := sma(middle_ma_src, middle_ma_len)
    long_ma  := sma(long_ma_src,  long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma := ema(short_ma_src, short_ma_len)
    middle_ma := ema(middle_ma_src, middle_ma_len)
    long_ma  := ema(long_ma_src,  long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma := wma(short_ma_src, short_ma_len)
    middle_ma := wma(middle_ma_src, middle_ma_len)
    long_ma  := wma(long_ma_src,  long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma := wma(2*wma(short_ma_src, short_ma_len/2)-wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
    middle_ma := wma(2*wma(middle_ma_src, middle_ma_len/2)-wma(middle_ma_src, middle_ma_len), round(sqrt(middle_ma_len)))
    long_ma  := wma(2*wma(long_ma_src,  long_ma_len /2)-wma(long_ma_src,  long_ma_len),  round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma := vwma(short_ma_src, short_ma_len)
    middle_ma := vwma(middle_ma_src, middle_ma_len)
    long_ma  := vwma(long_ma_src,  long_ma_len)


// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
    middle_ma := na(middle_ma[1]) ? sma(middle_ma_src, middle_ma_len) : (middle_ma[1] * (middle_ma_len - 1) + middle_ma_src) / middle_ma_len
    long_ma  := na(long_ma[1])  ? sma(long_ma_src,  long_ma_len)  : (long_ma[1]  * (long_ma_len  - 1) + long_ma_src)  / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short = ema(short_ma_src, short_ma_len)
    e1_middle = ema(middle_ma_src, middle_ma_len)
    e1_long  = ema(long_ma_src,  long_ma_len)
    
    short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
    middle_ma := 2 * e1_middle - ema(e1_middle, middle_ma_len)
    long_ma  := 2 * e1_long  - ema(e1_long,  long_ma_len)

// Plot MAs
plot(short_ma, color = color.green,   linewidth = 1)
plot(middle_ma, color = color.yellow,   linewidth = 1)
plot(long_ma,  color = color.red, linewidth = 1)

if close>long_ma and short_ma>middle_ma and time_cond
    strategy.entry("Long", strategy.long)


if close<long_ma and short_ma<middle_ma and time_cond
    strategy.entry("Short", strategy.short)