
Esta estratégia é conhecida como o Price Channel VWAP Trading Strategy, uma estratégia baseada no canal de preços para realizar transações VWAP. A ideia principal da estratégia é: dentro do canal de preços, usar a linha média do indicador VWAP e sua linha de canal de desvio para cima e para baixo para determinar o ponto de compra e venda.
A estratégia calcula o preço médio de transação a preços atuais através do indicador VWAP. O VWAP representa o preço médio, que é o valor médio entre o valor de transação e o volume de transação. O indicador VWAP reflete o desvio entre o preço atual e o preço médio de transação histórico.
A estratégia usa a média do indicador VWAP e sua linha de canal de desvio. A proporção da linha de canal de desvio é definida por meio dos parâmetros longlevel1 e shortlevel1. Quando o preço quebra a linha de canal de desvio, abra uma lista de negociação de acordo com a porcentagem de posição do parâmetro lotsizelong; Quando o preço quebra a linha de canal de desvio, abra uma lista de negociação de acordo com a porcentagem de posição do parâmetro lotsizeshort.
A configuração de parâmetros da estratégia reflete o conceito de negociação de canal. Os usuários podem ajustar a largura do canal e o tamanho da proporção de posição de acordo com suas preferências, permitindo diferentes níveis de frequência de negociação.
A estratégia de negociação tem as seguintes vantagens:
Como o indicador VWAP pode refletir bem o nível médio dos preços, baseando-se em sua linha de corredor, pode efetivamente bloquear o centro de valor, evitando ser desviado por bandas de flutuação de curto prazo. Ao mesmo tempo, a combinação de diferentes canais de parâmetros, construção em lotes, pode efetivamente controlar o risco, evitar que o risco unilateral se concentre em explosão de posição. Finalmente, a perda causada pela reversão de preços pode ser reduzida por um retorno a tempo de parada para a posição de equilíbrio perto da linha de equilíbrio VWAP.
A estratégia também apresenta alguns riscos que devem ser lembrados:
O indicador VWAP não é sensível a flutuações de negociação de alta frequência, e ainda pode desencadear sinais de negociação e perdas desnecessários se houver uma explosão extrema ou uma anomalia de curto prazo. Além disso, se os parâmetros de canal forem configurados com demasiada flexibilidade, será fácil criar sinais de invalidez de penetração de preços. Finalmente, se a posição de equilíbrio de operação de retorno for configurada de forma muito ampla, poderá perder o melhor tempo de parada e travar perdas.
A contra-medida é o ajuste razoável dos parâmetros de avaliação, o ajuste apropriado dos parâmetros do canal; ao mesmo tempo, em combinação com outros indicadores, julgar as anomalias de preço, evitar o acompanhamento cego; e, finalmente, avaliar a otimização dos parâmetros de diferentes níveis de canal e de regressão, para obter um melhor efeito de parada.
A estratégia pode ser otimizada em várias direções:
É possível adicionar mais níveis de corredores e otimizar os parâmetros de combinação para obter um efeito de negociação mais estável. Além disso, é possível adicionar regras de julgamento de volume de negociação, evitando que o salto de preço inativo cause perdas de negociação. Finalmente, também é possível definir regras de parada de perda, quando a perda de posição atinge uma certa proporção, para controlar efetivamente o risco.
Esta estratégia combina o indicador VWAP com o canal de preços, permitindo uma estratégia de negociação relativamente estável. A configuração dos parâmetros da estratégia é flexível e o usuário pode ajustá-la de acordo com suas próprias preferências. A estratégia pode determinar efetivamente a direção central do valor, alcançando um efeito de lucro estável através da combinação de parâmetros e da construção de estoques.
/*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")