A estratégia é um sistema de retração projetado para valores mobiliários altamente voláteis e, portanto, o Bitcoin é uma variedade de negociação muito ideal. A estratégia pode ser usada em diagrama ou em um período de tempo menor (eu encontrei bons resultados em um período de 3 horas, mas não testei em menos de 1 hora).
A estratégia calcula a volatilidade comparando as variações de preços de fechamento das duas linhas K anteriores e gera uma média móvel com essa variação de preço. Uma banda de desvio padrão é envolvida na média móvel, com um desvio padrão interno e dois desvios padrão externos. Se o preço for superior ao filtro de média móvel predefinido, é determinado que estamos em uma tendência ascendente, então, ao subir, um sinal de compra é emitido se houver uma retração que cause a ruptura da banda de desvio padrão interno.
O usuário pode alterar o intervalo de datas que deseja testar, calcular a média móvel do período de flutuação e a diferença padrão da banda de flutuação interna e externa. Para o Bitcoin, eu mantive a banda de flutuação padrão interna e externa na configuração padrão, mas descobri que o acompanhamento da taxa de flutuação de 3 ciclos era bom para o dia de negociação de gráficos de 1 dia e o acompanhamento da taxa de flutuação de 5 ciclos era bom para o dia de negociação de gráficos de 3 horas.
Métodos de gestão de riscos:
A escolha de um indicador de volatilidade apropriado, para controlar a posição de uma única moeda.
Optimizar parâmetros e reduzir transações inválidas.
O que é que é que a gente está a fazer?
O objetivo é a eficiência na execução das transações e a escolha de indicadores com boa liquidez.
Ajustar os parâmetros para adaptá-los às características de diferentes padrões.
A estratégia pode ser melhorada em vários aspectos:
Otimização do ciclo das médias móveis para melhor acompanhar as flutuações de diferentes indicadores.
Ajustar os parâmetros das faixas de taxa de flutuação para que estejam mais próximos do intervalo de flutuação de um determinado padrão.
Adicionar outras condições de filtragem, como aumento do volume de transação, para verificar ainda mais os sinais de transação.
A utilização de técnicas de aprendizagem de máquina para otimização de parâmetros dinâmicos para tornar as estratégias mais adaptáveis.
Teste em intervalos de tempo mais frequentes para capturar mais oportunidades de negociação.
Adição de rastreamento móvel de stop loss para que os lucros fiquem mais armazenados na conta.
Criar estratégias de combinação quantitativa em combinação com outros indicadores ou modelos.
A estratégia em geral é simples e intuitiva, usando indicadores de volatilidade para identificar reversões e capturar pontos de inflexão no mercado. A estratégia tem amplo espaço para otimização e pode continuar a melhorar a estabilidade e a lucratividade da estratégia, ajustando os parâmetros e combinando outros indicadores técnicos.
/*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)