Ichimoku Kumo Twist estratégia de absorção de ouro

Autora:ChaoZhang, Data: 2023-11-28 16:12:09
Tags:

img

Resumo

A estratégia de absorção de ouro do Ichimoku Kumo Twist é uma estratégia quantitativa de negociação que combina o indicador técnico do mercado Ichimoku e a filtragem de faixa.

Princípio da estratégia

A estratégia é baseada principalmente no indicador Ichimoku e padrões de velas para julgar as tendências do mercado. O Ichimoku contém a linha de conversão, linha de base e linhas de nuvem, suas relações de cruzamento indicam as tendências do mercado. As linhas de nuvem também atuam como níveis de suporte e resistência. A estratégia define diferentes combinações de parâmetros para ajustar a sensibilidade das linhas Ichimoku. Além disso, a estratégia identifica padrões e gera sinais de compra quando a linha de conversão cruza acima da linha de base e sinais de venda quando cruza abaixo.

Além disso, a estratégia possui filtros de intervalo de datas configurados, de modo que só negoceia dentro de intervalos de datas especificados. Isso controla a frequência de negociação. Além disso, a configuração de stop loss ajuda a reduzir o risco ao parar a perda quando o preço corre em uma direção desfavorável.

Análise das vantagens

  • Utilize o indicador Ichimoku para julgar as tendências do mercado, parâmetros ajustáveis para sensibilidade
  • Sinais de negociação claros a partir do reconhecimento de padrões de velas
  • Filtro de intervalo de datas controla a frequência de negociação
  • Configuração de paragem de perdas para uma paragem de perdas oportuna para reduzir o risco

Análise de riscos

  • Ichimoku atrasado pode perder tendências em rápida mudança
  • O filtro de intervalo de datas pode perder algumas oportunidades de negociação
  • A definição inadequada de stop loss pode aumentar as perdas

Métodos como ajustar os parâmetros de Ichimoku, otimizar a faixa de datas, alterar os pontos de stop loss podem melhorar e controlar os riscos.

Orientações de otimização

  • Teste diferentes combinações de parâmetros para encontrar a configuração ideal de Ichimoku
  • Combine com outros indicadores para evitar Ichimoku problemas atrasados
  • Backtest para otimizar as configurações do intervalo de datas
  • Definição de paragem de perdas de tração dinâmica condicional

Resumo

A estratégia de absorção de ouro Ichimoku Kumo Twist integra o indicador Ichimoku, reconhecimento de padrões de velas, filtragem de faixa para determinar as tendências do mercado. Pode entender direções de tendência com bastante clareza. Através de meios como ajuste de parâmetros, controle de risco, etc., um bom desempenho da estratégia pode ser alcançado.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Cpt 20 60 120 30"
        20
    else
        if presets == "Cpt 10 30 60 30"
            10
        else
            if presets == "Std 18 52 104 26"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Cpt 20 60 120 30"
        60
    else
        if presets == "Cpt 10 30 60 30"
            30
        else
            if presets == "Std 18 52 104 26"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Cpt 20 60 120 30"
        120
    else
        if presets == "Cpt 10 30 60 30"
            60
        else
            if presets == "Std 18 52 104 26"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Cpt 20 60 120 30"
        30
    else
        if presets == "Cpt 10 30 60 30"
            30
        else
            if presets == "Std 18 52 104 26"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets", options=["Cpt 20 60 120 30", "Cpt 10 30 60 30", "Std 18 52 104 26", "Std 9 26 52 26"], defval="Cpt 20 60 120 30")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

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

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=(golong and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
strategy.entry("Sell", strategy.short, when=(goshort and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


Mais.