Ichimoku Moving Average Crossover Estratégia

Autora:ChaoZhang, Data: 2023-12-19 15:40:53
Tags:

img

Resumo

A estratégia de cruzamento da média móvel Ichimoku identifica sinais longos e curtos através do cálculo de um conjunto de médias móveis e detecção de cruzes de preços.

Estratégia lógica

A estratégia Ichimoku utiliza um sistema especializado composto por 5 linhas médias móveis, a saber, a linha de conversão, a linha de base, o lead span 1, o lead span 2 e o lagging span. Especificamente, a linha de conversão descreve o impulso recente do preço, a linha de base mostra a tendência de médio a longo prazo, as linhas de liderança combinam a conversão e a base para prever movimentos futuros, e o lagging span exibe preços passados para referência. Os sinais de negociação são gerados quando o preço atravessa a linha de base. A estratégia também incorpora filtros de corpo e cores de velas para evitar falhas.

Vantagens

A estratégia Ichimoku amalgama os pontos fortes de vários indicadores técnicos em um único sistema. Ele funde conceitos de médias móveis, canais de preços, confirmação de volume, etc., formando uma metodologia sistemática. Isso garante precisão e direcionalidade dos sinais de negociação. Em comparação com as estratégias de indicador único, reduz muito os falsos sinais e aumenta os fatores de lucro.

Riscos

Como um sistema de tendência, a estratégia Ichimoku tem intervalos de negociação relativamente longos. Isso significa que oscilações de preços de curto prazo não podem ser capturadas. Além disso, as médias móveis falham quando os preços flutuam violentamente. Tais situações podem levar a sinais errados e perdendo negócios. É aconselhável usar paradas para controlar riscos.

Oportunidades de melhoria

A estratégia de Ichimoku pode ser melhorada em áreas como: 1) Ajustar parâmetros médios para diferentes períodos e produtos; 2) Incorporar indicadores de volume para confirmar as relações preço-volume; 3) Introduzir modelos de aprendizado de máquina para refinar a determinação de sinais; 4) Adicionar mais filtros para reduzir a probabilidade de negociação incorreta.

Conclusão

A estratégia de cruzamento de média móvel Ichimoku estável e confiável é adequada como uma estratégia central combinada com outros algoritmos.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Ichimoku Strategy v1.0", shorttitle = "Ichimoku str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
conversionPeriods = input(9, minval = 1, title = "Conversion Periods")
basePeriods = input(26, minval = 1, title = "Base Periods")
laggingSpan2Periods = input(52, minval = 1, title = "Lagging Span")
usebf = input(true, defval = true, title = "Use body filter")
usecf = input(true, defval = true, title = "Use color filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Ichimoku
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

//Lines
plot(conversionLine, color=red, title="Conversion Line")
plot(baseLine, color=blue, title="Base Line")
plot(close, offset = -basePeriods, color=green, title="Lagging Span")
p1 = plot(leadLine1, offset = basePeriods, color=green, title="Lead 1")
p2 = plot(leadLine2, offset = basePeriods, color=red, title="Lead 2")
fill(p1, p2)

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gb = bar == 1 or usecf == false
rb = bar == -1 or usecf == false

//Signals
up = low > baseLine and rb and body
dn = high < baseLine and gb and body

//Trading
if up
    //if strategy.position_size < 0
    //    strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    //if strategy.position_size > 0
    //    strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mais.