Esta estratégia é uma estratégia de negociação de ações adaptativa baseada em indicadores de impulso.
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.
Integra múltiplos indicadores com forte capacidade de julgamento.
A diferença do indicador serve como uma condição auxiliar para evitar negociações desnecessárias.
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.
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.
Mudança frequente de longo para curto quando o mercado flutua acentuadamente, levando a um aumento do número de transações.
Parâmetros de indicador incorretos podem perder boas oportunidades de negociação.
Aplicável apenas a acções com uma direcção clara, não adequada para mercados extremamente voláteis.
Aumentar o módulo de controlo de posição para otimizar a eficiência da utilização do capital.
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.
Melhorar a estratégia de stop loss introduzindo mais indicadores auxiliares para determinar o tempo de stop loss.
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")