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

Autora:ChaoZhang, Data: 2024-04-26 15:34:28
Tags:ATRADXMA

img

Resumo

Esta estratégia usa pontos pivô (PivotHigh e PivotLow) para identificar os altos e baixos dos preços e desenha linhas de tendência ascendentes e descendentes com base nesses pontos. A inclinação das linhas de tendência é calculada usando métodos como ATR (Range Verdadeiro Médio), desvio padrão ou regressão linear, e depois ajustada por um fator de inclinação.

Princípio da estratégia

  1. Utilize as funções ta.pivothigh (() e ta.pivotlow (()) para detectar os picos de balanço (ph) e os baixos de balanço (pl) durante um determinado período de retrospectiva.
  2. Calcular a inclinação das linhas de tendência com base no método de cálculo escolhido (ATR, desvio padrão ou regressão linear) e ajustá-la multiplicando por um fator de inclinação (mult).
  3. Usando os preços da inclinação e do ponto de pivô, calcule os valores atuais da linha de tendência ascendente (superior) e da linha de tendência descendente (inferior).
  4. Determinar se o preço de fechamento atual atravessou uma linha de tendência: se o preço de fechamento estiver acima da linha de tendência ascendente, é gerado um sinal de ruptura ascendente; se o preço de fechamento estiver abaixo da linha de tendência descendente, é gerado um sinal de ruptura descendente.
  5. Trace as linhas de tendência no gráfico, com uma opção para estender as linhas.
  6. Negociação baseada nos sinais de ruptura: ir longo numa ruptura ascendente e ir curto numa ruptura descendente.

Vantagens da estratégia

  1. A estratégia gera sinais de negociação baseados em factos objetivos do comportamento dos preços (pontos pivô e linhas de tendência), proporcionando um grau de confiabilidade e estabilidade.
  2. A inclinação das linhas de tendência pode ser ajustada dinamicamente com base na volatilidade do mercado, adaptando-se às diferentes condições do mercado.
  3. Os utilizadores podem escolher de forma flexível o método de cálculo da inclinação e as definições dos parâmetros para otimizar o desempenho da estratégia.
  4. A estratégia prevê modos de sinal em tempo real e com atraso para satisfazer as necessidades de diferentes utilizadores.
  5. A função de alerta integrada pode ajudar os utilizadores a captar oportunamente as oportunidades de negociação.

Riscos estratégicos

  1. Em mercados instáveis ou quando as tendências não são claras, a estratégia pode gerar sinais falsos frequentes, levando a uma diminuição da rentabilidade.
  2. O desempenho da estratégia depende das configurações dos parâmetros; parâmetros inadequados podem causar o fracasso da estratégia ou gerar negociações excessivas.
  3. No modo de sinal com atraso, devido à existência de backtesting, os resultados reais da negociação podem diferir dos resultados históricos dos testes.

Orientações para a otimização da estratégia

  1. Introduzir mais indicadores técnicos ou características do comportamento dos preços, tais como o volume de negociação e a volatilidade, para ajudar a confirmar os sinais de ruptura da linha de tendência e melhorar a qualidade do sinal.
  2. Filtrar os sinais de negociação considerando fatores como a duração e a magnitude das rupturas da linha de tendência para reduzir os falsos sinais.
  3. Otimizar a gestão das posições e o controlo dos riscos, como o ajustamento dinâmico do tamanho das posições com base na força da tendência ou na volatilidade, e definir níveis razoáveis de stop-loss e take-profit.
  4. Otimizar parâmetros utilizando algoritmos de aprendizagem de máquina ou otimização para encontrar as melhores combinações de parâmetros.

Resumo

Esta estratégia utiliza pontos pivô e inclinações da linha de tendência para construir um sistema de negociação de linha de tendência em tempo real. Ao capturar eventos de ruptura da linha de tendência, a estratégia pode negociar nos estágios iniciais da formação da tendência. Embora a estratégia tenha certas vantagens, ainda é necessário estar ciente de seus riscos em mercados agitados e melhorar ainda mais a robustez e a lucratividade da estratégia, introduzindo mais informações, otimizando a filtragem de sinais, o gerenciamento de posições e outros métodos.


/*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')

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


Relacionados

Mais.