Estratégia de banda alvo de volatilidade suavizada


Data de criação: 2024-01-29 16:22:14 última modificação: 2024-01-29 16:22:14
cópia: 0 Cliques: 591
1
focar em
1617
Seguidores

Estratégia de banda alvo de volatilidade suavizada

Visão geral

Esta estratégia baseia-se na flutuação suave dos preços, gerando uma faixa alvo de preços e um sinal de negociação quando os preços ultrapassam a faixa alvo.

Princípio da estratégia

A estratégia primeiro calcula a amplitude média de oscilação do preço em um determinado período, e depois processa a amplitude de oscilação de forma suave com uma média móvel indexada, gerando uma taxa de flutuação suave. A taxa de flutuação suave é multiplicada por um fator, obtendo o alcance da faixa-alvo. Quando o preço quebra a faixa-alvo, gera um sinal de compra; Quando o preço quebra a faixa-alvo, gera um sinal de venda.

Especificamente, a estratégia calcula a taxa de flutuação suave smrng através da função smoothrng, e depois calcula os bandos h e l da faixa alvo com base no valor de smrng. Com base nisso, define uma condição de posição longa longCondition e uma condição de posição curta shortCondition. Quando as condições de posição longa são satisfeitas, gera um sinal de compra; Quando as condições de posição curta são satisfeitas, gera um sinal de venda.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O uso da volatilidade de preços para construir sinais de negociação permite um acompanhamento eficaz das mudanças no mercado.

  2. Os índices de média móvel podem ser usados para suavizar oscilações, filtrar o ruído e gerar sinais de negociação mais confiáveis.

  3. O alcance da faixa-alvo pode ser ajustado com o coeficiente de taxa de flutuação, permitindo maior flexibilidade na estratégia.

  4. A combinação de um julgamento de ruptura de preços permite capturar oportunidades de negociação em tempo hábil quando a tendência se inverte.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. Quando ocorrem oscilações anormais no mercado, a taxa de flutuação de suavização pode não refletir com precisão a situação real de flutuação, resultando em sinais errados. O modelo pode ser otimizado através do ajuste de parâmetros.

  2. O alcance da faixa-alvo pode resultar em frequência de negociação excessiva ou em sinal insuficiente se for configurado incorretamente. Diferentes parâmetros podem ser testados para encontrar o alcance ideal.

  3. A detecção de um sinal de ruptura pode ocorrer com um atraso de tempo, o que pode levar a uma entrada antecipada ou tardia. Pode ser confirmada em combinação com outros indicadores.

Direção de otimização

A estratégia pode ser otimizada nas seguintes direções:

  1. Teste diferentes ciclos de dados de preços para encontrar o parâmetro de ciclo mais adequado para calcular a taxa de flutuação.

  2. Tente diferentes algoritmos de média móvel, como a média móvel de peso linear.

  3. A introdução de volume de transações ou outros indicadores para confirmar o sinal de ruptura.

  4. O que é um trailing stop?

  5. Otimizar o valor do coeficiente de flutuação mult para determinar a melhor faixa de banda alvo.

Resumir

Esta estratégia de conceito global é clara, através da volatilidade dos preços de construção de alvos de banda, o uso de preços de ruptura para gerar sinais de negociação, pode efetivamente acompanhar a tendência de mudança de mercado. Mas também existe um certo espaço de melhoria, através de parâmetros de otimização, a introdução de indicadores de confirmação e outros meios pode tornar a estratégia mais estável e confiável.

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

//@version=4
strategy("1SmSm1 Strategy", shorttitle="1SmSm1", overlay=true)

// Source
src = input(defval=close, title="Source")

// Sampling Period
per = input(defval=100, minval=1, title="Sampling Period")

// Range Multiplier
mult = input(defval=3.0, minval=0.1, title="Range Multiplier")

// Smooth Average Range
smoothrng(x, t, m) =>
    wper = (t * 2) - 1
    avrng = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper) * m
    smoothrng

smrng = smoothrng(src, per, mult)

// Range Filter
rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? ((x - r) < nz(rngfilt[1]) ? nz(rngfilt[1]) : (x - r)) : ((x + r) > nz(rngfilt[1]) ? nz(rngfilt[1]) : (x + r))
    rngfilt

filt = rngfilt(src, smrng)

// Filter Direction
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])

downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

// Target Bands
hband = filt + smrng
lband = filt - smrng

// Breakouts
longCondition = (src > filt) and (src > src[1]) and (upward > 0)
shortCondition = (src < filt) and (src < src[1]) and (downward > 0)

strategy.entry("Buy", strategy.long, when = longCondition)
strategy.entry("Sell", strategy.short, when = shortCondition)

// Plotting
plot(filt, color=upward > 0 ? color.lime : downward > 0 ? color.red : color.orange, linewidth=3, title="Range Filter")
hbandplot = plot(hband, color=color.aqua, transp=100, title="High Target")
lbandplot = plot(lband, color=color.fuchsia, transp=100, title="Low Target")

// Fills
fill(hbandplot, lbandplot, color=color.aqua, title="Target Range")

// Bar Color
barcolor(longCondition ? color.green : shortCondition ? color.red : na)

// Alerts
alertcondition(longCondition, title="Buy Alert", message="BUY")
alertcondition(shortCondition, title="Sell Alert", message="SELL")