Esta estrategia utiliza indicadores de media móvil doble y indicadores de media móvil triple exponencial, combinados con indicadores estocásticos, para formar una estrategia de trading de seguimiento de tendencias relativamente estable y confiable.
Esta estrategia consta principalmente de cuatro partes:
Indicador de media móvil doble: Calcula las medias móviles exponenciales (EMA) de 50 y 100 períodos respectivamente.
Indicador exponencial triple: Calcula los promedios móviles exponenciales de 50 períodos, 100 períodos y 200 períodos para determinar la dirección de la tendencia del mercado. Cuando 50EMA> 100EMA> 200EMA, es un mercado alcista. Cuando 50EMA < 100EMA < 200EMA, es un mercado bajista.
Indicador estocástico: Cálcula los valores de K y D de 6 días del RSI para determinar las condiciones de sobrecompra y sobreventa. Cuando el valor de K cruza por encima del valor de D, está sobrevendido. Cuando cruza por debajo, está sobrecomprado.
Indicadores de negociación: Sólo cuando el indicador de media móvil dual genere una señal al mismo tiempo que el mercado se ajusta al estado alcista o bajista de la media móvil exponencial triple, y el indicador estocástico no muestre sobrecompra o sobreventa, se emitirán órdenes de negociación verdaderas.
Esta estrategia combina las ventajas de los indicadores de promedio móvil y los indicadores estocásticos. Toma en cuenta tanto el juicio de la dirección de la tendencia como el estado de sobrecompra / sobreventa del mercado al emitir señales comerciales, filtrando así el ruido de manera más efectiva para rastrear tendencias más claras. Además, utiliza el triple promedio móvil exponencial para determinar la tendencia general, lo que hace que las señales sean más confiables.
El mayor riesgo de esta estrategia es que se basa en juicios de indicadores. Cuando el indicador da señales erróneas, puede llevar fácilmente a operaciones fallidas. Además, al usar promedios móviles de ciclo más largo para determinar la tendencia general, también se pueden perder algunas oportunidades a corto plazo. Las principales contramedidas de riesgo son las siguientes:
Optimizar los parámetros de los indicadores y ajustar las combinaciones de ciclos de medias móviles dobles y medias móviles exponenciales triples para adaptarlas mejor a las características del mercado.
Incorporar más indicadores para las operaciones CANCEL, terminando las operaciones en curso cuando el mercado muestra fluctuaciones drásticas.
Emplear estrategias alcistas auxiliares a corto plazo para capitalizar las oportunidades a corto plazo en los mercados alcistas a largo plazo.
Entre los principales aspectos en los que se puede optimizar esta estrategia figuran:
Ajustar los parámetros del ciclo de la media móvil dual y de la media móvil exponencial triple para optimizar la adaptación de los indicadores a las características del mercado.
Aumentar el volumen, el MACD y otros juicios para evitar movimientos anormales de precios que causan señales erróneas.
Es mejor confirmar las tendencias usando patrones de candlesticks para evitar señales erróneas después de retrocesos a corto plazo.
Ampliarlo a más variedades como acciones, divisas y probar la adaptabilidad de la estrategia.
Incorporar indicadores VIX para determinar la volatilidad general del mercado y controlar el tamaño de las posiciones.
Esta estrategia utiliza dos indicadores de promedio móvil para emitir señales comerciales, con tres promedios móviles exponenciales y indicadores estocásticos como complementos, construyendo así una estrategia de seguimiento de tendencias relativamente estable. Es simple, fácil de implementar, altamente adaptada a las características del mercado, ofreciendo retornos estables. Es una estrategia cuantitativa que vale la pena recomendar. A través de optimizaciones específicas, tiene el potencial de lograr resultados aún mejores.
/*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