Stratégie de suivi automatique à triple SMA

Auteur:ChaoZhang est là., Date: 2024-01-26 15h05 et 58 min
Les étiquettes:

img

Résumé

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 logique de la stratégie

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. StochClose identifie les niveaux de surachat/survente et donne un signal long lorsqu'il dépasse 95 et un signal court lorsqu'il dépasse 5.

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.

Analyse des avantages

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.

Analyse des risques

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.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Ajouter/ajuster les périodes SMA pour trouver des valeurs optimales adaptées à des produits spécifiques

  2. Ajouter des indicateurs supplémentaires tels que KDJ et MACD pour le filtrage des combinaisons et de meilleures entrées

  3. Optimiser les normes de stop loss et de profit pour mieux adapter les fourchettes de volatilité du marché

  4. Optimiser les paramètres de pyramide pour trouver des stratégies de pyramide idéales

  5. Tester sur différents produits et adapter les paramètres à plus de produits

Conclusion

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)




Plus de