Estrategia de negociación con indicador de tres índices y doble media móvil


Fecha de creación: 2023-12-15 15:39:45 Última modificación: 2023-12-15 15:39:45
Copiar: 0 Número de Visitas: 603
1
Seguir
1621
Seguidores

Estrategia de negociación con indicador de tres índices y doble media móvil

Descripción general

Esta estrategia utiliza un indicador de línea de paridad doble y un indicador de línea de paridad triangular, combinado con un indicador aleatorio, para formar una estrategia de negociación de seguimiento de tendencias más estable y confiable. Su idea principal es emitir una señal de negociación cuando el indicador de línea de paridad determina la aparición de un tenedor de oro o un tenedor muerto; mientras que el indicador aleatorio se utiliza para auxiliar a determinar el exceso de venta y venta, para evitar la generación de señales erróneas cuando el mercado fluctúa fuertemente.

El principio

La estrategia tiene cuatro partes principales:

  1. Indicador de doble línea media: calcula el promedio móvil del índice de 50 y 100 ciclos respectivamente (EMA), que genera una señal de compra cuando el EMA a corto plazo se cruza con el EMA a largo plazo y una señal de venta cuando se cruza.

  2. Indicadores de tres índices: Calcula el promedio móvil del índice de 50 ciclos, 100 ciclos y 200 ciclos, respectivamente, para determinar la dirección de la tendencia del mercado. Cuando 50EMA> 100EMA> 200EMA es un mercado de más cabezales, cuando 50EMA < 100EMA < 200EMA es un mercado de cabezales.

  3. Indicador aleatorio: Calcula el valor de K y el valor de D de 6 días del RSI para determinar si hay sobreventa o sobreventa.

  4. Señales de negociación: solo se emite una orden de negociación real cuando el indicador binario equilibrado produce una señal al mismo tiempo que el mercado se ajusta al estado de la línea de tres índices equilibrados, y el indicador aleatorio no muestra un sobrecompra sobreventa.

Las ventajas

Esta estrategia combina el uso de indicadores de línea media y el uso de indicadores aleatorios. Al emitir una señal de negociación, se considera la dirección de la tendencia y se hace referencia al estado de sobreventa y sobreventa del mercado, lo que permite filtrar mejor el ruido y seguir una tendencia más clara. Además, utiliza una línea media de tres índices para juzgar la tendencia general, lo que hace que la señal sea más confiable.

Riesgos y contramedidas

El mayor riesgo de esta estrategia es que depende del juicio de los indicadores, que pueden provocar el fracaso de las operaciones cuando los indicadores emiten señales erróneas. Además, el uso de indicadores de medias de largo período para juzgar la tendencia general también puede perder oportunidades a corto plazo.

  1. Optimización de los parámetros del indicador y ajuste de la combinación periódica de las líneas medias binarias y triangulares para que se ajusten mejor a las características del mercado.

  2. Cancelar operaciones en el momento en que el mercado se vea afectado por una fuerte volatilidad.

  3. La adopción de estrategias de corto plazo para obtener ganancias en los mercados de largo plazo.

Dirección de optimización

La estrategia se puede optimizar principalmente en los siguientes aspectos:

  1. Ajustar los parámetros de ciclo de las líneas medias binarias y tridimensionales y optimizar los indicadores de acuerdo con las características del mercado.

  2. Aumentar el criterio de indicadores como VOLUME y MACD para evitar señales erróneas de precios anormales.

  3. Utiliza la modalidad de la vela para confirmar mejor la tendencia y evitar señales erróneas después de una retirada a corto plazo.

  4. Extensión a otras variedades, como acciones, divisas, etc., para probar la adecuación de las estrategias.

  5. Combinado con el indicador VIX para determinar la volatilidad general del mercado y controlar el tamaño de la posición.

Resumir

Esta estrategia utiliza un indicador de doble línea de medias para emitir señales de negociación, una línea de medias trifásicas y un indicador aleatorio para tomar decisiones auxiliares, para construir una estrategia de seguimiento de tendencias más estable. Es simple de entender, fácil de implementar, con una alta coincidencia con las características del mercado y un rendimiento más estable. Es una estrategia cuantitativa recomendable.

Código Fuente de la Estrategia
/*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