Estratégia de negociação adaptativa baseada em indicadores de impulso

Autora:ChaoZhang, Data: 2024-01-05 11:43:25
Tags:

img

Resumo

Esta estratégia é uma estratégia de negociação de ações adaptativa baseada em indicadores de impulso.

Princípio da estratégia

O núcleo desta estratégia é construir um canal de preços através de bandas de Bollinger e canais de Keltner e identificar sinais de negociação quando o preço quebra o canal. Ele tomará uma posição longa quando o preço quebra o canal e tomará uma posição curta quando o preço quebra o canal. Além disso, quando o preço é comprimido no canal, a estratégia determinará a direção de operação com base no valor positivo e negativo do indicador de compressão de preço.

Especificamente, as bandas de Bollinger calcula o desvio padrão do preço para traçar o trilho superior e inferior; os canais de Keltner traçam o trilho superior e inferior com base na faixa de volatilidade média do preço ± média. Quando a fusão do canal ocorre entre os dois, considera-se que o mercado entra em consolidação enquanto aguarda o próximo rompimento. O indicador de compressão de preços reflete se o preço está comprimido entre os dois canais. A estratégia determina a direção do mercado com base no valor positivo e negativo do indicador de compressão.

Em resumo, esta estratégia integra múltiplos indicadores para julgar o movimento dos preços e formar uma lógica clara de longo e curto prazo, que pode efetivamente filtrar falsas rupturas e identificar oportunidades de negociação de alta probabilidade.

Vantagens da estratégia

  1. Integra múltiplos indicadores com forte capacidade de julgamento.

  2. A diferença do indicador serve como uma condição auxiliar para evitar negociações desnecessárias.

  3. O canal funciona como a posição de stop-loss, que pode ajustar automaticamente com base na flutuação do mercado para reduzir as perdas.

  4. Configurações de parâmetros simples, adequadas para automação. Com apenas alguns parâmetros-chave, é fácil de testar, otimizar e integrar em sistemas de negociação automatizados.

Riscos da Estratégia

  1. Mudança frequente de longo para curto quando o mercado flutua acentuadamente, levando a um aumento do número de transações.

  2. Parâmetros de indicador incorretos podem perder boas oportunidades de negociação.

  3. Aplicável apenas a acções com uma direcção clara, não adequada para mercados extremamente voláteis.

Orientações de otimização

  1. Aumentar o módulo de controlo de posição para otimizar a eficiência da utilização do capital.

  2. Aumentar o modelo de aprendizagem de máquina para ajustar dinamicamente os parâmetros dos indicadores, permitindo que os indicadores se adaptem automaticamente a diferentes ciclos e diferentes estoques.

  3. Melhorar a estratégia de stop loss introduzindo mais indicadores auxiliares para determinar o tempo de stop loss.

Conclusão

Esta estratégia integra Bandas de Bollinger, Canais de Keltner e indicador de compressão de preços para formar uma lógica clara para o sistema de julgamento e controle de risco. Ele combina julgamento de tendência e operações de ruptura, pode se adaptar automaticamente às condições do mercado e identificar oportunidades de negociação de alta probabilidade. Com a otimização de parâmetros e melhoria das condições auxiliares, esta estratégia pode ser reforçada em uma ferramenta importante para negociação quantitativa.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juliopetronilo

//@version=4
strategy("DMI/ADX/Squeeze Robot", shorttitle="DMI/ADX/SQZ", overlay=true)

// Squeeze Momentum Indicator
length = input(20, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)")

source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

ma = sma(source, lengthKC)
rangeKC = useTrueRange ? tr : (high - low)
rangema = sma(rangeKC, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = not (sqzOn or sqzOff)

val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)

// DMI/ADX Plot
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
keyLevel = input(23, title="Key Level for ADX")

dirmov(len) =>
    up = change(high)
    down = -change(low)
    truerange = rma(tr, len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

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

[sig, up, down] = adx(dilen, adxlen)

// Estrategia de Trading
strategy.entry("Buy", strategy.long, when=sqzOn and crossover(up, down) and crossover(val, 0))
strategy.entry("Sell", strategy.short, when=sqzOn and crossunder(up, down) and crossunder(val, 0))
strategy.close("Buy", when=sqzOff)
strategy.close("Sell", when=sqzOff)

// Plot de los indicadores
plot(val, color=color.blue, style=plot.style_histogram, linewidth=4)
plot(0, color=noSqz ? color.blue : sqzOn ? color.black : color.rgb(236, 238, 247), style=plot.style_cross, linewidth=2)
plot(up, color=color.blue, title="+DI")
plot(down, color=color.gray, title="-DI")
plot(keyLevel, color=color.white, title="Key Level")



Mais.