Negociação de linha de tendência em tempo real com base em pontos de pivô e declive

ATR ADX MA
Data de criação: 2024-04-26 15:34:28 última modificação: 2024-04-26 15:34:28
cópia: 2 Cliques: 457
1
focar em
1230
Seguidores

Negociação de linha de tendência em tempo real com base em pontos de pivô e declive

Visão geral

A estratégia usa os pontos de apoio (PivotHigh e PivotLow) para identificar os altos e baixos de oscilação dos preços e, com base neles, traçar uma linha de tendência para cima e para baixo. A inclinação da linha de tendência é calculada por métodos como o ATR (Average True Range), a diferença padrão ou a regressão linear e é multiplicada por um fator de inclinação.

Princípio da estratégia

  1. Utilize as funções ta.pivothigh () e ta.pivotlow () para detectar os altos de flutuação () e os baixos de flutuação () nos últimos períodos.
  2. De acordo com o método de cálculo escolhido (ATR, diferença padrão ou regressão linear), calcule a inclinação da linha de tendência e faça o ajuste multiplicado pelo fator de inclinação (mult).
  3. Utilizando a inclinação e o preço de referência, calcule o valor atual da linha de tendência ascendente (upper) e da linha de tendência descendente (lower).
  4. Determine se o preço de fechamento atual quebrou a linha de tendência: se o preço de fechamento estiver acima da linha de tendência ascendente, um sinal de ruptura ascendente será gerado; se o preço de fechamento estiver abaixo da linha de tendência descendente, um sinal de ruptura descendente será gerado.
  5. Desenhe uma linha de tendência no gráfico e escolha se deseja estender a linha de tendência.
  6. Negociar de acordo com o sinal de ruptura: para cima, abrir mais opções e para baixo, abrir opções vazias.

Vantagens estratégicas

  1. A estratégia gera sinais de negociação com base em fatos objetivos do comportamento dos preços (pontos de apoio e linhas de tendência) e possui certa confiabilidade e estabilidade.
  2. A inclinação da linha de tendência pode ser ajustada dinamicamente de acordo com a volatilidade do mercado, adaptando-se a diferentes condições de mercado.
  3. O usuário pode escolher com flexibilidade o método de cálculo da inclinação e a configuração dos parâmetros para otimizar o desempenho da estratégia.
  4. A estratégia oferece dois modos de sinal real e sinal de atraso, que podem atender às necessidades de diferentes usuários.
  5. A função de alerta embutida ajuda os usuários a obter oportunidades de negociação em tempo hábil.

Risco estratégico

  1. A estratégia pode gerar frequentes falsos sinais em mercados turbulentos ou quando a tendência é incerta, resultando em diminuição da lucratividade.
  2. O desempenho da estratégia depende da configuração de parâmetros, e os parâmetros inadequados podem causar a falha da estratégia ou gerar excesso de transações.
  3. No modo de sinal de atraso, os resultados reais das transações podem diferir dos resultados dos testes históricos devido à existência de feedback.

Direção de otimização da estratégia

  1. A introdução de mais indicadores técnicos ou características de comportamento de preços, como volume de negociação, volatilidade, etc., para auxiliar na confirmação de sinais de ruptura da linha de tendência e melhorar a qualidade do sinal.
  2. Filtragem de sinais de negociação, levando em conta fatores como a duração da ruptura da linha de tendência e a amplitude da ruptura, para reduzir os sinais falsos.
  3. Optimizar o gerenciamento de posições e o controle de risco, como ajustar o tamanho das posições de acordo com a intensidade das tendências do mercado ou a volatilidade da taxa de variação, estabelecendo posições de stop loss e stop loss razoáveis.
  4. Otimização de parâmetros, como o uso de aprendizado de máquina ou algoritmos de otimização, para encontrar a melhor combinação de parâmetros.

Resumir

A estratégia utiliza pontos de apoio e a inclinação da linha de tendência para construir um sistema de negociação de linha de tendência em tempo real. Capturando eventos de ruptura da linha de tendência, a estratégia pode negociar nos primeiros estágios da formação da tendência.

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

//@version=5
strategy(" only Ajay ", overlay=true)

//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')

//Style
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')

//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 0.

var offset = backpaint ? length : 0

n = bar_index
src = close

ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

//Slope Calculation Method
slope = switch calcMethod
    'Atr'    => ta.atr(length) / length * mult
    'Stdev'  => ta.stdev(src,length) / length * mult
    'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult

//Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl

upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl

var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos

//------------------------------------------------------------------------------}
//Extended Lines
//------------------------------------------------------------------------------{
// var uptl  = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
// var dntl  = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)

// if ph and showExt
//     uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
//     uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))

// if pl and showExt
//     dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
//     dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))

//------------------------------------------------------------------------------}
//Plots
//------------------------------------------------------------------------------{
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)

//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]

if (upBreakout)
    strategy.entry("Up Breakout", strategy.long)

if (dnBreakout)
    strategy.entry("Down Breakout", strategy.short)

//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')

//------------------------------------------------------------------------------}