Estratégia de acompanhamento da tendência cruzada TENKAN KIJUN de uma hora baseada no ADX

Autora:ChaoZhang, Data: 2023-12-08 15:37:00
Tags:

img

Resumo

Esta é uma estratégia de rastreamento de tendências simples, mas lucrativa, baseada no cruzamento de um período de tempo TENKAN e KIJUN no sistema ICHIMOKU combinado com o indicador ADX para filtrar mercados de tendências fracas para gerar sinais de negociação.

Estratégia lógica

A estratégia usa a linha de conversão (TENKAN) e a linha de base (KIJUN) cruzando no sistema ICHIMOKU para determinar a direção da tendência do mercado. A linha TENKAN é calculada com base na média da maior alta e menor baixa das últimas 18 velas, representando a linha de conversão rápida. A linha KIJUN é baseada em 58 períodos de velas, representando a linha de conversão padrão.

Quando o TENKAN cruza acima do KIJUN, é um sinal de alta. Quando o TENKAN cruza abaixo do KIJUN, é um sinal de baixa.

Além disso, o indicador ADX é usado para medir a força da tendência.

Em resumo, esta estratégia identifica a direcção da tendência a médio prazo através do cruzamento TENKAN e KIJUN e utiliza o ADX para filtrar falsas rupturas, a fim de acompanhar as tendências a longo prazo.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Usando um sistema ICHIMOKU maduro e confiável para determinar a direção da tendência e pontos de virada.

  2. Filtrar mercados de tendências fracas usando o ADX para evitar falhas na consolidação.

  3. O período de uma hora filtra o ruído do mercado e só capta tendências de médio a longo prazo.

  4. A lógica é direta e fácil de seguir para os traders de tendências.

  5. Resultados sólidos de backtesting, especialmente em moedas de alta capitalização de mercado como ETH/BTC.

Análise de riscos

Alguns riscos a notar sobre esta estratégia:

  1. Os parâmetros de ICHIMOKU são sensíveis, precisam de personalização para pares diferentes.

  2. ADX pode atrasar em alguns casos, causando entrada perdida.

  3. Desempenho fraco em mercados variados com frequentes resultados de stop loss.

  4. O desempenho varia muito entre pares e prazos diferentes.

  5. A detenção de posições a longo prazo pode ser arriscada, sendo necessário um stop loss/take profit adequado.

A otimização pode ser feita por meio de ajuste de parâmetros ADX, adicionando filtros como MACD para reduzir sinais falsos ou ajuste dinâmico de parâmetros para robustez.

Orientações de otimização

Algumas orientações principais para melhorar a estratégia:

  1. Optimização dinâmica dos parâmetros TENKAN e KIJUN para melhor adaptação.

  2. Procurando por melhores indicadores de tendência para substituir ou combinar com o ADX.

  3. Adicionar stop loss/take profit para controlar a relação risco/recompensa.

  4. Combinar a modelagem com indicadores complementares para melhorar a estabilidade.

  5. Modularização e flexibilidade para ajuste de parâmetros em mais pares.

  6. Gestão quantitativa do risco, por exemplo, controlo da utilização máxima contra movimentos extremos.

Conclusão

Em conclusão, esta é uma estratégia de rastreamento de tendências simples, mas prática, baseada principalmente no cruzamento TENKAN/KIJUN e ADX para identificar tendências de médio a longo prazo e gerar sinais. Ele mostrou resultados positivos de backtesting, especialmente em pares de BTC de alta capitalização de mercado como ETH/BTC, com lucratividade relativamente estável. Mas também depende do ajuste de parâmetros, requer otimização por par. O controle de risco por comércio também é necessário para limitar as perdas quando as tendências se revertem.


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

//@version=2
strategy(title="Odin's Kraken (TK Cross Strategy)", shorttitle="Odin's Kraken", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title="Source")

// define tk in ichimoku

conversionPeriods = input(18, minval=1, title="Conversion Line Periods (Tenkan)"),
basePeriods = input(58, minval=1, title="Base Line Periods (Kijun)")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)

TK_Uptrend = crossover(conversionLine,baseLine)
TK_Downtrend = crossunder(conversionLine,baseLine)

plot(conversionLine, color=lime, title="Tenkan", linewidth=3)
plot(baseLine, color=red, title="Kijun", linewidth=3)

// define ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", defval=20)
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)

	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

// backtesting range

// From Date Inputs
fromDay = input(defval = 3, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2018, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 3, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2019, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

// open long and short

longCondition = TK_Uptrend
if (longCondition and sig > 12 and time_cond)
    strategy.entry("LONG", strategy.long)

shortCondition = TK_Downtrend
if (shortCondition and sig > 12 and time_cond)
    strategy.entry("SHORT", strategy.short)

// close trade if backtesting criteria not met

if (not time_cond)
    strategy.close_all()




Mais.