A estratégia de negociação de breakout escalável gera sinais de negociação quando o preço atravessa os principais níveis de suporte e resistência identificados pelas oscilações de preço. É uma estratégia de breakout altamente flexível e extensível. A estratégia pode ser adaptada a diferentes prazos ajustando parâmetros e pode facilmente integrar filtros adicionais e mecanismos de gerenciamento de risco para otimização.
A estratégia utiliza, em primeiro lugar, oswings()
A função para calcular os altos e baixos do balanço com base no período de retrospecção.swingLookback
Os sinais longos são acionados quando o preço quebra acima da alta do swing, e os sinais curtos são acionados quando o preço quebra abaixo da baixa do swing.
Especificamente, um sinal longo é acionado quando o preço de fechamento é maior ou igual ao preço alto do swing. Um sinal curto é acionado quando o preço de fechamento é menor ou igual ao preço baixo do swing.
A estratégia estabelece igualmente um objectivo de cessação baseado nastopTargetPercent
Parâmetro para definir o nível de stop loss. Por exemplo, a stop loss longa pode ser definida em 5% abaixo do swing high, e a stop loss curta pode ser definida em 5% acima do swing low.
A vantagem desta estratégia é a flexibilidade para ajustar o período de retrospecção para controlar a frequência do comércio. Um período de retrospecção mais curto torna mais sensível a breakouts e aumenta a frequência do comércio. Um período de retrospecção mais longo diminui a sensibilidade e a frequência do comércio, mas pode perder oportunidades. Encontrar o período de retrospecção ideal é crucial para otimizar a estratégia.
Atenuantes:
A estratégia pode ser reforçada de várias formas:
Teste diferentes valores do período de observação para encontrar parâmetros ideais.
Teste diferentes prazos, tais como 5m, 15m, 1h para determinar o melhor prazo.
Otimizar a percentagem de stop loss para equilibrar o potencial de lucro versus a gestão de riscos.
Adicionar filtros como volume, volatilidade para reduzir configurações inferiores.
Integrar mais mecanismos de gestão de riscos como trailing stop, aproveitamento de lucros.
Optimização de parâmetros através de análise de avanço e aprendizagem de máquina.
Introduzir a IA/aprendizagem de máquina para otimização automática de parâmetros.
A estratégia de negociação de breakout escalável é um sistema de breakout robusto e personalizável. É simples de usar e altamente adaptável ajustando lookback e adicionando filtros. Pode facilmente integrar o gerenciamento de risco para controle de risco. Com otimização de parâmetros e integração de aprendizado de máquina, a estratégia pode evoluir ao longo do tempo para se adaptar aos mercados em mudança.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h 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/ // © deperp //@version=5 // strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0) // Backtest Time Period useDateFilter = input.bool(true, title="Begin Backtest at Start Date", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2020"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingLookback = input.int(20, title="Swing Lookback", minval=3) stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1) // Calculate lockback swings swings(len) => var highIndex = bar_index var lowIndex = bar_index var swingHigh = float(na) var swingLow = float(na) upper = ta.highest(len) lower = ta.lowest(len) if high[len] > upper highIndex := bar_index[len] swingHigh := high[len] if low[len] < lower lowIndex := bar_index[len] swingLow := low[len] [swingHigh, swingLow, highIndex, lowIndex] // Strategy logic [swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback) longCondition = inTradeWindow and (ta.crossover(close, swingHigh)) shortCondition = inTradeWindow and (ta.crossunder(close, swingLow)) if longCondition strategy.entry("Long", strategy.long) if shortCondition strategy.entry("Short", strategy.short) longStopTarget = close * (1 + stopTargetPercent / 100) shortStopTarget = close * (1 - stopTargetPercent / 100) strategy.exit("Long Stop Target", "Long", limit=longStopTarget) strategy.exit("Short Stop Target", "Short", limit=shortStopTarget) // Plot break lines // line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right) // line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right) // Alert conditions for entry and exit longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh)) shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow)) longExitCondition = close >= longStopTarget shortExitCondition = close <= shortStopTarget alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position") alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position") alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position") alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")