Estratégia de negociação de acompanhamento de tendências com base no oscilador de volume


Data de criação: 2024-01-29 15:04:18 última modificação: 2024-01-29 15:04:18
cópia: 0 Cliques: 760
1
focar em
1617
Seguidores

Estratégia de negociação de acompanhamento de tendências com base no oscilador de volume

Visão geral

Esta estratégia é uma estratégia de acompanhamento de tendências baseada em um indicador modificado de volume de transação. Utiliza a linha média de volume de transação para identificar sinais de aumento de volume de transação e, assim, determinar a entrada ou saída de posições.

Princípio da estratégia

  1. Calcule o volume de transação em vol_sum, com o comprimento em vol_length, e leve o comprimento em vol_smooth.
  2. Quando o volume aumenta acima do limiar, gera um sinal de compra, e quando o volume cai acima do limiar, gera um sinal de venda.
  3. Para evitar erros, a compra é feita somente quando o preço de fechamento da linha K da raiz de direção anterior é comparado com a tendência de preços de alta. A venda é feita quando a tendência de preços de baixa.
  4. Configure dois limiares, o threshold e o threshold2. O threshold é usado para gerar um sinal de transação, e o threshold2 é usado para parar o prejuízo.
  5. A lógica de abertura de estoque de pedidos através da máquina de estado.

Análise de vantagens

  1. A utilização de indicadores de volume de transação permite a captura de mudanças nas tendências de compra e venda no mercado, o que aumenta a precisão do sinal.
  2. A combinação com a análise de tendências de preços pode evitar sinais errôneos durante os movimentos de preços.
  3. O risco pode ser controlado melhor com o uso de dois limiares para abrir e parar posições.

Análise de Riscos

  1. Os indicadores de volume de transação, por si só, estão atrasados e podem perder o ponto de inflexão dos preços.
  2. A configuração errada dos parâmetros pode causar uma frequência de transação excessiva ou um sinal de atraso.
  3. O ponto de parada pode ser ultrapassado em um cenário de aumento de volume de transações.

Estes riscos podem ser controlados por meio de ajustes de parâmetros, otimização da forma como os indicadores são calculados e confirmação em combinação com outros indicadores.

Direção de otimização

  1. Pode-se considerar otimizar os parâmetros do indicador para se adaptar, ajustando-se automaticamente à situação do mercado.
  2. Pode ser combinado com outros indicadores, como o índice de volatilidade de preços, para verificar ainda mais os sinais e aumentar a precisão.
  3. Pode-se estudar a aplicação de modelos de aprendizagem de máquina ao julgamento de sinais, usando julgamentos de modelos para melhorar a precisão.

Resumir

Esta estratégia é uma estratégia de acompanhamento de tendências mais estável, com a utilização de um oscilador de volume de transação melhorado, auxiliando a determinação da tendência de preços, estabelecendo dois limites para abrir e parar posições. O espaço de otimização é principalmente no ajuste de parâmetros, filtragem de sinais e estratégia de parada.

Código-fonte da estratégia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy('Volume Advanced', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end    = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

source = close 
vol_length  = input(34, title = "Volume - Length")
vol_smooth  = input(200,title = "Volume - Smoothing")
volriselen  = input(21,  title = "Volume - Risinglength")
volfalllen  = input(13, title = "Volume - Fallinglength")
threshold   = input(1,"threshold")
threshold2  = input(1.2,step=0.1, title="Threshold 2")
direction = input(13,"amount of bars")


volsum  = sum(volume, vol_length) / (sum(volume, vol_smooth) / (vol_smooth / vol_length))


LongEntry  = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close > close[direction]
ShortEntry = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close < close[direction]
LongExit1  = falling (volsum,volfalllen)
ShortExit1 = falling (volsum,volfalllen)
LongExit2= (crossover(volsum, threshold2) and close < close[direction])


_state = 0
_prev = nz(_state[1])
_state := _prev

if _prev == 0
    if LongEntry
        _state := 1
        _state
    if ShortEntry
        _state := 2
        _state
if _prev == 1
    if ShortEntry or LongExit1
        _state := 0
        _state
if _prev == 2
    if LongEntry or ShortExit1
        _state := 0
        _state

_bLongEntry = _state == 1 
_bLongClose = _state == 0 

long_condition = _bLongEntry and close > close[direction]
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  _bLongClose or LongExit2
strategy.close('BUY', when=short_condition)

plot(volsum,      color = color.green,    title="Vol_Sum")
plot(threshold, color = color.fuchsia, transp=50, title="Threshold")
plot(threshold2, color=color.white, transp = 50, title="Threshold 2")