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.
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
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.
Métodos de redução do risco:
Escolha os subjacentes voláteis apropriados, controle de posições.
Otimizar os parâmetros para reduzir os negócios ineficazes.
Usar stop loss e take profit, gestão rigorosa do dinheiro.
Concentre-se na eficiência da execução, escolha fundamentos líquidos.
Ajustar os parâmetros de acordo com as diferentes características subjacentes.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimizar o período da média móvel para melhor acompanhar a volatilidade dos diferentes ativos subjacentes.
Ajustar os parâmetros da faixa de volatilidade para melhor adaptá-los à faixa de volatilidade específica do subjacente.
Adicione outros filtros como pico de volume para validar mais sinais.
Usar técnicas de aprendizagem de máquina para otimizar dinamicamente parâmetros de adaptabilidade.
Teste em prazos de frequência mais elevados para capturar mais oportunidades de negociação.
Adicione o rastreamento de stop loss / take profit para bloquear mais lucros.
Combinar com outros indicadores ou modelos para construir estratégias de carteira quantitativas.
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)