
A estratégia de ruptura dinâmica baseia-se no conceito de Richard Buchstaber, desenvolvido em 1984, de que, quando ocorrem grandes flutuações, o mercado tende a continuar nessa direção. Portanto, a estratégia usa o ATR para medir a volatilidade e emite um sinal de negociação quando a mudança no preço de fechamento excede o valor de um número de vezes o ATR.
A estratégia primeiro calcula o indicador ATR para medir a volatilidade do mercado. Em seguida, calcula o valor absoluto da variação do preço de fechamento diário. Quando o preço de fechamento varia em excesso em várias vezes o valor do indicador ATR, gera um sinal de negociação.
A estratégia usa o indicador ATR para determinar dinamicamente o limiar de ruptura. Quando a volatilidade do mercado aumenta, o limiar aumenta, o que reduz a ocorrência de transações erradas. Quando o mercado se desvanece, o limiar diminui, o que permite capturar oportunidades de ruptura.
Pode-se considerar a combinação de outros indicadores para selecionar o momento da negociação e aumentar a eficiência. Também pode-se selecionar parâmetros mais favoráveis para as características da variedade. A frequência de negociação pode ser controlada por técnicas como o uso de algoritmos Martinegil.
A estratégia de breakout dinâmico é simples e direta, usando breakouts para gerar sinais de negociação. O ATR stop loss permite que ele se adapte à volatilidade do mercado. A estratégia depende da otimização de parâmetros para obter bons resultados. Mas também há alguns problemas, como perder a primeira breakout, negociação frequente, etc. Isso requer melhorias adicionais em combinação com outras técnicas para obter lucros estáveis em mercados complexos.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © EduardoMattje
//@version=5
strategy("Volatility System", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=20000)
// Inputs
var averageLength = input.int(14, "Average length", 2)
var multiplier = input.float(2.0, "Multiplier", 0.0, step=0.1)
// Calculations
atr = ta.atr(averageLength) * multiplier
closingChange = ta.change(close, 1)
atrPenetration(int signal) =>
res = closingChange * signal > atr[1]
longCondition = atrPenetration(1)
shortCondition = atrPenetration(-1)
// Order calls
if (longCondition)
strategy.entry(strategy.direction.long, strategy.long)
if (shortCondition)
strategy.entry(strategy.direction.short, strategy.short)
// Visuals
plot(atr, "ATR", color.white, 2)
plot(math.abs(closingChange), "Absolute close change", color.red)