La Super Trend Dual Moving Average est une stratégie de trading quantitative basée sur l'indicateur Super Trend et la moyenne mobile simple.
La stratégie utilise deux indicateurs:
Super Trend Indicator: Il calcule les rails supérieurs et inférieurs en fonction de l'ATR de volatilité réelle et d'un multiplicateur.
Moyenne mobile simple de 200 jours: Il prend la moyenne arithmétique des prix de clôture au cours des 200 derniers jours. Lorsque le prix de clôture est supérieur à cette ligne, il représente une tendance haussière majeure.
La logique de la stratégie:
Lorsque l'indicateur Super Trend donne un signal haussier (valeur Super Trend supérieure à 0) et que le prix de clôture est supérieur à l'AM de 200 jours, passez long.
Lorsque l'indicateur Super Trend donne un signal baissier (valeur Super Trend inférieure à 0) et que le prix de clôture est inférieur à l'AM de 200 jours, passez à la vente à découvert.
Fermez la position lorsque l'indicateur Super Trend donne un signal inverse par rapport à la position précédente.
Le stop loss est fixé à 25%.
La stratégie combine l'indicateur Super Trend pour déterminer la tendance à court terme et la MA de 200 jours pour déterminer la tendance à long terme, ce qui peut filtrer efficacement les fausses ruptures, réduire la fréquence des transactions tout en améliorant le taux de gain.
Le principal risque de cette stratégie est que la plage de stop loss est relativement grande. Elle peut augmenter le risque de liquidation forcée dans des situations à fort effet de levier. De plus, lorsque le marché est limité à la plage, l'indicateur Super Trend générera des signaux redondants, augmentant ainsi les coûts de transaction et la fréquence de négociation.
Le risque peut être réduit en ajustant de manière appropriée la période d'ATR, les paramètres du multiplicateur et la plage de stop loss.
La stratégie peut être optimisée dans les aspects suivants:
Ajuster la période ATR et les paramètres du multiplicateur pour optimiser l'indicateur Super Trend.
Essayez d'autres indicateurs MA tels que EMA et VIDYA pour les remplacer.
Ajouter d'autres indicateurs auxiliaires tels que le canal BOLL ou l'indicateur KD pour une filtration supplémentaire du signal.
Optimiser la stratégie de stop-loss, par exemple en la déplaçant vers le point d'équilibre ou le stop de trailing avec des niveaux de temps plus élevés.
Dans l'ensemble, cette stratégie est très pratique. Elle prend en compte à la fois le jugement de la tendance à court terme et le jugement de la tendance à long terme avec des paramètres de stop loss raisonnables. Elle peut obtenir de meilleurs résultats grâce à l'ajustement et à l'optimisation des paramètres, ce qui vaut la peine d'être vérifié et appliqué.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef