Estratégia de negociação VWAP do canal de preços

Autora:ChaoZhang, Data: 2024-02-19 14:25:18
Tags:

img

Resumo

Esta estratégia é chamada de Price Channel VWAP Trading Strategy. É uma estratégia que implementa a negociação VWAP baseada em canais de preços. A ideia principal desta estratégia é: dentro do canal de preços, use a linha média móvel do indicador VWAP e suas linhas de canal de deslocamento superior e inferior para julgamento de pontos de compra e venda. Quando as linhas de canal são quebradas, abra posições de acordo com a porcentagem fixa dos ativos totais e feche posições quando os preços regredirem para a linha média móvel VWAP.

Princípio da estratégia

Esta estratégia calcula o preço médio de transação atual através do indicador VWAP. O VWAP representa o preço médio e é a relação entre o volume de negócios e o volume de negócios. O indicador VWAP reflete o grau de desvio entre o preço atual e o preço médio de negociação histórico.

A estratégia usa a linha média móvel do indicador VWAP e suas linhas de canal deslocadas. As proporções das linhas de canal deslocadas são definidas através dos parâmetros longlevel1 e shortlevel1. Quando o preço atravessa a linha superior do canal deslocado, abra posições longas de acordo com a porcentagem de posições definidas pelo parâmetro lotsizelong; quando o preço atravessa a linha inferior do canal deslocado, abra posições curtas de acordo com a porcentagem de posições definidas pelo parâmetro lotsizeshort. Após abrir as posições, escolha fechar as posições quando os preços regressarem ao redor da linha média móvel VWAP.

A configuração dos parâmetros desta estratégia reflete plenamente a ideia de negociação de canal. Os usuários podem ajustar a largura do canal e o tamanho das posições como uma porcentagem do total de ativos de acordo com suas próprias preferências, realizando assim diferentes graus de frequência de negociação.

Análise das vantagens

Esta estratégia comercial tem as seguintes vantagens:

  1. O uso de indicadores VWAP para determinar os pontos médios de valor pode capturar a direção do mercado convencional
  2. A negociação dentro dos intervalos de canais evita interferências sonoras para uma operação mais clara
  3. A combinação de canais de diferentes níveis, a implantação em lotes reduz o risco
  4. A obtenção de lucros em tempo útil por regressão evita perdas causadas por inversões rápidas

Uma vez que o indicador VWAP pode refletir bem o nível médio de preços, a negociação baseada em suas linhas de canal pode efetivamente bloquear pontos médios de valor e evitar ser tendencioso por flutuações de curto prazo. Ao mesmo tempo, a combinação de canais com parâmetros diferentes e a construção de posições em lotes podem controlar efetivamente os riscos e evitar concentrações de risco unilaterais que resultam em liquidações forçadas.

Análise de riscos

Esta estratégia tem também alguns riscos a considerar:

  1. O indicador VWAP não é sensível às negociações de alta frequência e não pode refletir anomalias extremas de preços
  2. Configurações incorretas dos parâmetros de largura de canal podem levar a negociações excessivamente agressivas
  3. Se o intervalo de operações de regressão para fechar posições for demasiado amplo, pode causar perdas presas

O indicador VWAP é insensível à volatilidade de negociação de alta frequência. Em caso de lacunas de preço extremas ou anomalias de curto prazo, ele ainda desencadeará sinais de negociação e perdas desnecessários. Além disso, se os parâmetros do canal forem definidos muito soltos, ele facilmente formará sinais de penetração de preço inválidos. Finalmente, se o intervalo de posições fechadas em operações de regressão for definido muito amplo, ele pode perder o melhor momento para a obtenção de lucros e causar perdas presas.

As contra-medidas consistem em avaliar de forma razoável as definições dos parâmetros e ajustar adequadamente os parâmetros dos canais; ao mesmo tempo, combinar outros indicadores para julgar as anomalias dos preços e evitar sinais de seguimento cego; e, finalmente, avaliar a otimização dos parâmetros dos canais de diferentes níveis e faixas de regressão para obter melhores efeitos de lucro.

Orientações de otimização

Esta estratégia pode ser otimizada nas seguintes direcções:

  1. Aumentar o nível dos canais e otimizar as combinações de parâmetros
  2. Combinar indicadores de volume de negociação para determinar a validade dos avanços
  3. Adicionar estratégias de stop loss e definir o stop loss com base no rácio de drawdown

Além disso, regras de julgamento de volume de negociação podem ser adicionadas para evitar lacunas de preço inválidas causando perdas de negociação. Finalmente, regras de stop loss também podem ser definidas para que, quando a perda de posições atinge uma certa porcentagem, o stop loss para posições de saída, controlando efetivamente os riscos.

Resumo

Esta estratégia combina o indicador VWAP com os canais de preço para alcançar uma estratégia de negociação relativamente estável. As configurações dos parâmetros da estratégia são flexíveis para que os usuários ajustem de acordo com suas próprias preferências. Esta estratégia pode determinar efetivamente a direção dos pontos médios de valor. Através da combinação de parâmetros e da construção de lotes de posições, a lucratividade estável pode ser alcançada. Embora ainda haja espaço para melhoria na estratégia, no geral é uma estratégia de negociação quantitativa com alta praticidade.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %")
lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
shortlevel1 = input(1.0, title = "Short line 1")
longlevel1 = input(-1.0, title = "Long line 1")
needoffset = input(true, title = "Offset")

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
truetime = true

//VWAP
ma = vwap(hlc3)

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close


//Lines
colorlong1 = long1 ? color.lime : na
colorshort1 = short1 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")


//Trading
lotlong = 0.0
lotshort = 0.0
lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1]
lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1]


if ma > 0
    if lotlong > 0
        lotslong = 0.0
        lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
        strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime))
    if lotshort > 0
        lotsshort = 0.0
        lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0
        strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime))
if strategy.position_size > 0
    strategy.exit("TPL", "L1", limit = ma)
if strategy.position_size < 0
    strategy.exit("TPS", "S1", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("L1")
    strategy.cancel("S1")
    strategy.cancel("TPL")
    strategy.cancel("TPS")

Mais.