Estratégia de negociação baseada no desvio-padrão do volume de negociação

Autora:ChaoZhang, Data: 2023-11-21 11:11:51
Tags:

img

Resumo

Esta estratégia constrói um modelo de volume de negociação usando a média móvel e o desvio padrão do volume de negociação, e determina a direção da tendência com a média móvel do preço para gerar sinais de negociação quando o volume é normal.

Estratégia lógica

A lógica central é construir um modelo de volume de negociação e julgar a tendência dos preços.

  1. Construir modelo de volume de negociação
    • Calcular a média móvel de 40 períodos do volume vavg como linha de base
    • Calcular o desvio-padrão de 40 períodos do volume vsd como faixa de flutuação normal
    • Calcular a média móvel de 5 períodos do volume vavgn como o nível de volume mais recente
    • Defina o limite inferior do volume como vavg menos 1 vezes vsd
    • Defina o limite superior do volume como vavg mais 2 vezes vsd
  2. Evolução dos preços dos juízes
    • Calcular a média móvel de 20 períodos do preço de fechamento (MAVG) como indicador da tendência dos preços
  3. Gerar sinais comerciais
    • Quando o Mvg ultrapassar o valor do dia anterior e o Vvgn ultrapassar o limite mínimo, vá para longo prazo.
    • Quando o MAVG cruzar abaixo do dia anterior e o VAVG estiver acima do limite mínimo, vá para curto
    • Fechar posição quando a tendência de MAVG se inverter

A estratégia combina o modelo de volume de negociação e a tendência de preços para evitar a perseguição de tendências de preços quando o volume é anormal, o que pode filtrar alguns sinais falsos.

Análise das vantagens

  1. Combinando as mudanças de volume para julgar a tendência do preço pode filtrar alguns sinais falsos e tornar os sinais de negociação mais confiáveis
  2. A construção de um modelo de volume de negociação utilizando desvio-padrão evita um impacto extremo no volume
  3. Os parâmetros ajustáveis da média móvel podem adaptar-se às variações de preços em diferentes ciclos

Análise de riscos

  1. O volume e o preço podem divergir a curto prazo, levando a tendências de preços em falta
  2. A configuração incorreta dos parâmetros de volume pode causar falha do modelo
  3. A ausência de stop loss na estratégia pode conduzir a grandes perdas

Soluções:

  1. Ajustar adequadamente os parâmetros da média móvel para otimizar o modelo
  2. Adicionar a lógica de stop loss para controlar a perda única

Orientações de otimização

  1. Adicionar mais indicadores para julgar a tendência dos preços para tornar os sinais mais confiáveis
  2. Aumentar o módulo de aprendizagem de máquina para treinar parâmetros de modelos de volume e preço baseados em dados
  3. Adicionar a lógica de stop loss para evitar perdas individuais excessivas
  4. Otimizar a lógica de entrada para garantir uma maior probabilidade de captura de tendências
  5. Combinar indicadores como ATR para ajustar automaticamente a distância de perda de parada

Resumo

A lógica geral desta estratégia é clara, usando volume para evitar perseguir tendências falsas e os sinais de entrada são relativamente confiáveis. Mas a própria estratégia é simples com grande espaço para expansão. Adicionando mais indicadores, aprendizado de máquina, stop loss e outros módulos, pode melhorar ainda mais a estabilidade e a capacidade de capturar tendências. Esta é uma estratégia típica de perseguição de tendências. Após a otimização, pode se tornar uma estratégia quantitativa muito prática.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dongyun

//@version=4
strategy("交易量底部标准差系统", overlay=true)

options = input(1,'')
length = input(40,'')
nlow = input(5,'')
factor = input(1.0,'')

vavg = 0.0
vavgn = 0.0
vsd = 0.0
lowlimit = 0.0
uplimit = 0.0
mavg = 0.0
aror = 0.0
adjvol = 0.0
savevol = 0.0


//Find average volume, replacing bad values
adjvol := volume

if (volume != 0)
	savevol := volume
else
	savevol := savevol[1]
	adjvol := savevol


// Replace high volume days because they distort standard deviation
if (adjvol > 2 * factor * nz(vsd[1]))
	adjvol := savevol
else
	adjvol := adjvol[1]

vavg := sma(adjvol,length)
vsd := stdev(adjvol,length)
vavgn := sma(adjvol,nlow)

// Extreme volume limits
lowlimit := vavg - factor * vsd
uplimit := vavg + 2 * factor * vsd

// System rules based on moving average trend
mavg := sma(close,length/2)

// Only enter on new trend signals
if (options == 2)
	if (mavg > mavg[1] and mavg[1] <= mavg[2])
		strategy.entry("Long", strategy.long)
	if (mavg<mavg[1] and mavg[1]>=mavg[2])
		strategy.entry("Short", strategy.short)
else
	if (mavg > mavg[1] and vavgn > lowlimit)
		strategy.entry("Long", strategy.long)
	if (mavg < mavg[1] and vavgn > lowlimit)
		strategy.entry("Short", strategy.short)

// Exit on low volume
if (options != 1)
	if (mavg<mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit))
		strategy.close("Long")
	if (mavg>mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit))
		strategy.close("Short")
else
	if (mavg < mavg[1])
		strategy.close("Long")
	if (mavg > mavg[1])
		strategy.close("Short")

Mais.