Estratégia de negociação de indicadores de média móvel dupla e triplo exponencial

Autora:ChaoZhang, Data: 2023-12-15 15:39:45
Tags:

img

Resumo

Esta estratégia usa indicadores de média móvel dupla e indicadores de média móvel exponencial tripla, combinados com indicadores estocásticos, para formar uma estratégia de negociação de rastreamento de tendências relativamente estável e confiável.

Princípios

Esta estratégia consiste principalmente em quatro partes:

  1. Indicador de média móvel dupla: Calcula as médias móveis exponenciais (EMA) de 50 períodos e 100 períodos, respectivamente.

  2. Indicador exponencial triplo: Calcula as médias móveis exponenciais de 50 períodos, 100 períodos e 200 períodos para determinar a direção da tendência do mercado. Quando 50EMA> 100EMA> 200EMA, é um mercado de alta. Quando 50EMA<100EMA<200EMA, é um mercado de baixa.

  3. Indicador Estocástico: Calcula os valores K e D de 6 dias do RSI para determinar condições de sobrecompra e sobrevenda. Quando o valor K cruza acima do valor D, ele é sobrevendido. Quando cruza abaixo, ele é sobrecomprado.

  4. Indicadores de negociação: Apenas quando o indicador de média móvel dupla gera um sinal ao mesmo tempo em que o mercado se ajusta ao estado de alta ou baixa da média móvel exponencial tripla e o indicador estocástico não mostra sobrecompra ou sobrevenda, serão emitidas ordens de negociação reais.

Vantagens

Esta estratégia combina as vantagens dos indicadores de média móvel e indicadores estocásticos. Ela leva em conta tanto o julgamento da direção da tendência quanto o estado de sobrecompra / sobrevenda do mercado ao emitir sinais de negociação, filtrando assim o ruído de forma mais eficaz para rastrear tendências mais claras. Além disso, usa a média móvel exponencial tripla para determinar a tendência geral, tornando os sinais mais confiáveis. Esta estratégia é simples, fácil de implementar e fácil de otimizar.

Riscos e contramedidas

O maior risco desta estratégia é que ela depende de julgamentos de indicadores. Quando o indicador dá sinais errados, pode facilmente levar a negócios fracassados. Além disso, ao usar médias móveis de ciclo mais longo para determinar a tendência geral, algumas oportunidades de curto prazo também podem ser perdidas. As principais contramedidas de risco são as seguintes:

  1. Otimizar os parâmetros dos indicadores e ajustar as combinações de ciclos de médias móveis duplas e médias móveis exponenciais triplas para melhor as adaptar às características do mercado.

  2. Incorporar mais indicadores para as operações CANCEL, encerrando as operações em curso quando o mercado apresenta flutuações drásticas.

  3. Empregar estratégias de alta de curto prazo auxiliares para capitalizar as oportunidades de curto prazo em mercados de alta de longo prazo.

Orientações de otimização

Os principais aspectos em que esta estratégia pode ser otimizada incluem:

  1. Ajustar os parâmetros do ciclo da média móvel dupla e da média móvel exponencial tripla para otimizar a adaptação dos indicadores às características do mercado.

  2. Aumentar o VOLUME, o MACD e outros julgamentos para evitar movimentos anormais de preços que causem sinais errados.

  3. Melhor confirmar tendências usando padrões de velas para evitar sinais errados após retrações de curto prazo.

  4. Expandir para mais variedades como ações, forex e testar a adaptabilidade da estratégia.

  5. Incorporar indicadores VIX para determinar a volatilidade global do mercado e controlar o dimensionamento das posições.

Conclusão

Esta estratégia usa indicadores de média móvel dupla para emitir sinais de negociação, com médias móveis exponenciais triplas e indicadores estocásticos como complementos, construindo assim uma estratégia de rastreamento de tendências relativamente estável. É simples, fácil de implementar, altamente combinado com as características do mercado, proporcionando retornos estáveis. É uma estratégia quantitativa que vale a pena recomendar. Através de otimizações direcionadas, tem o potencial de alcançar resultados ainda melhores.


/*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


Mais.