Estratégia de reversão da faixa de volatilidade do Bitcoin

Autora:ChaoZhang, Data: 2023-10-12 17:38:39
Tags:

Resumo

Esta estratégia é um sistema de pullback projetado para valores mobiliários com alta volatilidade, então naturalmente o Bitcoin é uma excelente escolha para negociar isso.

Estratégia lógica

A estratégia calcula a volatilidade comparando a mudança no preço de fechamento das 2 velas anteriores, e usa essa mudança no preço para gerar uma média móvel. Uma faixa é enrolada em torno da média móvel com um desvio padrão de 1 para a faixa interna e 2 para a faixa externa. Se o preço estiver acima de um filtro MA (média móvel) pré-definido, então é determinado que estamos em uma tendência de alta, então a estratégia emitirá um sinal quando estivermos em uma tendência de alta e houver um pullback que faz com que a faixa de desvio interno inferior seja aumentada, mas se o preço continuar e cair através da faixa de desvio exterior, então um sinal de compra não será emitido, pois isso prejudica que o pico de volatilidade seja muito grande. Você pode ver um pico ocorrer no indicador onde o evento é colorido de verde.

O usuário pode alterar o intervalo de data que deseja testar, o período médio móvel para o rastreamento de volatilidade e os desvios de banda interna e externa. No BTC, deixei o desvio interno e as bandas de desvio externo em configurações padrão, mas descobri que o rastreamento de volatilidade de 3 períodos é bom para a negociação de gráfico de 1 dia e o rastreamento de volatilidade de 5 períodos é bom para o gráfico de 3 horas. Uma vez que esta não é uma estratégia de compra e retenção, então para negociação você provavelmente gostaria de ficar com as moedas mais líquidas para que possa entrar e sair muito rápido em qualquer bolsa. Se você quisesse testar isso em mercados menos voláteis, mudar a faixa de desvio interno para ~ 0,75 também funcionaria bem em vários mercados de ações prováveis. Os níveis de lucro e parada de perda são baseados em uma variedade múltipla da faixa de negociação olhando para trás nos últimos 7 velas.

Vantagens da estratégia

  • Utiliza a negociação de volatilidade para capturar pontos de virada do mercado
  • Negociações longas e curtas, lucrando em mercados ascendentes e descendentes
  • Configurações de parâmetros padrão simples e fáceis de usar
  • Os parâmetros podem ser facilmente otimizados para diferentes subjacentes
  • As configurações razoáveis de stop loss e take profit ajudam a bloquear os lucros

Riscos da Estratégia

  • Os ativos subjacentes de elevada volatilidade correm o risco de sofrer perdas maiores
  • A frequente mudança de longo/curto implica custos comerciais mais elevados
  • As operações de curto prazo exigem um acompanhamento rigoroso do mercado
  • Dificuldade de parar perdas quando a liquidez do mercado é baixa
  • Uma má regulação dos parâmetros pode conduzir a uma troca excessiva

Métodos de redução do risco:

  1. Escolha os subjacentes voláteis apropriados, controle de posições.

  2. Otimizar os parâmetros para reduzir os negócios ineficazes.

  3. Usar stop loss e take profit, gestão rigorosa do dinheiro.

  4. Concentre-se na eficiência da execução, escolha fundamentos líquidos.

  5. Ajustar os parâmetros de acordo com as diferentes características subjacentes.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar o período da média móvel para melhor acompanhar a volatilidade dos diferentes ativos subjacentes.

  2. Ajustar os parâmetros da faixa de volatilidade para melhor adaptá-los à faixa de volatilidade específica do subjacente.

  3. Adicione outros filtros como pico de volume para validar mais sinais.

  4. Usar técnicas de aprendizagem de máquina para otimizar dinamicamente parâmetros de adaptabilidade.

  5. Teste em prazos de frequência mais elevados para capturar mais oportunidades de negociação.

  6. Adicione o rastreamento de stop loss / take profit para bloquear mais lucros.

  7. Combinar com outros indicadores ou modelos para construir estratégias de carteira quantitativas.

Resumo

A estratégia geral é bastante simples e intuitiva, identificando reversões por meio de indicador de volatilidade para capturar pontos de virada do mercado. Há um grande espaço de otimização ajustando parâmetros e incorporando outros indicadores técnicos para melhorar ainda mais a estabilidade e lucratividade. No entanto, os comerciantes precisam estar cientes dos problemas de sobreajuste e curva de ajuste. Esta estratégia é mais adequada para negociação de curto prazo, exigindo uma gestão rigorosa do dinheiro para controlar riscos. Se dominada adequadamente, pode se tornar uma ferramenta poderosa para negociar criptomoedas de alta volatilidade.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-10-11 00:00:00
period: 4h
basePeriod: 15m
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/
// © gary_trades
//This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.

//@version=4

strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)

//VOLATILTY
CandleChange = ((close - close[1])/close)*100         //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)

//VOLATILITY BANDS 
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)

InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)

upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")

band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)

//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)

//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)

//SETTING BACK TEST INPUTS
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)

startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate

//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65

AlertMSG = "New stategy position" + tostring(strategy.position_size)

if (time_condition) 
    strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
    if (LongFilter)
        LongStop = strategy.position_avg_price - Loss
        LongProfit = strategy.position_avg_price + Profit 
        strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)

if (time_condition)
    strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
    if (ShortFilter)
        ShortStop = strategy.position_avg_price + Loss
        ShortProfit = strategy.position_avg_price - Profit 
        strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)




Mais.