Estratégia de negociação de rompimento do indicador de momentum


Data de criação: 2023-09-18 21:28:22 última modificação: 2023-09-18 21:28:22
cópia: 0 Cliques: 691
1
focar em
1617
Seguidores

Visão geral

A estratégia usa o indicador de momentum da faixa de Brin para a negociação de ruptura, principalmente para determinar se o preço quebrou a faixa de Brin para o baixo e emitiu um sinal de compra e venda.

Princípios

A estratégia baseia-se principalmente na direção da tendência dos indicadores da faixa de Brin. A faixa de Brin é uma região em forma de faixa composta por uma média móvel e seu desvio padrão. A linha central da faixa de Brin é a média móvel de n dias, a linha superior é a linha média + 2 vezes o desvio padrão e a linha inferior é a linha média 2 vezes o desvio padrão.

Concretamente, a estratégia primeiro calcula o preço máximo e mínimo de n dias, e calcula o preço médio (((preço máximo + preço mínimo) / 2). Em seguida, calcula-se a média móvel ponderada da distância entre o preço de fechamento e o preço médio para formar a linha média da faixa de Bryn, adicionando 2x a diferença padrão para formar a linha de ascensão e descensão.

Se o preço de fechamento quebrar a trajetória superior, indica que está em uma tendência ascendente; se quebrar a trajetória inferior, indica que está em uma tendência descendente. Faça mais quando quebrar a trajetória superior, faça espaço quando quebrar a trajetória inferior.

Além disso, a estratégia também introduziu um mecanismo de abertura de posição reversa. Quando o preço quebra a faixa de Brin e entra em rota, se o MACD estiver em queda, uma operação de mercado inverso será executada para fechar.

Vantagens

  1. O uso da faixa de Brin para determinar a direção da tendência tem uma certa capacidade de acompanhamento de tendências.

  2. A inversão de posições permite obter lucros negativos.

  3. Pode-se personalizar os parâmetros do ciclo de Binance, o múltiplo da diferença padrão, etc., para se adaptar a diferentes períodos de negociação.

  4. A posição pode ser fechada e reversível, reduzindo o risco.

Riscos e soluções

  1. A banda de Brin é frequentemente usada em ações de alta volatilidade e pode não ser adequada para variedades de longo período, como recursos ou índices. A eficácia de diferentes parâmetros de ciclo pode ser testada.

  2. O sinal de ruptura pode ser falseado. Pode ser combinado com outros fatores para filtrar o sinal.

  3. A reversão de posição pode aumentar ainda mais os prejuízos. O módulo de reversão de posição pode ser desligado.

  4. O retiro pode ser maior. Pode-se ajustar o tamanho da posição adequadamente.

Direção de otimização

  1. Pode-se considerar a inclusão de filtros de tendência para evitar mercados de turbulência com direção incerta.

  2. Pode-se testar o múltiplo de diferença padrão da faixa de Bryn para encontrar um parâmetro mais adequado.

  3. Pode-se introduzir estratégias de stop loss para controlar perdas individuais.

  4. Otimizar a lógica de abertura e acréscimo de posições para tornar os sinais de negociação mais claros

Resumir

Esta estratégia baseia-se em indicadores de Brin, para julgar a ruptura da tendência de preços. A estratégia básica de acompanhamento de tendências pode ser realizada usando configurações simples de parâmetros.

Overview

This strategy uses Bollinger Bands momentum indicator for breakout trading, mainly judging if price breaks through the upper or lower Bollinger Bands for trading signals.

Principles

The strategy is primarily based on Bollinger Bands indicator to determine trend direction. Bollinger Bands consist of a middle band based on a moving average and upper/lower bands defined by standard deviations. The middle band is a n-period moving average, the upper band is middle band + 2 standard deviations, and the lower band is middle band - 2 standard deviations. When price approaches the upper band it indicates overbought conditions, and when it approaches the lower band it signals oversold conditions.

Specifically, the strategy first calculates the highest high and lowest low over last n periods, and the middle price ((highest high + lowest low)/2). It then calculates the distance between close price and middle price, uses exponential moving average of the distance to form the middle band, and adds/subtracts 2 times standard deviation above and below to form the upper and lower bands.

When close price breaks through the upper band, it signals an uptrend; when it breaks the lower band, it signals a downtrend. The strategy goes long when the upper band is broken, and goes short when the lower band is broken.

In addition, the strategy incorporates a counter-trend mechanism. When price breaks the upper band but MACD is falling, it will take a counter-trend short position.

Advantages

  1. Using Bollinger Bands to determine trend direction provides certain trend following capability.

  2. Counter-trend design allows profiting from reversals.

  3. Customizable parameters like period and standard deviation multiples make it adaptable to different trading horizons.

  4. Disable counter-trend trading to reduce risk.

Risks and Mitigations

  1. Bollinger Bands work best for high volatility stocks, may not be suitable for stable commodities or indices. Can test different period parameters.

  2. Breakout signals may have false breakouts. Can add filters with other indicators.

  3. Counter-trend trading can further increase losses. Can disable counter-trend module.

  4. Drawdowns may be significant. Can adjust position sizing.

Enhancement Opportunities

  1. Consider adding trend filter to avoid whipsaw in non-directional markets.

  2. Test different standard deviation multiples to find optimal parameters.

  3. Incorporate stop loss to control single trade loss.

  4. Optimize entry and add-on logic for clearer trading signals.

Summary

The strategy uses Bollinger Bands as the primary indicator and trades based on trend breakouts. With simple parameters it provides basic trend following capabilities. But false breakout risks exist, requiring additional filters. Parameters, stop loss and risk controls can be enhanced. Overall it serves as a reasonable baseline breakout strategy.

Código-fonte da estratégia
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()