Estrategia de trading cuantitativo con gráficos de nube Ichimoku y Octa-EMA


Fecha de creación: 2023-12-11 14:52:05 Última modificación: 2023-12-11 14:52:05
Copiar: 1 Número de Visitas: 388
1
Seguir
1166
Seguidores

Estrategia de trading cuantitativo con gráficos de nube Ichimoku y Octa-EMA

Descripción general

La estrategia utiliza un promedio móvil de índice de 8 diferentes períodos con un gráfico de la nube de Ichimoku como su principal señal de negociación, y puede funcionar de manera efectiva en un marco de tiempo de 1 hora, 4 horas o el horario solar.

Principio de estrategia

La estrategia se basa en dos partes principales:

  1. El promedio móvil de 8 líneas (Octa-EMA)

La estrategia utiliza 8 EMA de diferentes períodos, los cuales son los de los días 5, 11, 15, 18, 21, 24, 28 y 34. Estos 8 EMA se conocen como la cuadrilla Octa-EMA. Cuando los EMA de períodos más cortos están por encima de los EMA de períodos más largos, se muestra una tendencia de varios extremos, y viceversa.

  1. Indicadores de las nubes de Ichimoku

El gráfico de la nube de Ichimoku contiene líneas de conversión, líneas de referencia, líneas de retardo y líneas de liderazgo A/B. El gráfico de la nube determina principalmente la dirección de la tendencia y proporciona resistencia de soporte.

Las señales de negociación de esta estrategia provienen de los dos componentes principales anteriores. Cuando los 8 EMA están todos en la fila de la cabeza (el EMA corto está por encima del EMA largo) y el precio es más alto que el gráfico de la nube de Ichimoku, se genera una señal de compra. Cuando la fila de EMA se convierte en la cabeza en blanco (el EMA corto está por debajo del EMA largo) se genera una señal de venta.

Análisis de las ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. El uso de filtros de doble indicador puede reducir las falsas señales
  2. El mapa de la nube de Ichimoku puede determinar la dirección de la tendencia y evitar el comercio en contra
  3. Artículo 8 Tendencias en la evaluación de la cartera cruzada de la EMA para una mayor precisión
  4. Puede funcionar en varios períodos de tiempo
  5. El espacio para optimizar los parámetros es amplio y se puede personalizar para diferentes variedades

Análisis de riesgos estratégicos

La estrategia también tiene ciertos riesgos:

  1. Puede generar más señales de cabeza en caso de temblor.
  2. Las condiciones de compra son más estrictas y es posible que se pierda parte de la compra.
  3. Puede fallar cuando las tendencias a corto y mediano plazo no coinciden
  4. La configuración incorrecta de los parámetros de EMA puede causar un retraso en la señal

Para los riesgos anteriores, se puede reducir el riesgo mediante la adaptación de los parámetros de la EMA o la optimización de las condiciones de ingreso, o se puede combinar con otros indicadores como auxiliares.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Ajustar el parámetro EMA para optimizar el ciclo correspondiente
  2. Aumentar los indicadores de medias de medias de medias de medias de medias de medias de medias de medias de medias de medias de medias de medias
  3. Combinado con otros indicadores como MACD, KDJ, para optimizar el tiempo de entrada
  4. Aumentar las estrategias de detención de pérdidas y controlar las pérdidas individuales
  5. Prueba de los efectos de los diferentes parámetros para encontrar la combinación óptima de parámetros
  6. El algoritmo de aprendizaje automático busca los parámetros de la ventaja

Resumir

Octa-EMA es una estrategia de seguimiento de tendencias más estable y confiable que la estrategia de comercio de gráficos de la nube de Ichimoku. Utiliza una combinación de tendencias de juicio de EMA y señales de filtro de Ichimoku para obtener un menor índice de error después de optimizar los parámetros. La estrategia se puede aplicar ampliamente a variedades como índices de acciones, divisas y metales preciosos, y puede funcionar en varios períodos de tiempo.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Fukuiz

strategy(title='Fukuiz Octa-EMA + Ichimoku', shorttitle='Fuku octa strategy', overlay=true, process_orders_on_close=true, 
     default_qty_type= strategy.cash , default_qty_value=1000, currency=currency.USD, initial_capital=10000 ,commission_type = strategy.commission.percent,commission_value=0.25)


//OCTA EMA ##################################################


// Functions
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

showRibbon = input(true, 'Show Ribbon (EMA)')
ema1Len = input(5, title='EMA 1 Length')
ema2Len = input(11, title='EMA 2 Length')
ema3Len = input(15, title='EMA 3 Length')
ema4Len = input(18, title='EMA 4 Length')
ema5Len = input(21, title='EMA 5 Length')
ema6Len = input(24, title='EMA 6 Length')
ema7Len = input(28, title='EMA 7 Length')
ema8Len = input(34, title='EMA 8 Length')

[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

//Plot

ribbonDir = ema8 < ema2
p1 = plot(ema1, color=showRibbon ? ribbonDir ? #1573d4 : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 1')
p2 = plot(ema2, color=showRibbon ? ribbonDir ? #3096ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 2')
plot(ema3, color=showRibbon ? ribbonDir ? #57abff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 3')
plot(ema4, color=showRibbon ? ribbonDir ? #85c2ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 4')
plot(ema5, color=showRibbon ? ribbonDir ? #9bcdff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 5')
plot(ema6, color=showRibbon ? ribbonDir ? #b3d9ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 6')
plot(ema7, color=showRibbon ? ribbonDir ? #c9e5ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 7')
p8 = plot(ema8, color=showRibbon ? ribbonDir ? #dfecfb : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 8')
fill(p1, p2, color.new(#1573d4, 85))
fill(p2, p8, color.new(#1573d4, 85))

//ichimoku##################################################

//color
colorblue = #3300CC
colorred = #993300
colorwhite = #FFFFFF
colorgreen = #CCCC33
colorpink = #CC6699
colorpurple = #6633FF

//switch
switch1 = input(false, title='Chikou')
switch2 = input(false, title='Tenkan')
switch3 = input(false, title='Kijun')

middleDonchian(Length) =>
    lower = ta.lowest(Length)
    upper = ta.highest(Length)
    math.avg(upper, lower)

//Functions
conversionPeriods = input.int(9, minval=1)
basePeriods = input.int(26, minval=1)
laggingSpan2Periods = input.int(52, minval=1)
displacement = input.int(26, minval=1)
Tenkan = middleDonchian(conversionPeriods)
Kijun = middleDonchian(basePeriods)
xChikou = close
SenkouA = middleDonchian(laggingSpan2Periods)
SenkouB = (Tenkan[basePeriods] + Kijun[basePeriods]) / 2

//Plot
A = plot(SenkouA[displacement], color=color.new(colorpurple, 0), title='SenkouA')
B = plot(SenkouB, color=color.new(colorgreen, 0), title='SenkouB')
plot(switch1 ? xChikou : na, color=color.new(colorpink, 0), title='Chikou', offset=-displacement)
plot(switch2 ? Tenkan : na, color=color.new(colorred, 0), title='Tenkan')
plot(switch3 ? Kijun : na, color=color.new(colorblue, 0), title='Kijun')
fill(A, B, color=color.new(colorgreen, 90), title='Ichimoku Cloud')

//Buy and Sell signals
fukuiz = math.avg(ema2, ema8)
white = ema2 > ema8
gray = ema2 < ema8
buycond = white and white[1] == 0
sellcond = gray and gray[1] == 0
bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)
buy = bearish[1] and buycond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell = bullish[1] and sellcond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell2=ema2 < ema8
buy2 = white and fukuiz > SenkouA[displacement] and fukuiz > SenkouB

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//Back test

startYear = input.int(defval=2017, title='Start Year', minval=2000, maxval=3000)
startMonth = input.int(defval=1, title='Start Month', minval=1, maxval=12)
startDay = input.int(defval=1, title='Start Day', minval=1, maxval=31)
endYear = input.int(defval=2023, title='End Year', minval=2000 ,maxval=3000)
endMonth = input.int(defval=12, title='End Month', minval=1, maxval=12)
endDay = input.int(defval=31, title='End Day', minval=1, maxval=31)

start = timestamp(startYear, startMonth, startDay, 00, 00)
end = timestamp(endYear, endMonth, endDay, 23, 59)
period() => time >= start and time <= end ? true : false

if buy2 
    strategy.entry(id='long', direction=strategy.long, when=period(), comment='BUY')

if sell2
    strategy.close(id='long', when=period(), comment='SELL')