Cette stratégie utilise des indicateurs de moyenne mobile double et des indicateurs de moyenne mobile triple exponentielle, combinés à des indicateurs stochastiques, pour former une stratégie de trading de suivi de tendance relativement stable et fiable.
Cette stratégie se compose principalement de quatre volets:
Indicateur de moyenne mobile double: Calcule les moyennes mobiles exponentielles (EMA) de 50 et 100 périodes respectivement. Il génère un signal d'achat lorsque l'EMA à court terme dépasse l'EMA à long terme et un signal de vente lorsqu'il dépasse celui-ci.
Indicateur exponentiel triple: Calcule les moyennes mobiles exponentielles de 50 périodes, 100 périodes et 200 périodes pour déterminer la direction de la tendance du marché. Lorsque 50EMA> 100EMA> 200EMA, c'est un marché haussier. Lorsque 50EMA < 100EMA < 200EMA, c'est un marché baissier.
Indicateur stochastique: Calcule les valeurs K et D de 6 jours du RSI pour déterminer les conditions de surachat et de survente. Lorsque la valeur K dépasse la valeur D, elle est survendue. Lorsqu'elle dépasse celle-ci, elle est surachetée.
Signals de négociation: Seuls les ordres de négociation authentiques seront émis lorsque l'indicateur de moyenne mobile double génère un signal en même temps que le marché se conforme à l'état haussier ou baissier de la moyenne mobile exponentielle triple et que l'indicateur stochastique ne montre pas de surachat ou de survente.
Cette stratégie combine les avantages des indicateurs de moyenne mobile et des indicateurs stochastiques. Elle prend en compte à la fois le jugement de la direction de la tendance et l'état de surachat / survente du marché lors de l'émission de signaux de trading, filtrant ainsi le bruit plus efficacement pour suivre des tendances plus claires. En outre, elle utilise la moyenne mobile exponentielle triple pour déterminer la tendance globale, ce qui rend les signaux plus fiables.
Le plus grand risque de cette stratégie est qu'elle repose sur des jugements d'indicateur. Lorsque l'indicateur donne de mauvais signaux, cela peut facilement conduire à des transactions ratées. En outre, lorsque vous utilisez des moyennes mobiles à cycle plus long pour déterminer la tendance globale, certaines opportunités à court terme peuvent également être manquées. Les principales contre-mesures de risque sont les suivantes:
Optimiser les paramètres des indicateurs et ajuster les combinaisons de cycles de moyennes mobiles doubles et de moyennes mobiles exponentielles triples afin de mieux les adapter aux caractéristiques du marché.
Incorporer plus d'indicateurs pour les opérations CANCEL, en mettant fin aux transactions en cours lorsque le marché montre des fluctuations drastiques.
Utilisez des stratégies haussières auxiliaires à court terme pour capitaliser sur les opportunités à court terme sur les marchés haussiers à long terme.
Les principaux aspects dans lesquels cette stratégie peut être optimisée sont les suivants:
Ajuster les paramètres de cycle de la moyenne mobile double et de la moyenne mobile triple exponentielle pour optimiser l'adaptation des indicateurs aux caractéristiques du marché.
Augmenter le VOLUME, le MACD et d'autres jugements pour éviter les mouvements anormaux des prix provoquant de mauvais signaux.
Il est préférable de confirmer les tendances en utilisant des modèles de chandeliers pour éviter les mauvais signaux après les baisses à court terme.
Élargissez-le à plus de variétés comme les actions, le forex et testez l'adaptabilité de la stratégie.
Incorporer des indicateurs VIX pour déterminer la volatilité globale du marché et contrôler la taille des positions.
Cette stratégie utilise deux indicateurs de moyenne mobile pour émettre des signaux de trading, avec des moyennes mobiles exponentielles triples et des indicateurs stochastiques comme compléments, construisant ainsi une stratégie de suivi de tendance relativement stable.
/*backtest start: 2023-12-07 00:00:00 end: 2023-12-12 08:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false) //**Backtest Date sof useStartPeriodTime = input.bool(true , 'Start Date & Time' , group='Date Range' , inline='Start Period') startPeriodTime = input(timestamp('16 Apr 2021') , '' , group='Date Range' , inline='Start Period') useEndPeriodTime = input.bool(false , 'End Date & Time' , group='Date Range' , inline='End Period') endPeriodTime = input(timestamp('31 Dec 2222') , '' , group='Date Range' , inline='End Period') enableHighlight = input.bool(false , 'Highlight' , group='Date Range' , inline='Highlight') highlightType = input.string('Anchors' , '' , group='Date Range' , inline='Highlight' , options=['Anchors', 'Background']) highlightColor = input.color(color.white , '' , group='Date Range' , inline='Highlight') start = useStartPeriodTime ? startPeriodTime >= time : false end = useEndPeriodTime ? endPeriodTime <= time : false calcPeriod = true // var line startAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2) // var line endAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2) // useBgcolor = false // if enableHighlight // if highlightType == 'Anchors' // if useStartPeriodTime // line.set_xy1(startAnchor, startPeriodTime, low) // line.set_xy2(startAnchor, startPeriodTime, high) // if useEndPeriodTime // line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low) // line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high) // if highlightType == 'Background' // useBgcolor := true // useBgcolor // bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false) //**Backtest Date eof src =input(close , 'Source' , group='Support') showEMA = input(true , 'Show EMA' , group='Support') //**Stochastic RSI sof smoothK = input.int(6 , "K" , group='Stochastic RSI' , minval=1) smoothD = input.int(6 , "D" , group='Stochastic RSI' , minval=1) lengthRSI = input.int(28 , "RSI Length" , group='Stochastic RSI' , minval=1) lengthStoch = input.int(28 , "Stoch Length" , group='Stochastic RSI' , minval=1) rsi1 = ta.rsi(src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) //**STochastic RSI eof //** EMA sof emain01 = input.int(50 , "EMAma Girang" , group='Moving Average Exponential' , minval=1) emain02 = input.int(100 , "EMAma Muda" , group='Moving Average Exponential' , minval=1) emain03 = input.int(200 , "EMAma Tua" , group='Moving Average Exponential' , minval=1) ema01 = ta.ema(src, emain01) ema02 = ta.ema(src, emain02) ema03 = ta.ema(src, emain03) plot(showEMA ? ema01 : na, 'EMAma Girang' , color = color.new(color.orange, 0)) plot(showEMA ? ema02 : na, 'EMAma Muda' , color = color.new(color.blue, 0)) plot(showEMA ? ema03 : na, 'EMAma Tua' , color = color.new(color.red, 0)) //** EMA eof //**Condition sof emaLong = ema01 > ema02 and ema02 > ema03 and low > ema03 emaShort = ema01 < ema02 and ema02 < ema03 and high < ema03 longCond = ta.crossover(k,d) and k <= 23 and emaLong shortCond = ta.crossunder(k,d) and k >= 77 and emaShort longClose = ta.crossunder(k,d) and k <= 77 shortClose = ta.crossover(k,d) and k >= 23 longCross = ta.crossover(ema01, ema02) shortCross = ta.crossunder(ema01, ema02) //**Condition eof //**Strategy sof if calcPeriod and longCond strategy.entry('long', strategy.long, when=longCond, comment='EN Long') strategy.close('long', when=shortClose, comment='EX Long') strategy.close('long', when=shortCross, comment='MD Short') if calcPeriod and shortCond strategy.entry('short', strategy.short, when=shortCond, comment='EN Short') strategy.close('short', when=longClose, comment='EX Short') strategy.close('short', when=longCross, comment='MD Long') if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02) strategy.cancel('long') strategy.cancel('short') //**Strategy eof //**Label sof entryText = str.tostring(strategy.position_avg_price, '##.###') longText = 'Long Entry : ' + entryText shortText = 'Short Entry : ' + entryText noTrade = 'Sleeping Mode' LongTrade = strategy.position_size > 0 ShortTrade = strategy.position_size < 0 Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade xPosition = timenow + math.round(ta.change(time)*1) yPosition = ta.highest(1) labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0) textColor = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0) // lab_l = label.new( // xPosition, yPosition, Tekslabel, // color=labelColor, // textcolor=textColor, // style = label.style_label_left, // textalign=text.align_left, // xloc=xloc.bar_time, yloc = yloc.price) // label.delete(lab_l[1]) //**Strategy eof