La stratégie Triple SMA est une stratégie de suivi de tendance basée sur trois moyennes mobiles simples (MMA) de différentes périodes pour l'identification des tendances et les entrées.
La stratégie utilise trois SMA de différentes périodes comme indicateur principal de tendance, y compris les SMA de 200-, 400- et 600-périodes.
Pour les entrées, la stratégie combine l'utilisation du prix de clôture et de l'oscillateur StochClose. Les signaux ne sont générés que lorsque le prix s'aligne sur la direction du triple SMAs
Le stop loss est réglé sur le franchissement des prix en dessous de la SMA la plus lente.
La stratégie permet une pyramide jusqu'à 10 fois. Trois niveaux de profit sont intégrés à 1%, 2% et 6% de bénéfices.
Le plus grand avantage de la stratégie Triple SMA est qu'en combinant trois SMA de périodes différentes, il peut mieux identifier la direction et la force de la tendance.
En outre, l'intégration de StochClose pour l'analyse des surachats/survente évite de prendre des signaux autour de points de renversement potentiels de tendance.
Le stop loss basé sur la SMA la plus lente maximise également la capacité de la stratégie à suivre les tendances tout en minimisant les arrêts prématurés.
L'autorisation de la pyramide permet à la stratégie de participer continuellement aux tendances.
Le principal risque de cette stratégie est que les triple SMA ne peuvent pas filtrer complètement tous les faux signaux. Si le prix ne parvient pas à former une tendance après avoir franchi les SMA et recule rapidement, des pertes peuvent se produire. Cela se produit souvent autour des principaux niveaux de support / résistance.
En outre, StochClose lui-même peut générer des signaux incorrects, ce qui conduit à des entrées inappropriées, en particulier sur les marchés de gamme.
Pour atténuer ces risques, des paramètres tels que les périodes SMA peuvent être ajustés.
La stratégie peut être optimisée dans les aspects suivants:
Ajouter/ajuster les périodes SMA pour trouver des valeurs optimales adaptées à des produits spécifiques
Ajouter des indicateurs supplémentaires tels que KDJ et MACD pour le filtrage des combinaisons et de meilleures entrées
Optimiser les normes de stop loss et de profit pour mieux adapter les fourchettes de volatilité du marché
Optimiser les paramètres de pyramide pour trouver des stratégies de pyramide idéales
Tester sur différents produits et adapter les paramètres à plus de produits
En conclusion, la stratégie Triple SMA est une approche très pratique de suivi des tendances. En combinant les triple SMA et StochClose, elle permet d'obtenir une identification de tendance solide et d'éviter de faux signaux.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Tripla Sma with entries based on sma price closes ", shorttitle="TRIPLE SMA STRATEGY", overlay=true) ////resolution="" len = input(200, minval=1, title="sma 1 length") len1 = input(400, minval=1, title="sma 2 length") len2 = input(600, minval=1, title="sma 3 length") src = input(close, title="Source") //////////////////////////////////////////// smma = 0.0 smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len up = smma > smma [1] down =smma < smma[1] mycolor = up ? #64b5f6 : down ? #d32f2f : na fastma = sma(hl2, 1) fastplot = plot(fastma, color=#000000, transp=100, title='sma on candle') slowplot = plot(smma, color=mycolor, transp=55, title='sma1') //////////////////////////////////////////// smma1 = 0.0 smma1 := na(smma1[1]) ? sma(src, len1) : (smma1[1] * (len1 - 1) + src) / len1 up2 = smma1 > smma1 [1] down2 =smma1 < smma1[1] mycolor2 = up2 ? #64b5f6 : down2 ? #d32f2f : na slowplot2 = plot(smma1, color=mycolor2, transp=45, title='sma2') //////////////////////////////////////////// smma2 = 0.0 smma2 := na(smma2[1]) ? sma(src, len2) : (smma2[1] * (len2 - 1) + src) / len2 up3 = smma2 > smma2 [1] down3 =smma2 < smma2[1] mycolor3 = up3 ? #64b5f6 : down3 ? #d32f2f : na slowplot3 = plot(smma2, color=mycolor3, transp=35, title='sma3') //////////////////////////////////////////////////////////////////////////////////////// //Fill gaps fillData = smma > fastma fillData2 = smma < fastma fillDtat = smma1 > smma fillDtat2 = smma1 < smma fillDat = smma2 > smma1 fillDat2 = smma2 < smma1 fillCol1 = fillData ? #ef5350 : fillData2 ? #64b5f6 : na fillCol2 = fillDtat ? #ef5350 : fillDtat2 ? #64b5f6 : na fillCol3 = fillDat ? #ef5350 : fillDat2 ? #64b5f6 : na fill(slowplot, fastplot, color=fillCol1, transp=90, title="sma1 fill") fill(slowplot, slowplot2, color=fillCol2, transp=80, title="sma2 fill") fill(slowplot2, slowplot3, color=fillCol3, transp=60, title="sma3 fill") uc = (close > smma) and (close > smma1) dc = (close < smma) and (close < smma1) barColor = uc ? #64b5f6 : dc ? #e91e63 : #b2b5be barcolor(color=barColor) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //StochClose from @trendinvestpro periods = input(50, minval=1, title="length for the oscillator") smooth = input(5, minval=1, title="oscillator smoothing") hhc=highest(close,periods) llc=lowest(close,periods) StochClose = sma((close-llc)/(hhc-llc)*100, smooth) shortline = input(95, minval=0, title="signal when oscillator crosses above") longline = input(5, minval=0, title="signal when oscillator crosses below") //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// longs = close > smma2 shorts = close < smma2 long = longs == true and crossunder(StochClose, longline) short = shorts == true and crossover(StochClose, shortline) stoplong = close < smma and close < smma1 and close < smma2 stopshort = close > smma and close > smma1 and close > smma2 p1 = strategy.position_avg_price / 100 / syminfo.mintick maxx = input(2500, title="max orders filled on a day", minval=0) takeprofit1 = input(1, title="take profit level 1", minval=0) takeprofit2 = input(2, title="take profit level 2", minval=0) takeprofit3 = input(6, title="take profit level 3", minval=0) takeprofitqt1 = input(30, title="take profit quantity first", minval=0) takeprofitqt2 = input(30, title="take profit quantity second", minval=0) takeprofitqt3 = input(30, title="take profit quantity third", minval=0) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////Strategy entries///////////////////////////////////////////////////////////////////////////////////////// // strategy.risk.max_intraday_filled_orders(maxx) strategy.entry("long", strategy.long, when=long) strategy.exit("tpl1", "long", qty_percent = takeprofitqt1, profit = takeprofit1 * p1) strategy.exit("tpl2", "long", qty_percent = takeprofitqt2, profit = takeprofit2 * p1) strategy.exit("tpl3", "long", qty_percent = takeprofitqt3, profit = takeprofit3 * p1) strategy.close("long", when=stoplong == true) strategy.entry("short", strategy.short, when=short) strategy.exit("tpl1", "short", qty_percent = takeprofitqt1, profit = takeprofit1 * p1) strategy.exit("tpl2", "short", qty_percent = takeprofitqt2, profit = takeprofit2 * p1) strategy.exit("tpl3", "short", qty_percent = takeprofitqt3, profit = takeprofit3 * p1) strategy.close("short", when=stopshort == true)