La stratégie de moyenne mobile de tendance oscillante est un système de suivi de tendance qui utilise une moyenne mobile à long terme pour identifier la direction de la tendance combinée à la plage moyenne vraie pour filtrer les faux-bouts et limiter les retraits globaux.
La stratégie est conçue sur la base des principes suivants:
La stratégie présente les avantages suivants:
La stratégie comporte également des risques potentiels:
La stratégie peut être optimisée dans les aspects suivants:
Dans l'ensemble, la Swing Trend Moving Average Strategy est une stratégie de suivi de tendance très simple et pratique. Elle a également un bon contrôle des risques. Bien que la stratégie ne prenne pas en considération de nombreux facteurs, des tests détaillés et une optimisation des paramètres et des méthodes de stop loss sont toujours nécessaires. Cependant, sa logique de trading simple et ses paramètres le rendent largement applicable à différents produits, particulièrement adaptés au trading de crypto-monnaies comme le Bitcoin.
/*backtest start: 2023-01-28 00:00:00 end: 2024-02-03 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/ // © Inkedlau //@version=5 strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1) use_short = input.bool(false, 'Open Short Positions?') exit_type = input.bool(true, 'Exit trade on Moving Average Cross?') src = input.source(close, 'Source') len = input.int(200, 'Trend Length') ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend') atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range') // ----------------------- DESCRIPTION ----------------------- // THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE // TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY. // THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS // THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS // BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE // THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE // ------------------ INDICATORS CALCULATION------------------ my_ma()=> ma = close if ma_type == 'sma' ma := ta.sma(src, len) if ma_type == 'ema' ma := ta.ema(src, len) if ma_type == 'rma' ma := ta.rma(src, len) if ma_type == 'wma' ma := ta.wma(src, len) if ma_type == 'vwma' ma := ta.vwma(src, len) ma trend = my_ma() atr = ta.atr(10) uptrend = trend + atr * atr_multiplier downtrend = trend - atr * atr_multiplier // ---------------- ENTRY AND EXIT CONDITIONS ---------------- open_long = strategy.position_size == 0 and src > uptrend close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend open_short = use_short and strategy.position_size == 0 and src < downtrend close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend strategy.entry('long', strategy.long, when=open_long) strategy.close('long', when=close_long) strategy.entry('short', strategy.short, when=open_short) strategy.close('short', when=close_short) // ------------------ PLOTTING AND COLORING ------------------ tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na ptrend = plot(trend, color=color.blue, linewidth=1) puptrend = plot(uptrend, color=color.green, linewidth=1) pdowntrend = plot(downtrend, color=color.red, linewidth=1) pclose = plot(close, color=na) fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90) fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)