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.
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.
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.
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.
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.
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()