Estratégia de acompanhamento de tendências baseada em VWAP


Data de criação: 2024-02-29 15:26:56 última modificação: 2024-02-29 15:26:56
cópia: 0 Cliques: 944
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências baseada em VWAP

Visão geral

A estratégia baseia-se no VWAP e no EMA como indicadores para determinar a direção da tendência, com o VWAP representando o preço típico e o EMA200 representando a tendência da linha média. Fazer mais quando o preço é superior ao VWAP e ao EMA200 e fazer menos quando o preço é inferior ao VWAP e ao EMA200 é uma estratégia típica de seguir a tendência.

Princípio da estratégia

A lógica central da estratégia é usar o VWAP e o EMA para determinar a tendência dos preços.

  • O VWAP representa o preço típico do preço, que pode refletir o custo médio dos participantes do mercado. Quando o preço é maior do que o VWAP, representa o aumento da força do comprador, fazendo mais; Quando o preço é menor do que o VWAP, representa o aumento da força do vendedor, deve ser feito em branco.
  • EMA200 representa a tendência de longo médio do preço. Preço acima do EMA200 representa a tendência de longo médio, deve ser feito mais; preço abaixo do EMA200 representa a tendência de longo médio, deve ser feito.

Portanto, a estratégia primeiro determina se o preço é superior ao VWAP e ao EMA200 ao mesmo tempo, e se for, faz mais; se o preço é inferior ao VWAP e ao EMA200 ao mesmo tempo, faz o zero. Como pode ser visto, a estratégia depende principalmente do VWAP e do EMA para determinar as decisões de compra e venda.

Além disso, a estratégia também estabelece um ponto de parada de parada. A parada de parada é de 3,5% do preço de entrada após o aumento, e a parada de parada é de 1,4%; a parada de parada é de 2,5% do preço de entrada após o corte, e a parada de parada é de 0,9%. Isso evita perdas excessivas.

Vantagens estratégicas

A principal vantagem desta estratégia é que a utilização do VWAP e do EMA para determinar as tendências é muito confiável.

  • O VWAP é um bom indicador de tendências, pois reflete com precisão o custo médio dos participantes do mercado;
  • A EMA200 é capaz de refletir claramente as tendências médias e longas e é muito confiável para determinar a direção das grandes tendências.

Portanto, a combinação de VWAP e EMA para determinar a tendência é muito confiável. Quando ambos avaliam a tendência, a taxa de sucesso da operação é alta.

Além disso, a configuração de um ponto de parada de parada pode evitar perdas individuais excessivas.

Risco estratégico

O principal risco desta estratégia é que o VWAP e a EMA podem emitir sinais errados.

  • Quando há uma forte volatilidade no mercado, o preço pode se desviar do VWAP por um curto período de tempo, emitindo um sinal errado.
  • Quando uma nova tendência está apenas começando, a EMA pode ficar atrás das mudanças de preço, fazendo com que a estratégia perca o melhor momento de entrada.

Além disso, a configuração de stop loss pode ser inadequada e o risco de perdas individuais excessivas permanece.

Para resolver o problema acima, podemos otimizar as configurações dos parâmetros do VWAP e do EMA para que eles sejam mais capazes de discernir o início de uma nova tendência. Ao mesmo tempo, pode-se definir um stop loss adaptativo para que o stop loss se ajuste à flutuação do preço.

Direção de otimização da estratégia

A estratégia pode ser melhorada em vários aspectos:

  • Otimizar os parâmetros VWAP para encontrar combinações de parâmetros VWAP que julgam tendências mais estáveis.
  • Otimizar o ciclo EMA para encontrar um parâmetro EMA mais preciso para determinar a tendência.
  • A adição de outros indicadores de tendências de discernimento, como a faixa de Brin, KDJ e outros em combinação com VWAP e EMA, aumenta a precisão do julgamento.
  • Configure o Stop Loss para se adaptar. De acordo com certas regras, permita que o nível de Stop Loss seja ajustado com a flutuação do preço, evitando que o Stop Loss fique muito alto.
  • Combinado com o gerenciamento de posições. Ajustar o tamanho da posição de acordo com indicadores como retração e número de perdas contínuas, controlar o risco geral da estratégia.

Resumir

A estratégia em geral é uma estratégia de acompanhamento de tendências muito confiável. Utiliza o VWAP e o EMA para determinar a direção da tendência, é clara e simples, e quando os dois emitem sinais consistentes, há uma grande probabilidade de sucesso no ingresso. O risco pode ser controlado com a configuração racional do stop loss. Ainda podemos aperfeiçoar a estratégia de várias maneiras: optimização de parâmetros, aumento de indicadores, adaptação do stop loss, gerenciamento de posição, etc.

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

//26m Binance BTCUSDTPERP
//@version=4
strategy("VWAP Trend Follower", initial_capital=100, overlay=true, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 90, currency = currency.USD )

/// INITIALISE STRATEGY ///
price=close[1]
vprice=vwap(price)
trend=ema(price, 200)

/// RISK MANAGEMENT ///
long_tp_inp = input(3.5, title='Long Take Profit %',step=0.1)/100
long_sl_inp = input(1.4, title='Long Stop Loss %',step=0.1)/100
short_tp_inp = input(2.5, title='Short Take Profit %',step=0.1)/100
short_sl_inp = input(0.9, title='Short Stop Loss %',step=0.1)/100
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)
short_take_level = strategy.position_avg_price * (1 - short_tp_inp)
short_stop_level = strategy.position_avg_price * (1 + short_sl_inp)
//long_trailing = input(5, title='Trailing Stop Long',step=0.1) / 100
//short_trailing = input(5, title='Trailing Stop short',step=0.1) / 100

/// STRATEGY CONDITIONS ///
aLong= price > trend and price > vprice
entry_long = aLong and aLong[2] and aLong[1]
aShort= price < trend and price < vprice 
entry_short = aShort and aShort[2] and aShort[1]
//exit_long = 
//exit_short =
//entry_price_long=valuewhen(entry_long,close,0)
//entry_price_short=valuewhen(entry_short,close,0)

/// PLOTTING ///
plot(vprice,                color=#5875E1, linewidth=2)
plot(trend,                 color=#D965E1, linewidth=1)
plotshape(series=aLong,     color=#71E181,style=shape.labelup)
plotshape(series=aShort,    color=#E18BA5,style=shape.labeldown)
//plot(long_take_level,     color=#00E676, linewidth=2)
//plot(long_stop_level,     color=#FF5252, linewidth=1)
//plot(short_take_level,    color=#4CAF50, linewidth=2)
//plot(short_stop_level,    color=#FF5252, linewidth=1)

/// PERIOD ///
testStartYear   = input(2019, "Backtest Start Year")
testStartMonth  = input(1, "Backtest Start Month")
testStartDay    = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear    = input(2020, "Backtest Stop Year")
testStopMonth   = input(12, "Backtest Stop Month")
testStopDay     = input(31, "Backtest Stop Day")
testPeriodStop  = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true

//// STRATEGY EXECUTION ////

if testPeriod()
    if strategy.position_size == 0 or strategy.position_size > 0
        strategy.entry(id="Long", long=true, when=entry_long, comment="Long")
        strategy.exit("Take Profit/ Stop Loss","Long", limit=long_take_level, stop=long_stop_level,comment="Exit Long")//,trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
//        strategy.close(id="Long", when=exit_long, comment = "Exit Long")

    if strategy.position_size == 0 or strategy.position_size < 0
        strategy.entry(id="Short", long=false, when=entry_short, comment = "Short")
        strategy.exit("Take Profit/ Stop Loss","Short", limit=short_take_level , stop=short_stop_level,comment = "Exit Short")//, trail_points=entry_price_short * short_trailing / syminfo.mintick, trail_offset=entry_price_short * short_trailing / syminfo.mintick)
//        strategy.close(id="Short", when=exit_short, comment = "Exit Short")