Estratégia de negociação quantitativa Octa-EMA e Ichimoku Cloud Chart


Data de criação: 2023-12-11 14:52:05 última modificação: 2023-12-11 14:52:05
cópia: 1 Cliques: 737
1
focar em
1621
Seguidores

Estratégia de negociação quantitativa Octa-EMA e Ichimoku Cloud Chart

Visão geral

A estratégia usa o índice de média móvel de oito períodos diferentes com o gráfico da nuvem de Ichimoku como principal sinal de negociação, podendo operar de forma eficaz em 1 hora, 4 horas ou no horário do dia.

Princípio da estratégia

A estratégia baseia-se em dois pilares principais:

  1. 8 Indices de Média Móvel (Octa-EMA)

A estratégia usa 8 EMAs de diferentes períodos, os quais são os de 5o, 11o, 15o, 18o, 21o, 24o, 28o e 34o dias. Estes 8 EMAs são chamados de Octa-EMA. Quando os EMAs de períodos mais curtos estão acima dos EMAs de períodos mais longos, eles representam uma tendência de cabeça para baixo.

  1. Índice das nuvens de Ichimoku

O gráfico da nuvem de Ichimoku contém linhas de conversão, linhas de referência, linhas de atraso e linhas de liderança A/B. O gráfico da nuvem determina principalmente a direção da tendência e fornece resistência de suporte. Quando o preço está acima do gráfico da nuvem, é uma tendência de várias direções, e abaixo do gráfico da nuvem é uma tendência aérea.

Os sinais de negociação da estratégia vêm dos dois componentes acima. Quando os 8 EMAs estão todos em uma fila de cabeças (o EMA curto está acima do EMA longo) e o preço é maior que o gráfico da nuvem de Ichimoku, um sinal de compra é gerado. Quando a fila de EMAs se transforma em um EMA vazio (o EMA curto está abaixo do EMA longo), um sinal de venda é gerado.

Análise de vantagens estratégicas

A estratégia tem as seguintes vantagens:

  1. Filtragem de duplo indicador para reduzir falhas
  2. Os gráficos de nuvem Ichimoku ajudam a avaliar a direção da tendência e a evitar a negociação contracorrente
  3. Artigo 8o Tendências de avaliação de portfólios cruzados da EMA, melhoria da precisão
  4. Funciona em vários períodos de tempo
  5. Parâmetros de otimização de espaço grande, pode ser personalizado para diferentes variedades

Análise de risco estratégico

A estratégia também traz alguns riscos:

  1. Pode produzir mais sinais aéreos em situações de tremores
  2. Termos de compra mais rigorosos, podendo perder pontos de compra
  3. Pode ser invalidado quando as tendências de curto e médio prazo não estão de acordo
  4. A configuração inadequada do parâmetro EMA pode causar atraso no sinal

Para os riscos acima, pode-se reduzir o risco, ajustando os parâmetros da EMA ou otimizando os requisitos de admissão, ou pode ser combinado com outros indicadores como auxiliar.

Direção de otimização da estratégia

A estratégia pode ser melhorada em vários aspectos:

  1. Ajustar os parâmetros do EMA para otimizar o ciclo correspondente
  2. Aumentar os indicadores de mediana de vazio para garantir a precisão da tendência
  3. Combinação de MACD, KDJ e outros indicadores para otimizar o tempo de entrada
  4. Aumentar a estratégia de stop loss para controlar as perdas individuais
  5. Teste os efeitos de diferentes variedades de parâmetros para encontrar a melhor combinação de parâmetros
  6. Algoritmos de aprendizagem automática para encontrar parâmetros de excelência

Resumir

A Octa-EMA é uma estratégia de acompanhamento de tendências mais estável e confiável do que a estratégia de negociação de gráficos da nuvem de Ichimoku. Utiliza simultaneamente a combinação de tendências de julgamento da EMA e os sinais de filtragem de Ichimoku, obtendo uma menor taxa de erro após a otimização dos parâmetros. A estratégia pode ser amplamente aplicada a variedades como índices de ações, divisas e metais preciosos, e pode ser executada em vários períodos de tempo.

Código-fonte da estratégia
/*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')