Estratégia de Breakout de Faixa Dinâmica


Data de criação: 2023-11-21 15:03:19 última modificação: 2023-12-01 15:00:31
cópia: 0 Cliques: 691
1
focar em
1617
Seguidores

Estratégia de Breakout de Faixa Dinâmica

Visão geral

Esta estratégia baseia-se no indicador da faixa de Brin para criar uma estratégia de negociação de ruptura dinâmica. Combina a filtragem de entidades de linha K e as condições de filtragem de cores para procurar oportunidades de entrada de ruptura perto da faixa de Brin. A saída é baseada em filtragem de entidades.

Princípio da estratégia

Cálculo do indicador

Em primeiro lugar, a linha de base e o sub-carril da faixa de Brim são calculados com base no ponto mais baixo:

src = low 
basis = sma(src, length)
dev = mult * stdev(src, length) 
lower = basis - dev

onde src é o ponto baixo, length é o período de cálculo, base é a linha média, dev é o desvio padrão, e lower é a descida.

O mult geral é definido como 2, representando um desvio padrão para o subtraído.

Condições de filtragem

A estratégia inclui dois filtros:

Filtragem de entidades de linha K Usando o tamanho da entidade nbody e seu valor médio abody, apenas quando nbody é maior que metade do abody, o sinal de negociação é gerado.

Filtros de cores Quando a linha K está fechada ([[close > open]]), não faça mais uma tarefa. Isto é para evitar a falsa ruptura da cabeça do hbox.

Sinais de negociação

O sinal é produzido quando as seguintes condições são cumpridas:

low < lower  // 价格突破下轨
close < open or usecol == false // 色彩过滤
nbody > abody / 2 or usebod == false // 实体过滤

Quando o tamanho da entidade é novamente maior do que a metade da média, a posição de equilíbrio é gerada:

close > open and nbody > abody / 2

Gestão de posições

Estratégias para calcular automaticamente o número de transações e aumentar o índice:

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]  

Controle de Risco

Condições de ano, mês e dia de inscrição, com restrição para transações dentro de um determinado período de tempo:

when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

Vantagens estratégicas

Zona de negociação dinâmica

O Brincar com o traço abaixo é uma área de suporte dinâmica que pode capturar oportunidades de rebote após a tendência do mercado.

Mecanismo de filtragem dupla

A combinação de K-line entities e de discernimento de cores permite uma filtragem eficaz de falhas.

Gestão automática de posições

A posição cresce exponencialmente para 100%, gerenciando automaticamente o risco.

Especificar um intervalo de tempo de transação

A definição de um intervalo de datas reduz o risco de flutuação do mercado em determinados momentos.

Risco estratégico

Tempo de vazio excessivo

Quando o mercado é um longo período de alta, as faixas de Brin e as faixas superiores se movem rapidamente, facilitando o tempo de vazio excessivo.

O que fazer?

Pode ser combinado com o indicador de tendência para julgar e suspender a estratégia quando a linha média e longa for considerada um mercado de touros, evitando que as posições vazias se prolonguem demais.

Falha de ruptura

A reorientação e o retorno ao encalço podem ocorrer após a ruptura do encalço.

O que fazer?

Adicionar a linha de parada de perda, com uma parada proporcional abaixo do suporte. Ou adicionar a lógica de julgamento do fracasso da tentativa de repetição, com uma parada rápida.

Otimização de Estratégia

Aumentar a lógica de stop-loss

De acordo com os dados de retrospectiva, defina uma posição de parada abaixo do suporte razoável.

Optimizar os parâmetros das condições de filtragem

Ajustar o ciclo de abody do filtro da entidade, o uso do filtro COLOR, etc. ❚ Encontrar o conjunto de parâmetros otimizado ❚

Julgamento de tendências

Aumentar o julgamento de tendências de linha média e longa, parar a operação da estratégia quando julgada como um mercado de touros. Reduzir o tempo de posição livre.

Resumir

Esta estratégia, combinada com o suporte de Brinks, projetou a lógica estratégica de filtragem de entidades, filtragem de cores e negociação de ruptura para procurar oportunidades de rebote de alta probabilidade. Na aplicação prática, os parâmetros podem ser continuamente otimizados de acordo com os resultados do feedback e os módulos de determinação de stop loss e tendência podem ser adicionados para controlar o risco, resultando em melhor desempenho.

Código-fonte da estratégia
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period")
usebod = input(false, defval = false, title = "Use Body-Filter")
usecol = input(false, defval = false, title = "Use Color-Filter")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Bollinger
src = low
mult = 2
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
plot(lower, color = lime, linewidth = 3, title="Bottom Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebod == false

//Signals
up1 = low < lower and (close < open or usecol == false) and body
exit = close > open and nbody > abody / 2

//Arrows
needar = up1 and showar
plotarrow(needar ? 1 : na)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()