Estratégia de negociação de oscilação de impulso

Autora:ChaoZhang, Data: 2023-11-21 16:57:07
Tags:

img

Resumo

Esta estratégia é baseada no indicador de Bollinger Bands, combinado com indicadores de impulso para implementar uma estratégia de negociação combinada de reversão de Bollinger Bands e ruptura de impulso.

Estratégia lógica

A estratégia usa a linha média SMA das Bandas de Bollinger como indicador da média móvel e ajusta dinamicamente a largura da banda através do param mult * stdev. Quando o preço quebra a linha média de baixo, ele indica que o ímpeto ascendente é ganho e, portanto, vai longo. Quando o preço quebra a linha média de cima, ele mostra que o ímpeto descendente é ganho e, portanto, vai curto. Após entrar em posições longas / curtas, os parâmetros de stop loss e take profit são definidos para rastrear lucros e controlar riscos.

Especificamente, as Bandas de Bollinger são calculadas com dois parâmetros - comprimento e mult. O comprimento determina o período da linha do meio e o mult decide a largura da banda. enterLong e enterShort julgam o tempo de ruptura. exitLong e exitShort calculam o stop loss e os preços de lucro com base no preço de entrada e na porcentagem alvo.

Vantagens

Esta estratégia combina a reversão para a média e o momento, o que permite capturar as principais tendências desde o início. Em comparação com o simples rastreamento de médias móveis, o julgamento de momento adicionado baseado na largura das Bandas de Bollinger pode filtrar algumas falhas. Stop loss e take profit são definidos diretamente com base no preço de entrada sem intervenção manual.

Riscos

  • Atrás das Bandas de Bollinger, os preços podem ficar atrasados, talvez falte alguns movimentos.
  • A definição de stop loss demasiado larga pode aumentar os riscos de perda
  • Os sinais curtos no mercado de alta podem não resultar bem

Parâmetros como períodos, largura de banda e intervalo de stop loss podem ser otimizados para tornar a estratégia adaptável a diferentes condições de mercado.

Reforço

  • Adicionar volume de negociação ou volatilidade para evitar falsos breakouts de baixo volume
  • Pesquisa de grelha de param para otimizar períodos, coeficiente de largura e porcentagem de perda de parada
  • Ir apenas para longo ou curto com base no regime de mercado
  • Adicionar modelo de Machine Learning para determinar a direção da tendência

Conclusão

Esta estratégia combina os pontos fortes da reversão e do impulso das bandas de Bollinger, o que permite capturar algumas tendências desde o início. Através do ajuste de parâmetros, ele pode se adaptar a diferentes estágios do mercado. O cálculo direto de stop loss / take profit reduz a intervenção manual. Ainda há espaço para melhoria, por exemplo, incorporando mais indicadores auxiliares. Estes serão incrementalmente aprimorados em pesquisas e otimização futuras.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BURATINO", overlay=true)

// Входные параметры
length = input(20, minval=1, title="Length")
mult = input(2.0, minval=0.1, maxval=5, title="Multiplier")
target_percent = input(0.5, minval=0.1, title="Target Percent")
stop_loss_percent = input(95, minval=0.1, title="Stop Loss Percent")

// Расчет полос Боллинджера
basis = sma(close, length)
dev = mult * stdev(close, length)
upper = basis + dev
lower = basis - dev

// Переворот снизу вверх через среднюю линию Боллинджера для открытия лонга
enterLong = cross(close, basis) and close[1] < basis[1]

// Переворот сверху вниз через среднюю линию Боллинджера для открытия шорта
enterShort = cross(basis, close) and close[1] > basis[1]

// Закрытие лонга после роста цены на указанный процент или падения на указанный процент
exitLong = close >= strategy.position_avg_price * (1 + (target_percent / 100)) or close <= strategy.position_avg_price * (1 - (stop_loss_percent / 100))

// Закрытие шорта после падения цены на указанный процент или роста на указанный процент
exitShort = close <= strategy.position_avg_price * (1 - (target_percent / 100)) or close >= strategy.position_avg_price * (1 + (stop_loss_percent / 100))

// Управление позициями и ограничениями на открытие противоположных позиций
strategy.entry("Long", strategy.long, when = enterLong and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when = enterShort and strategy.position_size == 0)

strategy.close("Long", when = exitLong)
strategy.close("Short", when = exitShort)

// Визуализация полос Боллинджера
plot(basis, color=color.blue, title="Basis")
plot(upper, color=color.red, title="Upper")
plot(lower, color=color.green, title="Lower")

Mais.