Sistema integrado de negociação Ichimoku Keltner baseado na estratégia de média móvel

Autora:ChaoZhang, Data: 2023-12-20 13:40:08
Tags:

img

Resumo

Esta estratégia integra estratégia de média móvel, gráficos de nuvem de Ichimoku e indicadores técnicos do canal Keltner para alcançar o seguimento da tendência e a negociação de avanço, que é adequada para a negociação algorítmica de alta frequência.

Princípio da estratégia

  1. Usar o canal Keltner para julgar se o preço da ação excede os trilhos superior e inferior do canal como sinal para abertura de posições
  2. Gráficos de nuvens Ichimoku julgar a direção da tendência e uso com o canal Keltner
  3. A estratégia de média móvel envia sinais de encerramento

Análise das vantagens

  1. Integrar múltiplos indicadores técnicos para um julgamento abrangente para melhorar a precisão das decisões
  2. Os juízes do canal Keltner avaliam as condições de sobrecompra e sobrevenda para evitar a perseguição de máximos e a eliminação de mínimos ao abrir posições
  3. Os gráficos das nuvens de Ichimoku julgam as principais tendências para evitar a negociação contra a tendência
  4. A estratégia de média móvel filtra os choques e evita a sensibilidade excessiva

Análise de riscos

  1. A integração de múltiplos indicadores torna as definições de parâmetros mais complexas e requer testes cuidadosos
  2. O cruzamento da linha de conversão e da linha de base dos gráficos de nuvens nem sempre é um sinal de negociação confiável
  3. O canal de Keltner precisa de ajustar os parâmetros para se adaptar às características das diferentes unidades populacionais

Orientações de otimização

  1. Avaliar o desempenho do servidor e encurtar adequadamente os ciclos da média móvel para aumentar a frequência de negociação
  2. Teste a sensibilidade de diferentes unidades populacionais a parâmetros e defina parâmetros adaptativos
  3. Aumentar a estratégia de stop loss para reduzir perdas únicas

Resumo

Esta estratégia integra gráficos de nuvem Ichimoku, canais de Keltner e estratégias de média móvel com múltiplos indicadores técnicos para alcançar rastreamento de tendências e negociação de avanço eficiente. Em comparação com um único indicador, o julgamento desta estratégia é mais abrangente e preciso, evitando certos falsos sinais. Ao mesmo tempo, há também problemas de que as configurações de parâmetros são mais complexas e precisam ser otimizadas para ações individuais. Em geral, esta estratégia é adequada para negociação algorítmica de alta frequência com efeitos significativos.


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

//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading 
strategy("Ichimoku Keltner Strategy", overlay=true) 

// -- Keltner ------------------------------------------------------------------
source = close

useTrueRange = input(true)
length = input(18, minval=1) 
mult = input(1.8)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)

//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source  < lower

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

// ---------------------------------------------------------------------


// -- Ichimoku

ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)

ATR = rma(tr(true), ATRlength)

len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)

emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)

conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)

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

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver) 

longCond    = crossover(conversionLine, baseLine)
shortCond   = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------

if (crossUpper and (conversionLine > baseLine))
    strategy.entry("long", strategy.long, stop=bprice, comment="LONG")

if (crossLower and (conversionLine < baseLine))
    strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
    
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))

Mais.