Tendência baseada no volume na sequência da estratégia de negociação

Autora:ChaoZhang, Data: 2024-01-29 15:04:18
Tags:

img

Resumo

Trata-se de uma estratégia de negociação baseada em um indicador de oscilador de volume modificado. Utiliza médias móveis de volume para identificar sinais de volume crescente e determinar entradas ou saídas. Enquanto isso, incorpora julgamento de tendência de preço para evitar sinais errados durante oscilações de preço.

Estratégia lógica

  1. Calcule a média móvel de volume vol_sum com comprimento de vol_length e suavize-a pela média móvel de período vol_smooth.
  2. Gerar sinais longos quando o volume_sum ultrapassa o limite e sinais curtos quando o volume_sum cai abaixo do limite.
  3. Para filtrar falsos sinais, só demorar quando a tendência do preço verificado em barras de direção passado é para cima e vice-versa.
  4. Defina dois valores de limiar limiar e limiar2. limiar gera sinais de negociação enquanto limiar2 atua como stop loss.
  5. Gerenciar ordens de abertura/fechamento através de uma lógica de máquina de estado.

Análise das vantagens

  1. O indicador de volume capta as alterações no poder de compra/venda do mercado para sinais mais precisos.
  2. Combinar com a tendência de preços evita sinais errados durante oscilações de preços.
  3. Dois valores-limite para melhor controlo dos riscos.

Análise de riscos

  1. O indicador de volume tem atraso e pode perder pontos de virada dos preços.
  2. Ajustes de parâmetros errados levam a excesso de negociação ou atrasos no sinal.
  3. O stop loss pode ser atingido durante picos nos volumes de negociação.

Os riscos podem ser mitigados ajustando os parâmetros, otimizando o cálculo dos indicadores e combinando outras confirmações.

Orientações de otimização

  1. Optimização adaptativa dos parâmetros com base nas condições do mercado.
  2. Incorporar outros indicadores como o índice de volatilidade para verificar ainda mais os sinais.
  3. Pesquisa que aplique modelos de aprendizagem de máquina para melhorar a precisão do sinal.

Conclusão

Esta estratégia utiliza um oscilador de volume melhorado com tendência de preço para determinar entradas e saídas com dois valores de limiar de stop loss. É um sistema estável de tendência seguindo com espaço de otimização no ajuste de parâmetros, filtragem de sinal e estratégias de stop loss.


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

Mais.